说明:本文部分内容收集于互联网 不完全原创 但都经过本人亲身试验
方案:
1、双向:两台服务器都要开rsync同步和inotify监听 ---> 多对多
2、单向:一台服务器开inotify 其他服务器开启rsync --> 一对多
3、单向2:一台服务器开rsync 其他服务器开启inotify --> 多对一
要实现文件的实时双向同步可以采用rsync+inotify组合,rsync可以实现文件同步,但是它没有办法实时触发,
所以就需要搭配inotifiy实时触发。
第一步:在两台服务器上面都安装rsync和inotify
Fedora、Redhat 、centos等在线安装方法;
# yum install rsync
一部搞定rsync的安装
开启服务
rsync --daemon --config=/etc/rsyncd.conf
inotify的安装方法如下:
1.下载inotify的源码,例如下载的文件名为inotify.tar.gz
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz --no-check-certificate
2.解压inotify
#tar -zxvf inotify.tar.gz
进入到解压的文件夹里面
#cd inotify
编译并安装
./configure --prefix=/usr/local/inotify
make && make install
inotify的安装目录是/usr/local/inotify
第二步配置每个服务器的rsync和inotify
在/etc目录下面新建文件rsyncd.conf,内容如下
uid=nobody
gid=nobody
use chroot = no
read only = false
strict modes = false
hosts allow = *
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file= /var/run/rsyncd.lock
max connections = 4
[www]
path = /rsync
read only = false
ignore errors
auth users=root
hosts allow=*
secrets file=/etc/rsync.pas
transfer logging = yes
配置说明:
配置文件里面不能包含#注释
address表示本机ip
hosts allow 表示允许访问的ip,我这里配置的是服务器B
rsync.pas 表示验证文件
[www]里面的www是模块名称,可以自己定义
path是要同步的路径
创建验证文件
在/etc下面创建 名称为rsyncd.secrets的验证文件
格式为 用户名:密码,例如 zm:123
此用户名和密码和系统没有关系,是给rsync设置的用户名和密码
设置完了之后需要给rsync.pas设置权限,如下
#chmod 600 /etc/rsync.pas
接下来就是配置inotify,实时出发文件同步,在inotify的安装目录下面新建脚本文件zm.sh,内容如下
#!/bin/bash
cd /rsync
/usr/local/inotify/bin/inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib,close_write,move /rsync | while read file
echo "Now Inotify Startting Success!"
do
INO_EVENT=$(echo $file | awk '{print $1}')
echo "-------------------------------$(date)------------------------------------"
echo $file
if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]
then
echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
/usr/bin/rsync -avz --progress --password-file=/etc/rsync.pas /rsync/ root@123.207.99.171::www
fi
if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
then
echo 'DELETE or MOVED_FROM'
/usr/bin/rsync -avz --delete --password-file=/etc/rsync.pas /rsync/ root@123.207.99.171::www
fi
if [[ $INO_EVENT =~ 'ATTRIB' ]]
then
echo 'ATTRIB'
if [ ! -d "$INO_FILE" ]
then
/usr/bin/rsync -avz --password-file=/etc/rsync.pas /rsync/ root@123.207.99.171::www
fi
fi
done
配置说明
/etc/rsync.pas 是B服务器里面rsync配置的密码
root@192.168.1.101::www 里面的root是rsync配置的用户名,后面的ip是B服务器的ip,www是配置要同步的模块名称
配置文件创建完成之后还需要授权
#chmod +x zm.sh
两天服务器的配置方法相同,只需要修改对应的参数即可
最后启动rsync和inotify
rsync --daemon --config=/etc/rsyncd.conf
然后进入到zm.sh所在的目录启动inotify
./zm.sh
这样启动的inotify, 无法在关闭shell命令行之后在后台运行。如果需要在后台运行
可以使用#nohup ./zm.sh &
---------------------------------------------------------------------------------
我这里是单向
上海五个所同步到局里思路:
五个所开启inotify监听 安装rsync客户端用于发送请求
局机关开启rsync服务 用于接收请求
-------------------------------------------------------------------------------
以下内容涉及国家机关机密 已被省略...
-------------------------------------------------------------------------------
手动同步命令 | /usr/bin/rsync -avz --progress --password-file=/etc/rsync.pas 本地同步目录/
|
局开启rsync服务 | service rsyc start |
所开启inotify监听 | service rsync start |
局查看rsync进程 | ps -ef|grep rsync |
所查看inotify进程 | ps-ef|grep zm |
Zm.sh文件中定义了-e modify,create,attrib,close_write,delete,move 表示监听文件或文件夹被进行的操作 一旦监听到这些操作 就会与子服务器进行同步 将当前文件夹同步到目标服务器
注意:删除和移动文件如果目标服务器上有的文件 本地没有 那这些文件将在目标服务器上被干掉。所以我在zm.sh里面已经把,delete,move干掉了