黑马程序员技术交流社区

标题: 【上海校区】rsync+Inotifywait实现文件实时同步 [打印本页]

作者: 梦缠绕的时候    时间: 2018-12-24 14:53
标题: 【上海校区】rsync+Inotifywait实现文件实时同步
某客户想实现实现异地灾备,想达到的是A机房出现断电的时候。数据能实时的将数据同步到B上,并且域名切换到B之后能提供业务 。使用rsync+inotify做web数据和ftp(ftp主要是用户上传的图片文件)的数据实时同步.
一:软件介绍:二 :实验环境:
操作系统:centos7
同步源端:10.10.1.128
同步目的端:10.10.1.129
如图:

服务器A为同步源端,服务器B为同步目的端。
三:环境部署
uid = root
gid = root
use chroot = yes
address = *
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 10.10.1.129
[datadir]
path = /var/www/html
read only = false
dont compress = .gz .tgz .zip .z .Z .rpm .deb .bz2
auth users = root
secrets file = /etc/rsyncd_users.db
10.10.1.129的配置文件如下:
uid = root
gid = root
use chroot = yes
address = *
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 10.10.1.128
[datadir]
path = /var/www/
read only = false
dont compress = .gz .tgz .zip .z .Z .rpm .deb .bz2
auth users = root*
secrets file = /etc/rsyncd_users.db

在执行运程同步任务时,rsync命令需要指定同步源服务器中的资源位置。rsync同步源的资源表示方式为“用户名@主机地址::共享模块名”或者“rsync://用户名@主机地址/共享模块名”,前者为两个冒号分隔形式,后者为URL地址形式。
rsync -avz root@10.10.1.128::datadir /opt
rsync -avz rsync://root@10.10.1.128/datadir /opt
注意:此操作是先做全量的数据拉取。机房A和B用专线链接,如果数据量较大考虑非工作时间同步,避免影响客户应用。本次执行拉取数据量不大,与客户方沟通可在工作时间执行。

测试:在源端创建三个文件分别是test111-333.txt文件,在目的端上将文件同步到本地
    四 :部署inotify工具
软件安装
在源服务器上执行
/usr/local/inotify/bin/inotifywait -mrq -e modify,create,move,delete /var/www/html/监控源服务器的文件状态 。在/var/www/html/目录下删除文件,可以看到工具可以实时监控到源服务器出现文件变动情况
在源服务器删除文件test111----test666.txt的文件
Inotifywait工具实时监控到文件变动情况,如下截图


编写触发脚本:

内容如下:
#!/bin/bash
INOTIFY_CMD="/usr/local/inotify/bin/inotifywait -mrq -e
modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -avH --port=873 --progress --delete /var/www/html root@10.10.1.129::datadir --password-file=/etc/server.pass"
$INOTIFY_CMD | while read file
do
$RSYNC_CMD
echo "${file}" >> /tmp/rsync.log 2>&1
done
/etc/server.pass的文件权限改成600,文件内部填写密码
启动脚本后台运行实时监控文件监控与同步
脚本实时监控文件的修改,删除,创建等操作后触发rsync进行增量的同步源服务器上 ,rsync的日志记录到/tmp/rsync.log , 进行验证
在源端上创建111-555 五个文件夹,可以看到数据实时的同步到目的端上,如下图

在源端删除刚刚创建的目录,在目的端会看到目录自动删除

使用rsync+inotifywait进行实时同步数据验证成。


作者: 不二晨    时间: 2018-12-26 09:59





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2