sersync 開源伺服器檔案實時同步工具

2021-05-21 17:31:57 字數 3632 閱讀 1652

這是我貢獻的第乙個開源軟體sersync,主要用於伺服器同步,web映象等功能。基於boost1.41.0,inotify api,rsync command.開發。

測試環境centos,ubuntu。

利用inotify與rsync對伺服器進行實時同步,其中inotify用於監控檔案系統事件,rsync是目前廣泛使用的同步演算法,其優點是只對檔案不同的部分進行操作,所以其優勢大大超過使用掛接檔案系統的方式進行映象同步。

設計簡析

如上圖所示,執行緒組執行緒是等待執行緒佇列的守護執行緒,當佇列中有資料的時候,執行緒組守護執行緒逐個喚醒,當佇列中inotify事件交多的時候就會被全部喚醒一起工作。這樣設計的目的是能夠同時處理多個inotify事件,重發利用伺服器的併發能力(核數*2+2)。

之所以稱之為執行緒組執行緒,是因為每個執行緒在工作的時候,會根據伺服器的數量建立子執行緒,子執行緒可以保證所有的檔案與各個伺服器同時同步,當要同步的檔案較大的時候,這樣設計可以保證各個遠端伺服器可以同時獲得要同步的檔案。

服務執行緒 的作用有三個,首先是處理同步失敗的檔案,將這些檔案再次同步,對於再次同步失敗的檔案會生成rsync_fail_log.sh指令碼,記錄失敗的事件。 同時每隔10個小時執行指令碼一次,同時清空指令碼。服務執行緒的第三個作用是crontab功能,可以每隔一定時間,將所有路徑整體同步一次。

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

舉例:當我們在vi的乙個test檔案,進行wq操作的時候會產生如下事件:

即使把"."開頭與"~"結尾的世界過濾了,對於test檔案仍舊有3次操作,分別是刪除,建立與儲存,通過過濾佇列,就只剩下乙個事件,一定程度上也提高了效率。

關於inotify識別事件,詳見部落格:

src目錄下放的是原始碼

lib目錄下是需要的靜態庫

bin目錄是最後生成的二進位制檔案

在sersync目錄下執行make命令,就會將生成的2進製檔案放入bin目錄下。

正常情況下,無須再編譯,直接使用bin目錄下已經生成好的64位可執行檔案就可以開始部署了。

1.安裝前的配置。

注意在使用前,首先確定rsyncd.conf已經配置完畢,並且開啟了rsyncd守護程序。簡單配置方法備忘如下:

在需要同步的主從伺服器上修改rsync檔案,配置引數的講解請google.

vi /etc/rsyncd.conf

uid=root

gid=root

max connections=36000

use chroot=no

log file=/var/log/rsyncd.log

pid file=/var/run/rsyncd.pid

lock file=/var/run/rsyncd.lock

[tongbu]

path=/opt/tongbu

comment = xoyo video files

ignore errors

read only = no

hosts allow = 192.168.8.40/26 192.168.138.94/24

hosts deny = *

然後再各個伺服器上開啟rsyncd.conf程序,如下:

rsync --daemon

2. 本軟體安裝

由於是靜態編譯的,所以在xoyo的伺服器上,修改好配置檔案直接使用bin目錄下的可執行檔案即可。

tar zxvf sersync2.1.tar.gz

cd sersync

在使用前請先要填寫配置檔案:

vi  confxml.xml

根據使用模組的不同,需要修改配置檔案如下:

xml配置檔案使用

如配置檔案所示:

只需修改sersync標籤下面內容即可:

如圖所示:

localpath標籤的watch填寫需同步的本地路徑,remote標籤用來填寫要同步的遠端主機ip與模組名稱。crontab功能如果將start標籤置為true,可以通過設定schedule屬性來制定多長時間對監控目錄徹底同步一次。

sersync目錄下有很多檔案,但如果不需要編譯,則只需要使用bin目錄下的sersync2.1與confxml.xml即可。其它是原始碼檔案,庫檔案與.

執行與引數配置

./sersync2.1 -h 檢視幫助檔案

./sersync2.1 -r 在同步程式開啟前對整個路徑與遠端伺服器整體同步一遍

./sersync2.1 -d 開啟守護程序模式,在後台執行

./sersync2.1 -o 制定配置檔名,如果配置檔案名稱不是confxml.xml請使用'-o ***xx.xml'

./sersync2.1 -n  制定同步守護執行緒數量,預設為10個,適用於現在的4核伺服器。如果需

增加或減少使用 '-n 數量'.

通常使用的方法是 

./sersync2.1   -d -r 

log檔案說明

在執行的過程中,會產生rsync_fail_log.sh檔案,在同步的過程中,如果需要同步的檔案失敗了會先進重傳佇列,如果再次失敗將被記錄在rsync_fail_log.sh檔案,改檔案會每10個小時自動執行一次,並被重新清空。

xml配置檔案使用

重新整理cdn模組需要配置的xml檔案如下。 - 

其中 localpath watch 是需要監控的目錄。

cdnifo標籤制定了cdn介面的網域名稱,埠號,以及使用者名稱與密碼。

sendurl標籤是需要重新整理的url的字首。

regexurl標籤中的,regex屬性為true時候,使用match屬性的正則語句匹配inotify返回的路徑資訊,並將正則匹配到的部分作為url一部分,

舉例:如果產生檔案事件為:/data0/htdoc/cms.xoyo.com/site/jx3.xoyo.com/image/a/123.txt

經過上面的match正則匹配後,最後重新整理的路徑是:

如果regex屬性為false,最後重新整理的路徑是

執行與引數配置

./sersync -d  -m  refreshcdn

log檔案說明

執行過程會產生error.log檔案,記錄從cdn接收到的資訊,並且記錄重新整理的路徑。

socket介面

socket模組,開啟該模組,則向指定ip與埠傳送inotify所產生的檔案路徑資訊:

./sersync  -d -m socket

http介面

http模組介面,可以向指定網域名稱的主機post,inotify監控的事件:

其中mask是事件掩膜,8為修改儲存,其它inotify事件掩碼,見google。

Sersync伺服器同步程式專案簡介與設計框架

本專案利用inotify與rsync對伺服器進行實時同步,其中inotify用於監控檔案系統事件,rsync是目前廣泛使用的同步演算法,其優點是只對檔案不同的部分進行操作,所以其優勢大大超過使用掛接檔案系統的方式進行映象同步。目前使用的比較多的同步程式版本是inotify tools,另外乙個是go...

開原始檔伺服器file service介紹

也可以直接由業務伺服器上傳返回檔案根位址給客戶端。原始碼中包含基於.net standard的服務端sdk,可以生成token 上傳檔案等 配置業務伺服器 片段 public void configureservices iservicecollection services 生成訪問令牌 ifil...

伺服器開源節流

乙個服務端,被多個使用者連線,為了節約環境資源,減少執行緒 輪詢缺點 客戶端多的情況下,詢問時間大大大於接受時間浪費資源,一般為64位以下使用者體驗不到卡頓的效果 設定非同步套接字,使可以接受資料不等待 設定套接字阻塞和非阻塞 u long block 1 ioctlsocket s,fionbio...