实现两台服务器a和b之间文件双向同步
大概步骤:... 2
详细步骤:... 2
一. 主服务器(server端,我这里是192)... 2
1.安装rsync. 2
2建立密码认证文件... 5
3安装inotify. 7
4创建rsync复制脚本... 9
二、备份服务器(client,我这里为192.xxx.xx.209)... 10
1安装rsync. 10
2密码认证文件... 11
3立rsync配置文件... 11
双向同步重点备注... 13
1.先实现a->b文件同步,接着实现aß>b双向同步
2.主服务器a(166)安装rsync和inotify
3.备份服务器b(209)安装rsync
4.启动备份服务器b的rsync
5.启动主服务器a的rsync
6.在实现a->b之后,把b服务器上当作主服务器在重新配置即可
实现双向同步的关键:
1、两边都不能设置用户名,2、日志文件不能在待同步的文件夹里面
其中主服务器需要安装rsync与inotify,主服务器作为server,向备份服务器client传输文件
[root@jwxt ~]# cd /usr/src/
[root@jwxt src]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
[root@jwxt src]# tar zxvf rsync-3.0.9.tar.gz
[root@jwxt src]# cd rsync-3.0.9
[root@jwxt rsync-3.0.9]# ./configure --prefix=/usr/local/rsync
[root@jwxt rsync-3.0.9]# make
[root@jwxt rsync-3.0.9]# make install
[root@jwxt rsync-3.0.9]# cd /usr/local/rsync/
[root@jwxt rsync]# echo "rsync-pwd" >/usr/local/rsync/rsync.passwd
(其中rsync-pwd是自己设置的密码,rsync.passwd是文件名称)
然后给密码文件授权:
[root@jwxt rsync]# chmod 600 rsync.passwd
命令执行完之后会在/usr/local/rsync目录下生成一个rsync.passwd文件,里面存放的是密码
[root@jwxt rsync]# cd /usr/src/
[root@jwxt src]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
[root@jwxt src]# tar zxvf inotify-tools-3.14.tar.gz
[root@jwxt src]# cd inotify-tools-3.14
[root@jwxt inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify
[root@jwxt inotify-tools-3.14]# make
[root@jwxt inotify-tools-3.14]# make install
此项功能主要是将server端的目录/tmp里的内容,如果修改了(无论是添加、修改、删除文件)能够通过inotify监控到,并通过rsync实时的同步给client的/tmp里,下面是通过shell脚本实现的。
#!/bin/bash
host=1xx.xx.xx.209
src=/tmp/
des=web
user=webuser
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read files
do
/usr/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd $src $user@$host::$des
echo "${files} was rsynced" >>/home/rsync.log 2>&1
done
其中host是client的ip,src是server端要实时监控的目录,des是认证的模块名,需要与client一致,user是建立密码文件里的认证用户,日志文件rsync.log不要放在需要同步的文件夹里面,要不然会出现一直复制的问题,也没法做双向同步
把这个脚本命名为rsync.sh,放到监控的目录里,比如我的就放到/tmp下面,并给予764权限
[root@jwxt tmp]# chmod 764 rsync.sh
然后运行这个脚本(一定要在在备份服务器client端的rsync安装并启动rsync之后,在启动rsync.sh脚本)
[root@jwxt tmp]# sh /tmp/rsync.sh &
我们还可以把rsync.sh脚本加入到开机启动项里
[root@jwxt tmp]# echo "/tmp/rsync.sh" >> /etc/rc.local
1安装rsync(备份服务器只安装rsync)
[root@jwhsyj ~]# cd /usr/src/
t@jwhsyj src]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
[root@jwhsyj src]# tar zxvf rsync-3.0.9.tar.gz
[root@jwhsyj src]# cd rsync-3.0.9
[root@jwhsyj rsync-3.0.9]# ./configure --prefix=/usr/local/rsync
[root@jwhsyj rsync-3.0.9]# make
[root@jwhsyj rsync-3.0.9]# make install
[root@jwhsyj rsync-3.0.9]# echo "rsync-pwd" > /usr/local/rsync/rsync.passwd
echo "rsync-pwd" > /usr/local/rsync/rsync.passwd
需要给密码文件600权限
[root@jwhsyj rsync]# chmod 600 rsync.passwd
uid = root
gid = root
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[web]
path = /tmp/
comment = web file
ignore errors
read only = no
write only = no
hosts allow = 1xx.xx.xx.166
hosts deny = *
list = false
uid = root
gid = root
secrets file = /usr/local/rsync/rsync.passwd
其中web是server服务端里的认证模块名称,需要与主服务器里的一致,以上的配置我的自己服务器里的配置,以供参考。
把配置文件命名为rsync.conf,放到/usr/local/rsync/目录里
启动rsync
[root@jwhsyj rsync]# /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf
我们可以把rsync脚本加入到开机启动项里
[root@jwhsyj rsync]# echo "/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf" >> /etc/rc.local
如果只做单项a->b的备份,到上面结束了,如果需要做a<->b双向的备份,就需要把b也按照a那样装一遍,而且需要同步的文件夹里面放两个rsync.sh脚本文件,并且需要区分开,我这里是用rsync166.sh和rsync209.sh,效果图如下