rsync 增量备份

可以只同步变化的文件(对比文件的修改时间)!增量同步!

使用:

 rsync -rvlt   path1    目标文件用户名B@主机名2:path2
-r: 递归,复制目录
-v: 显示复制的过程
-l:  同步软连接
-t:  基于文件的修改时间进行对比,只同步修改时间不同的文件

一般而言,我们会选择使用rsync进行远程同步或拷贝。rsync和scp的区别在于:
-> rsync只对差异文件做更新,可以做增量或全量备份;而scp只能做全量备份。简单说就是rsync只传修改了的部分,如果改动较小就不需要全部重传,所以rsync备份速度较快;默认情况下,rsync 通过比较文件的最后修改时间(mtime)和文件的大小(size)来确认哪些文件需要被同步过去。
-> rsync是分块校验+传输,scp是整个文件传输。rsync比scp有优势的地方在于单个大文件的一小部分存在改动时,只需传输改动部分,无需重新传输整个文件。如果传输一个新的文件,理论上rsync没有优势;
-> rsync不是加密传输,而scp是加密传输,使用时可以按需选择。

SCP 拷贝命令常用参数

-B  使用批处理模式(传输过程中不询问传输口令或短语) 

-C  允许压缩。(将-C标志传递给ssh,从而打开压缩功能) 

-p  保留原文件的修改时间,访问时间和访问权限。 

-q  不显示传输进度条。 

-r  递归复制整个目录。 

-v 详细方式显示输出。scpssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。  

-c cipher  以cipher将数据传输进行加密,这个选项将直接传递给ssh。  

-F ssh_config  指定一个替代的ssh配置文件,此参数直接传递给ssh。 

-i identity_file  从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。   

-l limit  限定用户所能使用的带宽,以Kbit/s为单位。    

-o ssh_option  如果习惯于使用ssh_config(5)中的参数传递方式,  

-P port  注意是大写的P, port是指定数据传输用到的端口号  

-S program  指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

rsync 命令常用参数

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD

-v, --verbose 详细模式输出

-p, --perms 保持文件权限

-g, --group 保持文件属组信息

-o, --owner 保持文件属主信息

-r, --recursive 对子目录以递归模式处理。同步目录的时候要加上这个参数

-l, --links 保留软链结,加上这个参数,同步过来的文件会保持之前的软链接属性不变

-H, --hard-links 保留硬链结

-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步

-z, --compress 对备份的文件在传输时进行压缩处理

--stats 给出某些文件的传输状态

--progress 打印同步的过程

--timeout=TIME 同步过程中,IP超时时间,单位为秒

--delete 删除那些目标目录中有而源目录中没有的多余文件。这个是rsync做增量方式的全备份的最佳选择方案!!!!!!

--delete-before 接受者在输出之前进行删除操作。即先将目标目录中文件全部删除,再将源目录文件拷贝过去。这是rsync保持目标目录跟源目录一致的方案!!!

--delete-after 在同步操作之后做比较,删除那些目标目录中有而源目录中没有的多余文件

--delete-excluded 删除目标目录中那些被该选项指定排除的文件

--ignore-errors 即使出现IO错误也进行删除,忽略错误

--exclude 指定同步时需要过滤掉的文件或子目录(即不需要同步过去的),后面直接跟不需要同步的单个文件名或子目录(不需要跟路径) ,过滤多个文件或子目录,就使用多个--exclude

--exclude-from 指定同步时需要过滤掉的文件或子目录,后面跟文件(比如/root/exclue.txt),然后将不需要同步的文件和子目录放到/root/exclue.txt下。

--version 打印版本信息

--port=PORT 指定其他的rsync服务端口

--log-format=formAT 指定日志文件格式

--password-file=FILE 从FILE中得到密码

--bwlimit=KBPS 限制I/O带宽,KBytes per second

PVE pool pg计算

计算PG Count的公式

1PoolPGCount=(TargetPGsPerOSD ∗ OSDNumber ∗ DataPercent) / PoolReplicateSize

参数

参数名称参数释义备注
PoolPGCount该pool的PG数量 
TargetPGsPerOSD每个OSD的PG数量该值根据如下规则来进行设置:
1. 如果未来集群的OSD数量基本不再增长,Target PGs per OSD =100 
2. 如果未来集群的OSD数量可能增长到目前规模的2倍以内,Target PGs per OSD =200
3. 如果未来集群的OSD数量增长规模大于当前2倍且小于3倍,Target PGs per OSD =300
OSDNumberOSD数目默认是所有的OSD, 具体看OSD所属的rule
一般会通过CRUSH rules划分SSD和SATA两个ruleset,此时单独填写pool所在的对应rule的OSD数量
DataPercent该pool占用所在OSD集群容量百分比需要预估
PoolReplicateSize该pool的副本数replicate size,默认是3
如果是EC pool,该值为 m+n

结果取值

1、如果上述计算结果小于 OSDNumber/PoolReplicateSize ,那就使用值 OSDNumber/PoolReplicateSize 。这是为了确保每个Pool的每个OSD至少分配一个Primary或Secondary PG来确保均匀加载/数据。

2、计算的最终结果应该是与计算结果相邻的2的幂次方。

采用2的幂次方是因为了提高CRUSH算法的效率

3、如果结果超过较小2次幂数值的25%则选择较大的2次幂作为最终结果,反之则选择较小的那个2次幂数值。

目的

1、计算公式的目的是为了确保整个集群拥有足够多的PG从而实现数据均匀分布在各个OSD上,同时能够有效避免在Recovery 和Backfill 的时候因为PG/OSD比值过高所造成的问题。

2、如果集群中存在空pool或者其他non-active的pool,这些pool并不影响现有集群的数据分布,但是这些pool仍然会消耗集群的内存和CPU资源。