實現兩臺服務器a和b之間文件雙向同步
二、備份服務器(client,我這裏爲192.xxx.xx.209)... 10
大概步驟:
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、日誌文件不能在待同步的文件夾裏面
詳細步驟:
一. 主服務器(server端,我這裏是166)
其中主服務器需要安裝rsync與inotify,主服務器作爲server,向備份服務器client傳輸文件
1.安裝rsync
[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
2建立密碼認證文件
[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文件,裏面存放的是密碼
3安裝inotify
[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
4創建rsync複製腳本
此項功能主要是將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
二、備份服務器(client,我這裏爲192.xxx.xx.209)
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
2密碼認證文件
[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
3立rsync配置文件
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,效果圖如下