天天看點

rsync+sersync實作伺服器檔案同步

叢集間伺服器實作資料的同步一直是一個問題,比如一個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服務。

rsync+sersync實作伺服器檔案同步

# 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 #格式,使用者名:密碼,可以設定多個,每行一個使用者名:密碼

rsync+sersync實作伺服器檔案同步

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,需要手動安裝。

rsync+sersync實作伺服器檔案同步

4、建立認證密碼檔案

#vi /etc/passwd.txt #編輯檔案,添加以下内容,該密碼應與目标伺服器中的/etc/rsync.pass中的密碼一緻,

123 #密碼

rsync+sersync實作伺服器檔案同步

#chmod 600 /etc/passwd.txt #設定檔案權限,隻設定檔案所有者具有讀取、寫入權限即可

5、測試源伺服器192.168.30.10到目标伺服器 192.168.30.20,之間的資料同步

#mkdir -p /home/Sync/ceshi 在目标伺服器上建立測試檔案夾

rsync+sersync實作伺服器檔案同步

在源伺服器運作下面1行指令

rsync+sersync實作伺服器檔案同步

運作完成後,在目标伺服器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

rsync+sersync實作伺服器檔案同步
rsync+sersync實作伺服器檔案同步

#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.gz

4.配置sersync

#cd /usr/local/sersync #進入sersync安裝目錄

#cp confxml.xml confxml.xml-bak #備份原檔案

#vi confxml.xml #編輯,修改下面的代碼

rsync+sersync實作伺服器檔案同步

截圖中圈出的是需要修改的地方

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 #否則重新開機不執行

rsync+sersync實作伺服器檔案同步

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

rsync+sersync實作伺服器檔案同步

#chmod +x /home/crontab/check_sersync.sh#添加腳本執行權限

rsync+sersync實作伺服器檔案同步

#vi /etc/crontab #編輯,在最後添加下面一行

/5 * root /home/crontab/check_sersync.sh >/dev/null 2>&1 #每隔5分鐘執行一次腳本

rsync+sersync實作伺服器檔案同步

#重新加載服務

#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同步腳本運作正常。

繼續閱讀