叢集間伺服器實作資料的同步一直是一個問題,比如一個lvs叢集中,如果有上百台RS伺服器,當更新Web程式時,如何在這麼多台伺服器間進行快速的更新,這是一個問題,如果使用手動更新,或者scp等指令,明顯是不可取的。是以,介紹這樣rsync+sersync的組合工具實作多台伺服器直接的檔案資料同步。
Rsync服務在同步的時候,隻同步發生變化的這個檔案或者這個目錄(每次發生變化的資料相對整個同步目錄資料來說是很小的,rsync在周遊查找比對檔案時,速度很快),是以,效率很高。
Sersync服務可以記錄下被監聽目錄中發生變化的(包括增加、删除、修改)具體某一個檔案或某一個目錄的名字;
當資料量很大(幾百G甚至1T以上)、檔案很多時,建議使用Rsync+sersync。
環境:
作業系統:CentOS 7.3
源伺服器:192.168.30.10
目标伺服器: 192.168.30.20
目的:把源伺服器上/home/Sync目錄實時同步到目标伺服器的/home/Sync下
具體操作:
第一部分:在目标伺服器192.168.0.50上操作
一、在目标伺服器安裝Rsync服務端
1、關閉SELINUX
2、關閉防火牆
3、安裝Rsync服務端軟體
#yum install rsync xinetd #安裝
rsync是由超級守護程序xinetd來啟動的。是以需要啟動xinetd服務。

# vi /etc/rc.d/rc.local #設定開機啟動
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
# chmod +x/etc/rc.d/rc.local #否則重新開機不執行
4、建立rsyncd.conf配置檔案
vim /etc/rsyncd.conf
- 添加自定義的配置檔案内容,配置檔案中需要删除其中的添加配置後的注釋。截圖中的注釋僅作提示。
rsync+sersync實作伺服器檔案同步
5、建立使用者認證檔案
#vi/etc/rsync.pass #配置檔案,添加以下内容,添加允許傳輸使用者和密碼
Sync:123 #格式,使用者名:密碼,可以設定多個,每行一個使用者名:密碼
6、設定檔案權限
#chmod 600 /etc/rsyncd.conf #設定檔案所有者讀取、寫入權限
#chmod 600 /etc/rsync.pass #設定檔案所有者讀取、寫入權限
- 權限設定必須為600,否則rsync會報錯,這是基于安全的考慮。
rsync+sersync實作伺服器檔案同步
7、啟動rsync
# systemctl start rsyncd
第二部分:在源伺服器192.168.30.10上操作
一、安裝Rsync用戶端
3、安裝Rsync用戶端端軟體
#yum install rsync
# vi /etc/rc.local #設定開機啟動
/usr/bin/rsync --daemon
#vim/etc/rsyncd.conf #編輯配置檔案添加如下的配置規則
- 配置檔案中設定的規則需與目标端的設定相符。
rsync+sersync實作伺服器檔案同步
#systemctl start xinetd #啟動(CentOS中是以xinetd來管理rsync服務的)
如果沒有安裝xinetd,需要手動安裝。
4、建立認證密碼檔案
#vi /etc/passwd.txt #編輯檔案,添加以下内容,該密碼應與目标伺服器中的/etc/rsync.pass中的密碼一緻,
123 #密碼
#chmod 600 /etc/passwd.txt #設定檔案權限,隻設定檔案所有者具有讀取、寫入權限即可
5、測試源伺服器192.168.30.10到目标伺服器 192.168.30.20,之間的資料同步
#mkdir -p /home/Sync/ceshi 在目标伺服器上建立測試檔案夾
在源伺服器運作下面1行指令
運作完成後,在目标伺服器192.168.30.10上檢視,在/home/Sync/目錄下有ceshi檔案夾,說明資料同步成功,指令中目錄可以随意目錄,傳輸到目标伺服器目錄時檔案(或目錄)均放到/etc/rsyncd.conf配置的伺服器目錄路徑,如果源目錄改變了,那麼傳輸時兩個目錄将進行目錄比對,會有增删動作,是以需要注意。
Rsync服務檔案同步成功,但是需要手動觸發,現在搭建sersync服務,配合crontab定時任務和腳本自動觸發資料同步。
sersync是基于Inotify開發的,類似于Inotify-tools的工具,是以先檢視一下inotify的核心參數,并适當修改,如果參數過小可能導緻報錯。
1.檢視系統預設參數值:
sysctl -a | grep max_queued_events
結果是:fs.inotify.max_queued_events= 16384
sysctl -a | grep max_user_watches
結果是:fs.inotify.max_user_watches= 8192
sysctl -a | grep max_user_instances
結果是:fs.inotify.max_user_instances= 128
2.修改參數:
#sysctl -wfs.inotify.max_queued_events="99999999"
#sysctl -w fs.inotify.max_user_watches="99999999"
#sysctl -wfs.inotify.max_user_instances="65535"
#vi /etc/sysctl.conf #添加以下代碼
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
參數說明:
max_queued_events:
inotify隊列最大長度,如果值太小,會出現" Event QueueOverflow "錯誤,導緻監控檔案不準确
max_user_watches:
要同步的檔案包含多少目錄,可以用:find /home/Sync-type d | wc -l 統計,必須保證max_user_watches值大于統計結果(這裡/
home/Sync為同步檔案目錄)
max_user_instances:
每個使用者建立inotify執行個體最大值
3、安裝sersync
下載下傳sersync2.5.4_64bit_binary_stable_final.tar.gz
#tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
#mv GNU-Linux-x86 /usr/local/sersync #移動目錄到/usr/local/sersync
wget--no-check-certificate
https://raw.githubusercontent.com/orangle/sersync/master/release/sersync2.5.4_64bit_binary_stable_final.tar.gz4.配置sersync
#cd /usr/local/sersync #進入sersync安裝目錄
#cp confxml.xml confxml.xml-bak #備份原檔案
#vi confxml.xml #編輯,修改下面的代碼
截圖中圈出的是需要修改的地方
localpath watch="/home/Sync":#源伺服器同步目錄
192.168.30.20:#目标伺服器IP位址
name="Sync": #目标伺服器rsync同步目錄子產品名稱
users="Sync": #目标伺服器rsync同步使用者名
passwordfile="/etc/rsync.pass": #目标伺服器rsync同步使用者的密碼在源伺服器的存放路徑
remote ip="192.168.30.20": #目标伺服器ip,每行一個
failLogpath="/tmp/rsync_fail_log.sh" #腳本運作失敗日志記錄
start="true" #設定為true,每隔600分鐘執行一次全盤同步
5、設定sersync監控開機自動執行
#vi /etc/rc.d/rc.local #編輯,在最後添加一行
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml #設定開機自動運作腳本
:wq! #儲存退出
# chmod +x /etc/rc.d/rc.local #否則重新開機不執行
6、添加腳本監控sersync是否正常運作,或者直接将同步指令寫入計劃任務,按時執行同步。
#mkdir /home/crontab
#vi /home/crontab/check_sersync.sh #編輯,添加以下代碼
#!/bin/bash
sersync="/usr/local/sersync/sersync2"
confxml="/usr/local/sersync/confxml.xml"
status=``$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)
if [$status -eq 0 ];``
then
$sersync -d-r -o $confxml &
else
exit 0;
fi
#chmod +x /home/crontab/check_sersync.sh#添加腳本執行權限
#vi /etc/crontab #編輯,在最後添加下面一行
/5 * root /home/crontab/check_sersync.sh >/dev/null 2>&1 #每隔5分鐘執行一次腳本
#重新加載服務
#systemctl restart crond.service
6、測試sersync實時觸發rsync同步腳本是否正常運作
在源伺服器192.168.30.20上建立檔案inotify_rsync_ceshi
#mkdir /home/Sync/inotify_rsync_ceshi
重新啟動源伺服器:192.168.30.10
等系統啟動之後,檢視兩台目标伺服器 192.168.30.10的/home/Sync下是否有inotify_rsync_ceshi檔案夾
如果測試通過,說明inotify實時觸發rsync同步腳本運作正常。