1、什么是rsync服务?
rsync全称是remote sync,是Unix或类Unix一款数据镜像软件,可以实现差异备份
2、rsync的作用
工作中需要定时或实时对数据进行备份。
通过rsync可以实现增量备份;
配合计划任务,rsync可以实现定时或间隔时间数据同步;
配合inotify,可以实现触发式的实时同步
应用场景:数据库备份的数据同步到异地,文件的同步等
3、简单实现原理说明:
1、假设待传输文件A,如果目标路径下不存在A,则rsync会直接传输A;如果目标路径下存在A,就会比较源文件和目标文件的差异性,把差异性传输给目标端文件,实现文件的同步
注意:rsync的增量传输体现在2个维度:
3.1 文件级的增量传输:文件不存在则直接传输该文件
3.2 数据块级的增量传输;只传输两文件间不同的那一部分数据
2.实现算法原理建议参见 :
4、3、同步说明
文件同步,就要有同步基准,rsync可以实现如下的同步:
3.1 目标文件和本地文件同步,以本地文件为基准,也就是将本地文件推送到目标机器
3.2 本地文件和目标文件同步,以目标文件为基准,也就是将目标文件下载到本地
3.3 目标和本地文件互相同步,即保持2端文件的一致性,互相作为基准实现
5、rsync的三种工作方式
5.1 本地文件系统实现同步。
语法格式:rsync [option] src dest
5.2 通过远程shell实现
pull: rsync [option] user@host:src dest
push: rsync [option] src user@host:dest
5.3 通过rsync进程
pull: rsync [option] user@host::src dest
push: rsync [option] src user@host::dest
6、 搭建rsync服务器
#先确定是否安装rsync
rpm -qa |grep rsync
#未安装则通过yum源安装
yum install rsync -y
rsync配置文件说明
rsync主要分为三个配置文件
1、 /etc/rsyncd.conf 主配置文件
2、 /etc/rsyncd.secrets 密码文件,用户存放用户和密码
3、/etc/rsyncd.motd 服务信息文件
编辑主配置文件 /etc/rsyncd.conf
#设置服务器信息提示文件名称,在该文件中编写提示信息
motd file = /etc/rsyncd.motd
#是否开启传输日志功能
transfer logging = yes
#日志文件路径
log file = /var/run/rsyncd.log
#服务进程pid文件
pid file = /var/run/rsyncd.pid
#设置锁文件
lock file = /var/run/rsyncd.lock
#定义服务端口
port 873
#定义侦听地址
adress 192.168.161.70
#设置进行数据传输时所用的用户uid和组gid
uid = nobody
gid = nobody
use chroot = no
#设置客户端只能可读
read only = yes
#设置最大的并发连接数
max connections = 10
[common]
comment = rsync for common dir
path = /common
#忽略一些IO错误
ignore errors
#认证用户
auth users = tom,jerry
#认证用户的密码文件
secrets file = /etc/rsyncd.secrets
#允许访问的地址段
hosts allow = 192.168.161.0/24
#拒绝访问的地址(除开允许的外)
host deny = *
客户二段请求显示模块列表时,本模块名称是否显示
list = false
a . 编辑密码文件
#编辑密码文件
vim /etc/rsyncd.secrets
tom:123456
jerry:123456
#修改密码文件权限,必须为600,否则会报错
chmod 600 /etc/rsyncd.secrets
b.编辑提示信息文件
echo "hello,this is rsync" >> /etc/rsyncd.motd
c.防火墙设置以及服务启动
#防火墙设置
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reload
#重新启动服务
rsync --daemon
#设置服务开机自启
echo "/usr/bin/rsync --daemon" >> /etc/rc.local
#验证服务是否启动(可以确认进程或确定端口,端口正常为修改为873)
ps -ef |grep rsync
netstat -tunpl |grep rsync
d. rsync参数选项说明
-v 显示rsync过程中的详细信息
-P 显示 文件的传输进度
-n 仅测试,而不实际传输,一般配合-vvv查看rsync是如何工作的
-a 归档模式,表示递归传输并保持文件的属性
-t 保持mtime属性,建议任何时间都加上该选项
-o 保持owner属性
-g 保持gid属性
-p 保持文件的权限
-z 传输过程进行压缩,加快传输速率
-D 拷贝特殊文件和设备文件
-size-only 默认算法是检查文件大小和文件的mtime,使用此选项只检查文件的大小
--exclude 排除不需要的文件,类似于tar中的exclude选项
-u update 仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。
-d dir 以不递归的方式拷贝目录本身(其中的文件不做拷贝)
--max-size 限制rsync传输的最大文件大小
--min-size 显示rsync的传输的最小文件大小,用于禁止传输小文件或那些垃圾文件
--delete 以src为主,对dest进行同步,多则删,少则补
-b backup 对目标已经不能再的文件做一个备份
-W whole-file rsync将不再使用增量传输,而是全量传输
--existing 要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输。
--ignore-existing 要求只更新目标端不存在的文件。和"--existing"结合使用有特殊功能
注意事项:
1、使用rsync一定要注意的一点是,源路径如果是一个目录的话,带上尾随斜线和不带尾随斜线是不一样的,不带尾随斜线表示的是整个目录包括目录本身,带上尾随斜线表示的是目录中的文件,不包括目录本身
2、服务端的rsync的密码文件权限必须为600
3、服务端rsync的服务运行者和密码文件secret user 的拥有者必须为同一个用户
4、如果是以--password-file=file的方式附带密码,确保客户端密码文件格式无误,与服务端不同,客户端的不用加上用户名
案例:客户端请求服务端并做同步
rsync -avz tom@192.168.161.70::test --password-file=/etc/rsync.secrets /commom/
[root@client common]# rsync -avz tom@192.168.161.70::test --password-file=/etc/rsync.secrets /commom
hello, this is rsync
receiving incremental file list
created directory /commom
./
aa.html.bak
curl-7.43.0.tar.gz
diff_01.py
diff_02.py
dns_a.py
file_name
filecmp_01.py
lxm_mail.py
mem.py
net.py
web_check.py
sent 236 bytes received 4,319,732 bytes 8,639,936.00 bytes/sec
total size is 4,342,460 speedup is 1.01