rsync+inotify-tools实现实时同步数据解决方案
rsync、inotify-tools介绍
rsync具有安全性高、备份速度快、可增量备份,可解决实时性要求不高的数据备份需求,如果对数据的安全性和可靠性要求高的话,单独使用rsync会无法满足需求,因为rsync同步数据是,需要扫描所有的文件后进行对比,进行差量传输,如果文件数量很大的话,扫描文件会很耗时;另外,rsync不能实时的去监测数据,会导致数据同步不及时,会出现不一致的现象。而inotify可对文件系统进行高效率、细粒度、异步监控,利用rsync、inotify-tools组合,rsync用于同步文件,inotify-tools侦听文件的改变,实现文件几乎实时同步。
实际项目中,我们用rsync+inotify-tools的组合方式进行影像文件的同步,一台web服务器(部署tomcate,用于操作文档),一台主库(用于写文档),一台备库(备份及读取),两台服务器通过局域网相连接,几乎能实现两台服务器文件实时同步。
下面介绍一下安装部署过程:
1. 安装环境
image01:10.168.19.83(主)
image02:10.168.19.84(备)
2. 下载
下载rsync及inotify。
rsync:rsync-3.1.2.tar.gz
inotify:inotify-tools-3.14.tar.gz
3. 安装与配置
3.1. image02安装配置
1) 安装rsync
安装命令如下:
# tar zxvf rsync-2.6.9.tar.gz
# cd rsync-2.6.9
# ./configure --prefix=/usr/local/rsync
# make
# make install
2) 新增rsync配置文件
# vi /etc/rsyncd.conf
#日志文件的存放位置
log file=/var/log/rsyncd.log
#pid文件的存放位置
pidfile=/var/run/rsyncd.pid
#支持max connections参数的锁文件
lock file=/var/run/rsync.lock
#用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
secrets file=/etc/rsync.pass
#rsync启动时欢迎信息页面文件位置(文件内容自定义)
motd file=/etc/rsyncd.Motd
#自定义名称
[filesystem]
#rsync服务端数据目录路径
path=/image/filesystem/
ignore errors
#模块名称与[filesystem]自定义名称相同
comment=filesystem
#设置rsync运行权限为root
uid=root
#设置rsync运行权限为root
gid=root
#默认端口
port=873
#默认为true,修改为no,增加对目录文件软连接的备份
use chroot=no
#设置rsync服务端文件为读写权限
read only=false
#不显示rsync服务端资源列表
list=false
#最大连接数
max connections=200
#设置超时时间
timeout=600
#执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
auth users=backuser
#允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
hosts allow=10.168.19.83
#禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
#hosts deny = 192.168.21.254
注意:配置是auth user需为backuser。
3) 创建备份目录
# mkdir -p /image/nlp
4) 建立 rsync 用户名和密码文件
# echo"backuser:123456" >> /etc/rsync.pass
为rsync.pass授权为600
# chmod 600 /etc/rsync.pass
5) 启动rsync并添加开机自动启动
# /usr/local/rsync/bin/rsync --daemon &
# echo "/usr/local/rsync/bin/rsync --daemon" >> /etc/rc.local
3.2. image01安装配置
1) 安装rsync
安装命令如下:
# tar zxvf rsync-2.6.9.tar.gz
# cd rsync-2.6.9
# ./configure --prefix=/usr/local/rsync
# make
# make install
2) 安装inotify
安装命令如下:
# tar zxf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure --prefix=/usr/local/inotify-tools-3.14
# make
# make install
3) 在/etc/init.d下新增inotify配置文件inotify.sh
#!/bin/bash
#此文件是rsync客户端本地文件,需要上传到各个rsync服务节点
src=/image/filesystem/
# web1上需要同步的目录
des1=filesystem
#rsync服务节点1
host1=10.168.19.82
#连接rsync使用的用户名web1上
user1=backuser
/usr/local/inotify-tools-3.14/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src|
while read file
do
/usr/local/rsync/bin/rsync -vzrtopg --progress $src $user1@$host1::$des1 --password-file=/etc/passwd.txt
echo "${files} was rsynced" >> /var/log/rsync.log 2>&1
done
4) 设置rsync客户端密码文件
客户端只需要设置 rsync 同步的密码即可,不用设置用户名。
# echo "12345678" > /etc/passwd.txt
将密码文件的权限设置成 600
# chmod 600 /etc/passwd.txt
5) 创建备份目录
# mkdir -p /image/filesystem
6) 启动inotify并添加开机自动启动
# /etc/init.d/inotify.sh &
# echo "/etc/init.d/inotify.sh" >> /etc/rc.local
4. 注意事项!!!
1) 检查防火墙是否开通了873端口访问权限。
2) 检查selinux是否关闭。