sersync实时同步数据
inotify:是一个可以实时监控文件和目录的工具
监控文件内容是否发生变化,目录是否发生创建和删除
实时同步:通过监控到文件或目录有变化,就会触发rsync推送数据的动作,起到实时同步的作用
安装inotify——在客户端安装
明确inotify安装在客户端
1 2 3 4
| yum -y install inotify-tools
rpm -ql inotify-tools 使用的是ywait 和ywatch
|
inotify选项和参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| -m 持续监控 -r 递归 -q 静默,仅打印时间信息 --timefmt 指定输出时间格式 --format 指定事件输出格式 %Xe 事件 %w 目录 %f 文件 -e 指定监控的事件 access 访问 modify 内容修改 attrib 属性修改 close_write 修改真实文件内容 open 打开 create 创建 delete 删除 umount 卸载
|
inotify命令测试
1
| inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /backup
|
脚本实时同步
1 2 3 4 5 6 7 8 9 10 11
| [root@web01 ~]# cat bak.sh
export RSYNC_PASSWORD=123 bak_dir=/zls_backup/ /usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write $bak_dir|while read line;do rsync -az --delete $bak_dir rsync_backup@172.16.1.41::zls done
若发生服务器重启,脚本无法使用,所以还是有缺陷的,就无法实时监控文件或目录是否有变化,所以我们就可以使用Sersync
|
Sersync+rsync实时同步
1 2 3 4 5 6 7
| 实时同步的目的:为了保证数据的一致性 所以我们可以使用Sersync+rsync
Inotify 是一个通知接口,用来监控文件系统的各种变化,如果文件存取,删除,移动。可以非常方便地实现文件异动告警,增量备份,并针对目录或文件的变化及时作出响应。 rsync+inotify 可以实触发实时同步增量备份
sersync 是国人基于 rsync+inotify-tools 开发的工具,不仅保留了优点同时还强化了实时监控,文 件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。sersync项目地址
|
环境准备——实现3台机器同步
主机名 |
公网IP |
内网IP |
作用 |
应用 |
backup |
10.0.0.41 |
172.16.1.41 |
仓库(存储所有备份数据的机器),服务端 |
rsync的服务端 |
web01 |
10.0.0.7 |
172.16.1.7 |
需要备份数据的机器,客户端 |
rsync的客户端、sersync、inotify |
web02 |
10.0.0.8 |
172.16.1.8 |
需要备份数据的机器,客户端 |
rsync的客户端、sersync、inotify |
安装rsync服务端并配置(backup)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| 1、安装rsync服务端 yum -y install rsync 2、配置rsync服务端 (作实时备份,两边的目录要一致) vim /etc/rsyncd.conf 删除里面的全部内容,添加如下内容 [root@backup ~]# cat /etc/rsyncd.conf uid = rsync gid = rsync port = 873 fake super = yes use chroot = no max connections = 200 timeout = 600 ignore errors read only = false list = false auth users = rsync_backup secrets file = /etc/rsync.passwd log file = /var/log/rsyncd.log
[backup] comment = welcome to backup! path = /backup
[data_web01] path = /data_web01 [data_web02] path = /data_web02
3、创建配置文件里面的目录 mkdir /data_web01 mkdir /data_web02
4、创建用户 useradd rsync -s /sbin/nologin -M
5、授权目录 chown rsync.rsync /data_web01 chown rsync.rsync /data_web02
6、创建密码文件 echo 'rsync_backup:123' >/etc/rsync.passwd chmod 600 /etc/rsync.passwd
7、启动服务,开机自启动 [root@backup ~]# systemctl start rsyncd [root@backup ~]# systemctl enable rsyncd
|
安装配置sersync客户端(web01、web02)
Web01
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| 1、下载sersync安装包,下载依赖包rsync、inotify-tools yum -y install inotify-tools wget http://test.driverzeng.com/other/sersync2.5.4_64bit_binary_stable_final.tar.gz 2、创建安装目录 mkdir /app cd / tar xf app/sersync2.5.4_64bit_binary_stable_final.tar.gz -C app/ 修改程序目录名,习惯要给程序做软连接 [root@web01 app]# mv /app/GNU-Linux-x86 /app/sersync-2.5.4 [root@web01 app]# ln -s sersync2.5.4 sersync 测试推送 rsync -az --delete /data_web01 rsync_backup@172.16.1.41::data_web01 --password-file=/etc/rsync.pass 3、修改配置文件 找到inotify 改成true
[root@web01 app]# vim /app/sersync/confxml.xml <inotify> <delete start="true"/> <createFolder start="true"/> <createFile start="true"/> <closeWrite start="true"/> <moveFrom start="true"/> <moveTo start="true"/> <attrib start="true"/> <modify start="true"/> </inotify> <sersync> <localpath watch="/data_web01"> <remote ip="172.16.1.41" name="data_web01"/> <!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--> </localpath> <rsync> <commonParams params="-az --delete"/> <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pass"/> <userDefinedPort start="false" port="874"/><!-- port=874 --> <timeout start="false" time="100"/><!-- timeout=100 --> <ssh start="false"/> </rsync> <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> <crontab start="false" schedule="600"><!--600mins--> <crontabfilter start="false"> <exclude expression="*.php"></exclude> <exclude expression="info/*"></exclude> </crontabfilter> </crontab> <plugin start="false" name="command"/> </sersync>
|
1 2 3 4 5 6 7 8 9 10
| 4、创建数据目录data mkdir /data_web01 5、创建密码文件,授权600 [root@web01 app]# echo '123' > /etc/rsync.pass [root@web01 app]# chmod 600 /etc/rsync.pass 6、启动服务 [root@web01 app]# /app/sersync/sersync2 -rdo /app/sersync/confxml.xml 再用此命令实现数据同步 cd /data_web01 && rsync -az --delete -R --delete ./ rsync_backup@172.16.1.41::data_web01 --password-file=/etc/rsync.pass 在data创建文件,查看服务端是否同步数据即可
|
Web02
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| 1、下载sersync安装包,下载依赖包rsync、inotify-tools yum -y install inotify-tools wget http://test.driverzeng.com/other/sersync2.5.4_64bit_binary_stable_final.tar.gz 2、创建安装目录 mkdir /app cd / tar xf app/sersync2.5.4_64bit_binary_stable_final.tar.gz -C app/ 修改程序目录名,习惯要给程序做软连接 [root@web01 app]# mv /app/GNU-Linux-x86 /app/sersync-2.5.4 [root@nfs app]# cd ~ [root@nfs ~]# ln -s /app/sersync-2.5.4 /app/sersync 创建数据目录,测试推送 mkdir /data2 rsync -az --delete /data2 rsync_backup@172.16.1.41::datd --password-file=/etc/rsync.pass
3、修改配置文件 找到inotify 改成true
[root@web01 app]# vim /app/sersync/confxml.xml <inotify> <delete start="true"/> <createFolder start="true"/> <createFile start="true"/> <closeWrite start="true"/> <moveFrom start="true"/> <moveTo start="true"/> <attrib start="true"/> <modify start="true"/> </inotify>
<sersync> <localpath watch="/data_web02"> <remote ip="172.16.1.41" name="data_web012"/> <!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--> </localpath> <rsync> <commonParams params="-az --delete"/> <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pass"/> <userDefinedPort start="false" port="874"/><!-- port=874 --> <timeout start="false" time="100"/><!-- timeout=100 --> <ssh start="false"/> </rsync> <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> <crontab start="false" schedule="600"><!--600mins--> <crontabfilter start="false"> <exclude expression="*.php"></exclude> <exclude expression="info/*"></exclude> </crontabfilter> </crontab> <plugin start="false" name="command"/> </sersync>
5、创建密码文件,授权600 [root@web01 app]# echo '123' > /etc/rsync.pass [root@web01 app]# chmod 600 /etc/rsync.pass 6、启动服务 [root@web01 app]# /app/sersync/sersync2 -rdo /app/sersync/confxml.xml 再用此命令实现数据同步 cd /data_web02 && rsync -az --delete -R --delete ./ rsync_backup@172.16.1.41::data_web02 --password-file=/etc/rsync.pass 在data创建文件,查看服务端是否同步数据即可
|