說明:本文部分內容收集於互聯網 不完全原創 但都經過本人親身試驗
方案:
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/ [email protected]::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/ [email protected]::www
fi
if [[ $INO_EVENT =~ 'ATTRIB' ]]
then
echo 'ATTRIB'
if [ ! -d "$INO_FILE" ]
then
/usr/bin/rsync -avz --password-file=/etc/rsync.pas /rsync/ [email protected]::www
fi
fi
done
配置說明
/etc/rsync.pas 是B服務器裏面rsync配置的密碼
[email protected]::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 本地同步目錄/ root@目標IP::datamm
|
局開啓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幹掉了