使用rsync+sersync實現檔案同步實時備份
為什麼選用Rsync+sersync
1.sersync是基於Inotify開發的,類似於Inotify-tools的工具。
sersync可以記錄被監聽目錄中發生變化的(包括增刪改)具體某一個檔案或某一個目錄的名字,然後使用rsync同步的時候,只同步發生變化的這個檔案或者這個目錄。
2.rsync在同步的時候,只同步發生變化的這個檔案或者這個目錄(每次發生變化的資料相對整個同步目錄資料來說是很小的,rsync在遍歷查詢比對檔案時,速度很快),因此,效率很高。
當同步的目錄資料量不大時,建議使用Rsync+Inotify-tools;當資料量很大(幾百G甚至1T以上)、檔案很多時,建議使用Rsync+sersync。
準備環境
伺服器A:192.168.11.31 源伺服器。
伺服器B: 192.168.11.34 目標伺服器。
我們要實現的就是把A伺服器上的檔案同步到B伺服器上,從而實現備份。我們主要是在B伺服器上安裝配置rsync,在A伺服器上安裝配置sersync,通過sersync把檔案推送到B伺服器上。
伺服器系統環境為CentOS7.4。
系統基礎配置
1.修改inotify預設引數
inotify預設核心引數值太小,我們需要手動修改引數:
sysctl -w fs.inotify.max_queued_events="99999999" sysctl -w fs.inotify.max_user_watches="99999999" sysctl -w fs.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 :wq! #儲存退出
引數說明:
max_queued_events:inotify佇列最大長度,如果值太小,會出現"** Event Queue Overflow **"錯誤,導致監控檔案不準確
max_user_watches:要同步的檔案包含多少目錄,可以用:find /data/file -type d | wc -l 統計,必須保證max_user_watches值大於統計結果(這裡/data/file為同步檔案目錄)
max_user_instances:每個使用者建立inotify例項最大值
2.關閉selinux
在/etc/sysconfig/selinux 這個檔案,設定SELINUX=disable
3.防火牆開通873埠
firewall-cmd --zone=public --add-port=873/tcp --permanent firewall-cmd --reload
以上A、B兩臺伺服器都需要配置。
部署rsync
我們需要在源伺服器A和目標伺服器B上都要部署rsync。
安裝rsync:
yum install -y rsync
配置rsync:
[root@localhost ~]# vim /etc/rsyncd.conf uid = root gid = root use chroot =no list = no log file = /var/log/rsyncd.log [helloweba] path=/data/file comment=helloweba file backup ignore errors=yes read only=no list=no max connections=2000 timeout=200 auth users=rsync secrets file=/etc/rsync.pas hosts allow=* #host deny=0.0.0.0/0
auth users
配置同步驗證的使用者名稱。
secrets file
這個是配置同步的密碼檔案的。
[helloweba]
這個是配置同步模組的名稱。
path
是配置同步的目錄。
hosts allow
是允許同步的主機。
hosts deny
拒絕同步的主機。
建立同步的使用者與密碼的檔案
將使用者名稱和密碼寫入密碼檔案中,同樣要設定這個檔案的許可權為600。
echo "rsync:123456" >> /etc/rsync.pas chmod 600 /etc/rsync.pas
建立同步的目錄
按照配置檔案中的path
建立對應的目錄:
mkdir /data/file
啟動和管理rsync
啟動rsync:
systemctl start rsyncd
將rsync設定為開機自啟動:
systemctl enable rsyncd
如果要停止和重啟rsync可以使用以下命令:
systemctl stop|restart rsyncd
啟動好rsync服務後,我們可以使用netstat -tunpl | grep :873
檢視服務埠873是否正常。
源伺服器A部署sersync
安裝和配置rsync
源伺服器A也需要安裝rsync,方法同上述目標伺服器B部署rsync一樣。
下載sersync
在google code ( http://code.google.com/p/sersync/downloads/list )下載sersync的可執行檔案版本,裡面有配置檔案和可執行檔案
不能google的同學可以到http://sersync.sourceforge.net/ 下載舊版本。
安裝sersync
tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz mv GNU-Linux-x86 /usr/local/sersync
我們下載的是二進位制版,無需編譯安裝,直接就可使用。
我們可以規範下目錄結構:
cd /usr/local/sersync/ mkdir conf bin logs mv confxml.xml conf/ mv sersync2 bin/
最後目錄結構應該是這樣的:
. |-- bin |`-- sersync2 |-- conf |`-- confxml.xml `-- logs
建立密碼檔案
和目標伺服器一樣,不過這個檔案只要儲存密碼即可,不需要儲存使用者名稱,許可權也是600
echo "123456" >> /etc/rsync-client.pas chmod 600 /etc/rsync-client.pas
配置sersync
直接編輯sersync的配置檔案:
vim /usr/local/sersync/conf/confxml.xml
要注意幾處需要修改的地方:
1.定義同步目錄和目標伺服器ip及模組名稱。
<localpath watch="/data/file"># 定義本地要同步的目錄 <remote ip="192.168.11.34" name="helloweba"/># 定義要同步的伺服器IP和模組名 <!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--> </localpath>
2.配置rsync同步指令及同步認證。
<rsync> <commonParams params="-artuzP"/> # 定義同步指令 <auth start="true" users="rsync" passwordfile="/etc/rsync-client.pas"/> #啟用同步認證,指定使用者名稱及密碼檔案 <userDefinedPort start="false" port="873"/><!-- port=874 --> #定義遠端埠 <timeout start="false" time="100"/><!-- timeout=100 --> <ssh start="false"/> </rsync>
啟動和管理sersync服務
我們需要自己製作一個服務管理指令碼,新建sersync.service檔案:vim /usr/lib/systemd/system/sersync.service
,新增以下程式碼:
[Unit] Description=sersync service After=network.target [Service] Type=forking LimitNOFILE=65535 ExecStart=/usr/local/sersync/bin/sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml ExecReload=/bin/kill -USR1 $MAINPID Restart=always [Install] WantedBy=multi-user.target graphical.target
儲存,然後啟動sersync服務:
systemctl start sersync.service
加入到啟動項隨系統啟動:
systemctl enable sersync.service
可以使用以下命令停止和重啟sersync服務:
systemctl stop|restart sersync.service
驗證
服務都搭建好了,現在最後一步就是驗證測試,我們在源伺服器A的/data/file目錄下(如果不存在則手動建立目錄),執行新建檔案、刪除檔案、新建資料夾等操作後,再到目標伺服器B的/data/file目錄下看看是否也存在相同的檔案和資料夾。如果一切正常,那麼恭喜實時同步配置成功了。
以上我們就做好了檔案雙機自動同步備份,作者親測並應用在實際專案中,這樣就不怕檔案丟失了。
後記
有的專案中,我們希望做到雙機雙向自動同步備份,就像ofollow,noindex">《SQL/">MySQL/MariaDB主主資料同步配置》 一樣,兩臺伺服器既是源伺服器又是目標伺服器,這個時候只需在兩臺伺服器上都部署rsync和sersync服務,配置和本文配置一毛一樣。