一、概念/应用环境
- 开源的备份工具,能够同步整个目录树
- 支持增量备份,传输前会进行压缩
- 适用于异地备份、镜像服务器备份
- 定期同步/检测同步(通过脚本达到目的)
二、搭建/操作实例
2.1 下行同步
#配置源端(开启下行同步) systemctl stop firewalld setenforce 0 rpm -q rsync #查看rsync是否安装,默认安装,未安装则yum install -y rsync.x86_64安装 vim /etc/rsyncd.conf uid = root gid = root use chroot = yes address = 192.168.13.10 port = 873 log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid hosts allow = 192.168.13.0/24 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 [wwwroot] #这个模块名需要记住,命令中定义路径的参数就是模块名 path = /var/www/html #同步的路径指向 comment = Document Root of www.han.comread read only = yes auth users = backuper secrets file = /etc/rsyncd_users.db #配置以上配置文件 vim /etc/rsyncd_users.db backuper:abc123 #创建保存rsync远程连接密码的文件(与rsync.conf中secrets file对应) chmod 600 /etc/rsyncd_users.db #远程同步rsync已配置完毕(此时只是开启了下行同步) #创建目录分享文件测试 mkdir -p /var/www/html touch /var/www/html/test.txt chmod +r /var/www/html/ ls -ld /var/www/html/ rsync --daemon #启动rsync服务 #在另外一台主机上执行同步(密码为/etc/rsyncd_users.db中的配置的密码) rsync -avz backuper@192.168.13.10::wwwroot /test/
2.2 上行同步
#在开启下行同步的情况基础上,开启上行同步(rsync+inotify) vim /etc/rsyncd.conf read only = no #关闭只读 kill $(cat /var/run/rsyncd.pid) rm -rf /var/run/rsyncd.pid rsync --daemon netstat -anpt | grep rsync #重启服务以重新加载配置 vim /etc/sysctl.conf fs.inotify.max_queued_events = 16384 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 1048576 sysctl -p tar zxvf inotify-tools-3.14.tar.gz -C /opt/ cd /opt/inotify-tools-3.14 ./configure make && make install #此时可用命令进行指定目录指定状态监控:inotifywait -mrq -e modify,create,move,delete /var/www/html #此时上行同步已经配置完毕
2.3 测试/删除
cd /mnt touch {1..100}.sh ls #此时/mnt目录下有100个文件 rsync --delete-before -a -H -v --progress --stats /var/www/html/ /mnt #将/var/www/html/目录的内容同步到/mnt/目录中,并且因为添加了--delete-before选项,所以会先删除/var/www/html/没有的文件 #测试2(在源主机:192.168.13.20操作) cd /mnt touch {1..100}.sh ls #此时/mnt目录下有100个文件 rsync --delete-before -a -H -v --progress --stats backuper@192.168.13.10::wwwroot/ /mnt #将主机1的/var/www/html/目录的内容同步到/mnt/目录中,并且因为添加了--delete-before选项,所以会先删除主机1的/var/www/html/没有的文件
三、监控脚本
#可以编写一个脚本,使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录 #如果监控到变化,则启动脚本进行同步 #!/bin/bash INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/" RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.13.10::wwwroot/" $INOTIFY_CMD | while read DIRECTORY EVENT FILE do if [ $(pgrep rsync | wc -l) -le 0 ] ; then #如果rsync未在执行,则立即启动 $RSYNC_CMD fi done chmod +x /opt/inotify.sh chmod 777 /var/www/html/ chmod +x /etc/rc.d/rc.local echo '/opt/inotify.sh' >> /etc/rc.d/rc.local #加入开机自动执行
三、结语
- 不难,主要是自己操作一遍,才有印象