CentOS7下Rsync+sersync实现数据实时同步
1.在客户机和服务机都需要进行的操作:
(1)安装rsync:yum -y install rsync
#启动rsync服务 systemctl start rsyncd.service systemctl enable rsyncd.service #检查是否已经成功启动 netstat -lnp|grep 873(2)配置rsync:vi /etc/rsyncd.conf,在文件中添加一下内容
uid = root # //设置运行rsync 进程的用户 gid = root use chroot = no max connections = 4 # pid file = /var/run/rsyncd.pid #//CentOS7中yum安装不需指定pid file 否则报错 lock file=/var/run/rsyncd.lock log file = /var/log/rsyncd.log # //此文件定义完成后系统会自动创建 exclude = lost+found/ transfer logging = yes timeout = 900 ignore nonreadable = yes # //同步时跳过没有权限的目录 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # //传输时不压缩的文件(3)创建测试目录:#mkdir /data/www/helloRsync
(4)重启:systemctl restart rsyncd.service
(5)假设两台机器上同步文件:A机器和B机器,把A机器上的数据往B机器上同步,下面分别说明在A,B上需要进行的配置
2.B机器上进行的配置:
1):修改/etc/rsyncd.conf,添加内容如下(原来共有添加的内容不要去掉):
#规则名称,作为测试用规则,直接用这个算了。 [helloRsync] #同步的路径 path=/data/www/helloRsync #规则描述 comment=测试规则 ignore errors #是否可以pull read only=no #是否可以push write only=no list=no #下面配置同步时候的身份,注意该身份是在rsync里面定义的,并非是本机实际用户。等下说说如何在rsync里面定义身份。 #客户端获取文件的身份此用户并不是本机中确实存在的用户 auth users=rsyncuser #//用来认证客户端的秘钥文件 格式 USERNAME:PASSWD 此文件权 #//限一定需要改为600,且属主必须与运行rsync的用户一致。 secrets file=/etc/rsyncd.passwd #允许所有主机访问 hosts allow=* 2).给rsync定义身份,如下
echo 'rsyncuser:123456'>/etc/rsyncd.passwd //文件用户名和路径为上面定义,别写错,密码自己定 chmod 600 /etc/rsyncd.passwd //修改权限 3).重启服务:systemctl restart rsyncd.service
3.A机器上进行的配置:
1).创建密码
echo '123456' >>/etc/rsyncd-test.passwd //注意这里只需要服务器rsyncd.passwd 中的密码 chmod 600 /etc/rsyncd-test.passwd 2).手动执行命令测试同步:
①创建个测试文本文件:echo ‘test,hello’>> /data/www/helloRsync/readme.txt
②执行同步命令:rsync -auv --password-file=/etc/rsyncd-test.passwd /data/www/helloRsync/ rsyncuser@120.x.x.x::helloRsync
③在B机器/data/www/helloRsync目录下观察有没有readme.txt文件,如果同步失败,关闭B机器防火墙,重试一次。
3).接下来配置A机器,监听目录自动同步:
①运行命令:# ls /proc/sys/fs/inotify/,显示(max_queued_events max_user_instances max_user_watches)说明支持inotify。
②安装inotify
# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz # tar axvf inotify-tools-3.14.tar.gz # cd inotify-tools-3.14 # ./configure --prefix=/usr/local/inotify # make && make install ③新建监控脚本(创建在inotify安装目录下:/usr/local/inotify):vi /usr/local/inotify/share/inotify.sh 脚本内容如下:
#!/bin/bash # Defined parameter host01=192.168.2.9 #inotify-slave的ip地址 src=/data/www/helloRsync #本地监控的目录 dst=helloRsync #inotify-slave的rsync服务的模块名 user=rsyncuser #inotify-slave的rsync服务的虚拟用户 rsync_passfile=/etc/rsyncd-test.passwd #本地调用rsync服务的密码文件 inotify_home=/usr/local/inotify #inotify的安装目录 #Judge if [ ! -e "$src" ] || [ ! -e "${rsync_passfile}" ] || [ ! -e "${inotify_home}/bin/inotifywait" ] || [ ! -e "/usr/bin/rsync" ];then echo "Check File and Folder" fi ${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | while read files do rsync -auv --password-file=/etc/rsyncd-test.passwd /data/www/helloRsync/ rsyncuser@192.168.2.9::helloRsync done ④使创建生效:# chmod +x /usr/local/inotify/share/inotify.sh
⑤运行脚本:nohup /usr/local/inotify/share/inotify.sh &
⑥在A机器的同步目录下增加文件,看看B机器是不是实时同步,如果没有实时同步,重启一下A机器: systemctl restart rsyncd.service