简介shell
rsync=remote sync,即远程数据同步备份工具,最大的优点就是快速安全
特性bash
能够镜像保存整个目录树和文件系统;服务器
能够很容易作到保持原来文件的权限、时间、软硬连接等等;ssh
无须特殊权限便可安装; socket
优点tcp
快速:ide
第一次同步时 rsync 会复制所有内容,但在下一次只传输修改过的文件;工具
rsync 在传输数据的过程当中能够实行压缩及解压缩操做,所以可使用更少的带宽; 测试
安全:
可使用scp、ssh等方式来传输文件,固然也能够经过直接的socket链接;
工做模式
shell模式:也称本地模式,相似cp;
远程shell模式:此时可使用ssh协议承载其数据传输过程;
列表模式:仅列出源的内容,使用选项-nv便可,相似ls;
服务器模式:此时rsync工做为守护进程,可以接受客户端的数据传输请求;在使用时,能够在客户端使用rsync命令把文件发送给守护进程,也能够向服务器请求获取文件;
经常使用使用选项一级
-n:# 测试指令,在不肯定命令可否能按照意愿执行时,务必要先进行测试 -v:--verbose # 详细输出模式 -q:--quiet # 静默模式 -c:--checksum # 开启校验功能,强制对文件传输进行校验 -r:--recursive # 递归复制 -a:--archive # 归档,保留文件的原有属性,等同于-rlptgoD,通常都使用此选项 -p:perms # 保留文件的权限 -t:times # 保留文件的时间戳,很重要,保持源端文件和目的端文件的mtime一致能避免重复同步问题 -l:links # 保留文件的符号连接 -g:group # 保留文件的属组 -o:owner # 保留文件的属主 -D:--devices # 保留设备文件
注:对-r选项的重点解释
经常使用使用选项二级
-e ssh # 表示使用ssh协议做承载(rsync不具有加密功能) -z # 对文件压缩后传输 --progress # 显示每一个文件传输进度条 --stats # 显示传输文件的统计信息 --existing # 不一样步新文件,只同步已存在目的端的文件 --ignore-existing # 不更新已存在文件,只同步新文件 --delete # 目的端删除源端不存在的文件,即保持和源端一致 --delete-before # 默认删除策略,同步前删除目的端文件 --delete-after # 删除策略,同步后删除目的端文件 --delete-excluded # 专门指定需在目的端删除的文件,后跟--exclude选项 --exclude=PATTERN # 源端匹配PATTERN模式的文件,屏蔽其同步 --exclude-from=FILE # 从文件中读取PATTERN
配置rsync以daemon方式运行
设定rsync服务器端
安装并启动xinetd
# 安装程序 yum -y install xinetd rsync # 配置文件设置 # vi /etc/rsyncd.conf # Global Settings uid = nobody # 运行rsync的用户 gid = nobody # 运行rsync的组 use chroot = no # 关闭chroot max connections = 2 # 最大链接数 strict mode = yes # 开启对密码文件权限的严格限制,不能被除rsync运行用户之外的用户访问,即密码文件权限通常得是600 pid file = /var/run/rsyncd.pid # pid文件 log file = /var/log/rsyncd.log # 日志文件 # Directory Settings [mydata] # 对于备份目录的模块名,在同步时使用 path = /mydata/data # 需备份的数据目录 ignore errors = yes # 同步时,忽略错误 read only = no # 非只读 write only = no # 非只写 hosts allow = 172.16.0.0/16 # 访问控制,容许访问的来源IP段 hosts deny = * # 访问控制,不容许访问的来源IP,此处*表明所有 list = false # 不容许列出目录 uid = root # 会覆盖global settings的相关配置 gid = root # 同上 auth users = jason # 容许同步数据的用户,在此只有一个jason secrets file = /etc/rsyncd.passwd # 密码文件目录
配置密码文件/etc/rsyncd.passwd
# 格式:username:password, # vi /etc/rsyncd.passwd jason:jason123 chmod 600 /etc/rsyncd.passwd
配置服务启动
chkconfig rsync on service xinetd start # 注:rsync被xinetd调用后监听在873/tcp端口
客户端配置
客户端也必须配置密码文件,但格式略有不一样
格式:password # vi /etc/rsyncd.passwd jason123 chmod 600 /etc/rsyncd.passwd
测试数据同步的用法
若是须要作周期性操做,则须要将命令写入crontab中:
# crontab -e */5 * * * * /usr/bin/rsync -a --password-file=/etc/rsyncd.passwd jason@172.16.251.182::mydata /data &>/dev/null
高级应用:rsync+inotify实现数据实时同步
简介
rsync和crontab结合虽然能够实现数据定时同步,但对于须要实时备份数据的场景就不适用了,此时就可借助于inotify了;
inotify其实是Linux Kernel中的一个特性,能够监控文件系统,好比删除、读、写和卸载操做等;
能够利用inotify的监控功能,当待备份文件出现改变(如新增,删除,修改等)时,及时通知rsync进行数据同步操做,就实现了实时同步的目的;
原理说明
由于是发起rsync的主动同步,并且是推送(即PUSH)数据,只能是从rsync客户端向rsync服务器端推送数据,这点与rsync+crontab形式的从服务器端拉取(即PULL)数据不一样,区别以下
具体部署
rsync的服务器端和客户端的配置与上面所述基本相同,再也不赘述;
在rsync客户端再也不是拉取数据,而是推送数据,首先安装inotify-tools,其中包含所需的inotifywait文件系统监控工具
yum -y install inotify-tools
而后配置运行一个后台程序,用以实时监控待备份的数据目录,下面用例中监控本地/tmp目录,将数据同步至rsyns服务器的mydata模块对应的目录下
更多技巧
由于inotify是针对文件系统的监控,很是灵敏,为了防止一些临时文件或者大文件的不断同步问题,可利用以下技巧:
解决编辑文件时产生临时文件同步:--exclude ".*(swp|swx|~)"
解决写入大文件时不断同步的问题:-e close_write,delete,create,attrib