基於rsync sersync的伺服器檔案同步

2022-05-13 01:51:09 字數 4063 閱讀 5358

參考:

synchronize files and folders between servers -using inotiy and rsync with c++ 伺服器實時同步檔案,伺服器映象解決方案

sersync主要用於伺服器同步,web映象等功能。基於boost1.43.0,inotify api,rsync command.開發。目前使用的比較多的同步解決方案是inotify-tools+rsync,另外乙個是google開源專案openduckbill(依賴於inotify- tools),這兩個都是基於指令碼語言編寫的。相比較上面兩個專案,本專案優點是:

sersync是使用c++編寫,而且對linux系統檔案系統產生的臨時檔案和重複的檔案操作進行過濾(詳細見附錄,這個過濾指令碼程式沒有實現),所以在結合rsync同步的時候,節省了執行時耗和網路資源。因此更快。

相比較上面兩個專案,sersync配置起來很簡單,其中bin目錄下已經有基本上靜態編譯的2進製檔案,配合bin目錄下的xml配置檔案直接使用即可。

另外本專案相比較其他指令碼開源專案,使用多執行緒進行同步,尤其在同步較大檔案時,能夠保證多個伺服器實時保持同步狀態。

本專案有出錯處理機制,通過失敗佇列對出錯的檔案重新同步,如果仍舊失敗,則按設定時長對同步失敗的檔案重新同步。

本專案自帶crontab功能,只需在xml配置檔案中開啟,即可按您的要求,隔一段時間整體同步一次。無需再額外配置crontab功能。

本專案socket與http外掛程式擴充套件,滿足您二次開發的需要。

針對上圖的設計架構,這裡做幾點說明,來幫助大家閱讀和理解該圖

1 )執行緒組執行緒是等待執行緒佇列的守護執行緒,當事件佇列中有事件產生的時候,執行緒組守護執行緒就會逐個喚醒同步執行緒。當佇列中 inotify 事件較多的時候,同步執行緒就會被全部喚醒一起工作。這樣設計的目的是為了能夠同時處理多個 inotify 事件,從而提公升伺服器的併發同步能力。同步執行緒的最佳數量=核數 x 2 + 2。 2 ) 那麼之所以稱之為執行緒組執行緒,是因為每個執行緒在工作的時候,會根據伺服器上新寫入檔案的數量去建立子執行緒,子執行緒可以保證所有的檔案與各個伺服器同時同步。當要同步的檔案較大的時候,這樣的設計可以保證每個遠端伺服器都可以同時獲得需要同步的檔案。 3 ) 服務執行緒的作用有三個:

4 )過濾佇列的建立是為了過濾短時間內產生的重複的inotify資訊,例如在刪除資料夾的時候,inotify就會同時產生刪除資料夾裡的檔案與刪除資料夾的事件,通過過濾佇列,當刪除資料夾事件產生的時候,會將之前加入佇列的刪除檔案的事件全部過濾掉,這樣只產生一條刪除資料夾的事件,從而減輕了同步的負擔。同時對於修改檔案的操作的時候,會產生臨時檔案的重複操作。

注意主從配置的區別,記得調整selinux和防火牆

iptables配置實踐 -  ltmp手動編譯安裝以及全自動化部署實踐 - 

伺服器a(主伺服器)

伺服器b(從伺服器/備份伺服器)

rsync預設tcp埠為873

#在伺服器b上安裝rsync

#設定rsync的配置檔案

vi /etc/rsyncd.conf

#伺服器b上的rsyncd.conf檔案內容

uid=root

gid=root

#最大連線數

max connections=36000

#預設為true,修改為no,增加對目錄檔案軟連線的備份

use chroot=no

#定義日誌存放位置

log file=/var/log/rsyncd.log

#忽略無關錯誤

ignore errors =yes

#設定rsync服務端檔案為讀寫許可權

read only =no

#認證的使用者名稱與系統帳戶無關在認證檔案做配置,如果沒有這行則表明是匿名

auth users =rsync

#密碼認證檔案,格式(虛擬使用者名稱:密碼)

secrets file = /etc/rsync.pass

#這裡是認證的模組名,在client端需要指定,可以設定多個模組和路徑

[rsync]

#自定義注釋

comment =rsync

#同步到b伺服器的檔案存放的路徑

comment =img

#建立rsync認證檔案 可以設定多個,每行乙個使用者名稱:密碼,注意中間以「:」分割

echo

"rsync:rsync

" > /etc/rsync.pass

#設定檔案所有者讀取、寫入許可權

chmod

600 /etc/rsyncd.conf

chmod

600 /etc/rsync.pass

#啟動伺服器b上的rsync服務

#rsync --daemon -v

rsync --daemon

#監聽埠873

netstat -an | grep 873

lsof -i tcp:873

command pid user fd type device size/off node name

rsync

31445 root 4u ipv4 443872 0t0 tcp *:rsync (listen)

rsync

31445 root 5u ipv6 443873 0t0 tcp *:rsync (listen)

#設定rsync為服務啟動項(可選)

echo

"/usr/local/bin/rsync --daemon

" >> /etc/rc.local

#要 kill rsync 程序,不要用 kill -hup 的方式重啟程序,以下3種方式任選

#ps -ef|grep rsync|grep -v grep|awk '

'|xargs kill -9

#cat /var/run/rsyncd.pid | xargs kill -9

pkill rsync

#再次啟動

/usr/local/bin/rsync --daemon

#安裝rsync

#安裝inotify-tools

#安裝sersync

#配置下密碼檔案,因為這個密碼是要訪問伺服器b需要的密碼和上面伺服器b的密碼必須一致

echo

"rsync

#修改許可權

chmod

#修改confxml.conf

<?xml version="

1.0" encoding="

iso-8859-1

"?>

#執行sersync

-d:啟用守護程序模式

-r:在監控前,將監控目錄與遠端主機用rsync命令推送一遍

-n: 指定開啟守護執行緒的數量,預設為10個

-o:指定配置檔案,預設使用confxml.xml檔案

參考:

rsync sersync 實時同步備份

linux檔案系統上一般用scp rsync來同步檔案,而一般我們會選擇後者來同步容量大的檔案,而且可實現壓縮 更新傳輸,配合sersync,更可實現同步傳輸。環境部署 server 192168.3.11 端安裝sersync,用來監控本機需備份目錄,客戶端 192.168.3.12 開啟rsyn...

Rsync Sersync的實時c s 模式同步

書接上回,其實,sersync並不能算是完全實時,其原因為sersync必須先檢測本地目錄和檔案後,才開始執行rsync同步,而檢測是手動執行的,後面會講到具體的原因。sersync是基於inotify開發的,類似於inotify tools的工具 由於,sersync可以記錄下被監聽目錄中發生變化...

Rsync Sersync服務安裝配置

環境要求 準備兩台伺服器 vm 兩個ip 1.a伺服器 主伺服器 安裝軟體 rsync sersync 2.b伺服器 從伺服器 安裝軟體 rsync ip劃分 a伺服器 192.168.1.200 b伺服器 192.168.1.201 作業系統 root localhost hostnamectl ...