實時同步sersync實戰

来源:https://www.cnblogs.com/1naonao/archive/2019/08/07/11317693.html
-Advertisement-
Play Games

[toc] 實時同步sersync實戰 什麼是實時同步 實時同步是一種只要當前目錄發生變化則會觸發一個事件,事件觸發後會將變化的目錄同步至遠程伺服器。 sersync和rsync+inotify對比 提到數據同步就必然會談到 ,一般簡單的伺服器數據傳輸會使用 等方式,但是這樣的方式效率不高,不支持差 ...


目錄

實時同步sersync實戰

什麼是實時同步

實時同步是一種只要當前目錄發生變化則會觸發一個事件,事件觸發後會將變化的目錄同步至遠程伺服器。

sersync和rsync+inotify對比

提到數據同步就必然會談到rsync,一般簡單的伺服器數據傳輸會使用ftp/sftp等方式,但是這樣的方式效率不高,不支持差異化增量同步也不支持實時傳輸。針對數據實時同步需求大多數人會選擇rsync+inotify-tools的解決方案,但是這樣的方案也存在一些缺陷(文章中會具體指出),sersync是國人基於前兩者開發的工具,不僅保留了優點同時還強化了實時監控,文件過濾,簡化配置等功能,幫助用戶提高運行效率,節省時間和網路資源。

項目地址

sersync項目實戰

1)環境準備

角色 外網IP(NAT) 內網IP(LAN) 安裝工具
web01 eth0:10.0.0.7 eth1:172.16.1.7 部署代碼(提交作業)
nfs-server eth0:10.0.0.31 eth1:172.16.1.31 rsync+inotify+sersync
backup eth0:10.0.0.41 eth1:172.16.1.41 rsync-server

1.實時同步哪台伺服器的目錄,那麼就在哪台伺服器上安裝sersync

2.只要安裝sersync 就必須安裝rsyncinotify

安裝rsync的服務端(backup)

1)安裝rsync服務

[root@backup ~]# yum install -y rsync

2)配置文件

[root@backup ~]# vim /etc/rsyncd.conf 
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[zls]
comment = welcome to oldboyedu backup!
path = /backup

[nfs]
comment = welcome to oldboyedu backup!
path = /data

3)創建用戶

[root@backup ~]# groupadd www -g 666
[root@backup ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

4)創建目錄並授權

[root@backup ~]# mkdir /data  /backup
[root@backup ~]# chown -R www.www /data/ /backup/

5)創建虛擬用戶的密碼文件並授權

[root@backup ~]# echo 'rsync_backup:123' > /etc/rsync.passwd 
chmod 600 /etc/rsync.passwd

6)啟動rsync服務

[root@backup ~]# systemctl start rsyncd

NFS服務端部署sersync

1)安裝sersync需要依賴rsyncinotify

[root@nfs ~]# yum install -y rsync inotify-tools

2)下載sersync

[root@nfs ~]# wget https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz

3)部署sersync

​ 源碼包:解壓 生成 編譯 安裝

​ 解壓:

[root@nfs ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz

4)移動並改名

[root@nfs ~]# mv GNU-Linux-x86 /usr/local/sersync

5)編輯配置文件

[root@nfs ~]# vim /usr/local/sersync/confxml.xml
    <inotify>
        <delete start="true"/>
        <createFolder start="true"/>
        <createFile start="true"/>
        <closeWrite start="true"/>
        <moveFrom start="true"/>
        <moveTo start="true"/>
        <attrib start="true"/>
        <modify start="true"/>
    </inotify>
-----------------------------------------------------------------------------------------
    <sersync>
        #監控的目錄,改成/data
        <localpath watch="/opt/tongbu">
            #推送的IP(backup服務的IP)172.16.1.41 ,name是模塊名
            <remote ip="127.0.0.1" name="tongbu1"/>
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
        <rsync>
            #執行rsync的參數改成 -az
            <commonParams params="-artuz"/>
            #虛擬用戶的用戶名和密碼文件,開啟認證start=true  rsync_backup    /etc/rsync.pass
            <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
            <userDefinedPort start="false" port="874"/><!-- port=874 -->
            #設置超時時間
            <timeout start="true" time="100"/><!-- timeout=100 -->
            <ssh start="false"/>
        </rsync>
        <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
        <crontab start="false" schedule="600"><!--600mins-->
            <crontabfilter start="false">
                <exclude expression="*.php"></exclude>
                <exclude expression="info/*"></exclude>
            </crontabfilter>
        </crontab>
        <plugin start="false" name="command"/>
    </sersync>


#完整配置文件
[root@nfs ~]# cat /usr/local/sersync/confxml.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
    <host hostip="localhost" port="8008"></host>
    <debug start="false"/>
    <fileSystem xfs="false"/>
    <filter start="false">
    <exclude expression="(.*)\.svn"></exclude>
    <exclude expression="(.*)\.gz"></exclude>
    <exclude expression="^info/*"></exclude>
    <exclude expression="^static/*"></exclude>
    </filter>
    <inotify>
    <delete start="true"/>
    <createFolder start="true"/>
    <createFile start="true"/>
    <closeWrite start="true"/>
    <moveFrom start="true"/>
    <moveTo start="true"/>
    <attrib start="true"/>
    <modify start="true"/>
    </inotify>

    <sersync>
    <localpath watch="/data">
        <remote ip="172.16.1.41" name="nfs"/>
        <!--<remote ip="192.168.8.39" name="tongbu"/>-->
        <!--<remote ip="192.168.8.40" name="tongbu"/>-->
    </localpath>
    <rsync>
        <commonParams params="-az"/>
        <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pass"/>
        <userDefinedPort start="false" port="874"/><!-- port=874 -->
        <timeout start="true" time="100"/><!-- timeout=100 -->
        <ssh start="false"/>
    </rsync>
    <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
    <crontab start="false" schedule="600"><!--600mins-->
        <crontabfilter start="false">
        <exclude expression="*.php"></exclude>
        <exclude expression="info/*"></exclude>
        </crontabfilter>
    </crontab>
    <plugin start="false" name="command"/>
    </sersync>

    <plugin name="command">
    <param prefix="/bin/sh" suffix="" ignoreError="true"/>  <!--prefix /opt/tongbu/mmm.sh suffix-->
    <filter start="false">
        <include expression="(.*)\.php"/>
        <include expression="(.*)\.sh"/>
    </filter>
    </plugin>

    <plugin name="socket">
    <localpath watch="/opt/tongbu">
        <deshost ip="192.168.138.20" port="8009"/>
    </localpath>
    </plugin>
    <plugin name="refreshCDN">
    <localpath watch="/data0/htdocs/cms.xoyo.com/site/">
        <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
        <sendurl base="http://pic.xoyo.com/cms"/>
        <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
    </localpath>
    </plugin>
</head>

6)創建虛擬用戶的密碼文件,並授權

[root@nfs sersync]# echo '123' > /etc/rsync.pass
[root@nfs sersync]# chmod 600 /etc/rsync.pass

7)查看幫助

[root@nfs sersync]# /usr/local/sersync/sersync2 -h
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
_______________________________________________________
參數-d:啟用守護進程模式
參數-r:在監控前,將監控目錄與遠程主機用rsync命令推送一遍
c參數-n: 指定開啟守護線程的數量,預設為10個
參數-o:指定配置文件,預設使用confxml.xml文件
參數-m:單獨啟用其他模塊,使用 -m refreshCDN 開啟刷新CDN模塊
參數-m:單獨啟用其他模塊,使用 -m socket 開啟socket模塊
參數-m:單獨啟用其他模塊,使用 -m http 開啟http模塊
不加-m參數,則預設執行同步程式
________________________________________________________________

8)啟動sersync

[root@nfs data]# /usr/local/sersync/sersync2 -rdo /usr/local/sersync/confxml.xml

------------------------------------------------rsync服務端--------------------------------------------------

1)安裝

[root@backup ~]# yum install -y rsync

2)改配置

[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[zls]
comment = welcome to oldboyedu backup!
path = /backup

3)創建系統用戶

[root@backup ~]# useradd rsync -s /sbin/nologin  -M

4)創建虛擬用戶及密碼文件並授權

[root@backup ~]# echo 'rsync_backup:123' > /etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd

5)創建目錄並授權

[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup

6)啟動服務並加入開機自啟

[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd

----------------------------------------------------------rsync的客戶端(nfs)------------------------------------------------------------------

1)安裝sersync(rsync+inotify)

[root@nfs ~]# yum install -y rsync inotify-tools

2)安裝sersync

下載:

[root@nfs ~]# wget https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz

解壓:

[root@nfs ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz

移動並改名:

[root@nfs ~]# mv GNU-Linux-x86 /usr/local/sersync

3)修改配置文件

[root@nfs ~]# vim /usr/local/sersync/confxml.xml
    <inotify>
        <delete start="true"/>
        <createFolder start="true"/>
        <createFile start="true"/>
        <closeWrite start="true"/>
        <moveFrom start="true"/>
        <moveTo start="true"/>
        <attrib start="true"/>
        <modify start="true"/>
    </inotify>

    <sersync>
        <localpath watch="/zls">
            <remote ip="172.16.1.41" name="zls"/>
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
        <rsync>
            <commonParams params="-az"/>
            <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pas"/>
            <userDefinedPort start="false" port="874"/><!-- port=874 -->
            <timeout start="true" time="100"/><!-- timeout=100 -->
            <ssh start="false"/>
        </rsync>

4)創建目錄

[root@nfs ~]# mkdir /zls

5)創建密碼文件並授權

[root@nfs ~]# echo '123' > /etc/rsync.pas
[root@nfs ~]# chmod 600 /etc/rsync.pas

6)啟動sersync

[root@nfs ~]# /usr/local/sersync/sersync2 -rdo /usr/local/sersync/confxml.xml

sersync 就是rsync的客戶端

底層調用:rsync和inotify


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫在前面 Dapper 是一款輕量級ORM架構。為解決網站訪問流量極高而產生的性能問題而構造,主要通過執行TSQL表達式而實現資料庫的CQRS。 如果在項目中遇到性能訪問問題,選擇Dapper作為ORM框架可能是明智之舉,當然也可以使用Entity Framework或NHibernate來處理大數 ...
  • 恢復內容開始 1.delegate 一般用法 delegate void WriteValue(string vale);//申明一個委托,參數是string類型,無返回值 static void Main(string[] args) { WriteValue write = new WriteV ...
  • 淺拷貝和深拷貝之間的區別: 淺拷貝是指將對象中的數值類型的欄位拷貝到新的對象中,而對象中的引用型欄位則指複製它的一個引用到目標對象。如果改變目標對象中引用型欄位的值他將反映在原始對象中,也就是說原始對象中對應的欄位也會發生變化。 深拷貝與淺拷貝不同的是對於引用的處理,深拷貝將會在新對象中創建一個新的 ...
  • 公司項目中一部分文件放到了阿裡雲 OSS 上,其中有些音頻文件是 amr 類型的,在後期使用的時候比較麻煩,所以需要轉換成 mp3 的文件,方便以後使用。本來想使用 ffmpeg 處理,但由於文件都存放在阿裡雲 OSS 上,使用 ffmpeg 就需要把文件從遠程下載下來,轉碼之後再重新傳回阿裡雲上,... ...
  • 啟用審批流時,BE插件解決方案目標框架必須採用.Net Framwork3.5, BE插件相關DLL部署位置:Applicationser/libs、MailServer/libs BE插件配置文件XML部署位置:MailServer/bin ...
  • private void Window_PreviewKeyDown(object sender, KeyEventArgs e) { //單個按鍵e.Key方式判斷 if (e.Key == Key.Enter) { MessageBox.Show("Key.Ent... ...
  • C# 讀取XML ...
  • 1.前言 選項(Options)模式是對配置(Configuration)的功能的延伸。在12章(ASP.NET Core中的配置二)Configuration中有介紹過該功能(綁定到實體類、綁定至對象圖、將數組綁定至類)而選項模式又有個選項類(TOptions),該選項類作用是指:把選項類中的屬性 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...