1. 程式人生 > >數據文件實時同步(rsync + sersync2)

數據文件實時同步(rsync + sersync2)

啟動命令 壓縮 mat 目錄文件 匹配 deb 指令 目標 send

因近期項目需求,需要同步雲端服務器的數據給**方做大數據分析.

思路:

起初只要數據同步,準備開放數據采集接口.但實時性較差,會有延遲。

故而尋覓各種解決方案,最終確定使用 rsync 進行文件同步,otter(阿裏的開源工具) 進行數據庫同步

最終使用成功,同步效果顯著!

本文先只介紹 rsync 的文件同步,otter 會在其他文章分享

一、簡介

網上簡介一堆,不過都寫的很官方,下面的介紹是我自己使用後的感受。

sersync 用於監控目錄後調用 rsync 同步命令,進行文件傳輸! 可以監控目標目錄文件的 增、刪、改

rsync 鏡像備份工具,可以快速實現文件同步,文件同步的核心! 支持本地復制,或者與其他SSH、rsync主機同步。

環境說明:

系統環境:centos7

數據庫版本:mysql 5.7

目的:將源服務器文件、數據實時同步到備份服務器

安裝策略

1、目標服務器安裝 rsync 服務,設置傳輸項目名、用戶名、密碼、端口
2、源服務器安裝 rsync ,測試傳輸命令
3、源服務器安裝 sersync ,配置監控目錄

源服務器無需配置,只需寫入一個密碼文件,用於 rsync 命令的執行使用

目標服務器配置如下:

# 端口 
port=873
   
# 安全防護                  
use chroot = yes

# 最大並發數
max connections = 36000 

# rsync 的守護進程將其 PID 寫入指定的文件。
pid file=/var/run/rsyncd.pid 

# 指定支持 max connections 參數的鎖文件。
lock file=/var/run/rsync.lock 

# 指定 rsync 守護進程的日誌文件,而不將日誌發送給 syslog。
log file=/var/log/rsyncd.log 

# 任務名稱
[taskName] 

# 存儲路徑 (需要手動創建,無目錄會報錯) 
path=/data/Vehicle/image/ 

# 指定是否允許客戶上傳文件。若為 true 則不允許上傳;若為 false 並且服務器目錄也具有讀寫權限則允許上傳。
read only=false 

# 指定當客戶請求列出可以使用的模塊列表時,該模塊是否應該被列出。如果設置該選項為 false,可以創建隱藏的模塊。
list=yes 

# 用戶名
auth users= 用戶名 

# 密碼文件
secrets file=/etc/rsync.passwd 

# 用一個主機列表指定哪些主機客戶允許連接該模塊。不匹配主機列表的主機將被拒絕
hosts allow=*
    

關於密碼文件

如 /etc/rsync.passwd

源服務器:

密碼

目標服務器:

用戶名:密碼

密碼文件的執行權限必須為 600,不然服務無法啟動

修改權限命令:

chmod 600 /etc/rsync.passwd  

rsync 傳輸命令

安裝好上述服務,並開啟目標服務器的 rsync 服務後,就可以測試文件的同步了

rsync同步命令如下:

rsync -avzP --delete 傳輸目錄 用戶名@目標服務器ip::任務名稱 --password-file = 密碼文件地址

-v 顯示指令執行過程

-z 對備份的文件在傳輸時進行壓縮處理

-P 保留源文件或目錄的屬性。

--delete 刪除傳送端已經不存在,而目的端存在的檔案

上述測試成功後,就可以正常的傳輸目錄到目標服務器了,接下來只需安裝 sersync2 服務來監控想要傳輸的目錄變化,就可以實現實時同步

關於下載,沒有官網,我是在CSDN上找的,各位加油吧

配置文件如下:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<head version="2.5"> # 設置本地IP和端口 
    <host hostip="localhost" port="8008"></host> 
    # 開啟DUBUG模式 
    <debug start="true"/> 
    # 開啟xfs文件系統 
    <fileSystem xfs="true"/> 
        # 同步時忽略推送的文件(正則表達式),默認關閉 
        <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="監控目錄地址"> 
        # 遠程IP和rsync模塊名 
        <remote ip="目標服務器ip" name="任務名稱"/> 
    </localpath> 
    <rsync> 
        # rsync指令參數 
        <commonParams params="-auvzP"/> 
        # rsync同步認證 
        <auth start="true" users="用戶名" passwordfile="密碼文件路徑"/> 
        # 設置rsync遠程服務端口,遠程非默認端口則需打開自定義 
        <userDefinedPort start="true" port="目標rsync服務端口"/>
        # 設置超時時間 
        <timeout start="true" time="1000"/> 
        # 設置rsync+ssh加密傳輸模式,默認關閉,開啟需設置SSH加密證書 
        <ssh start="false"/> 
    </rsync> 
    # sersync傳輸失敗日誌腳本路徑,每隔60會重新執行該腳本,執行完畢會自動清空。 
    <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/>
    # 設置rsync+crontab定時傳輸,默認關閉 
    <crontab start="false" schedule="600">
    <crontabfilter start="false"> 
    <exclude expression="*.php"></exclude> 
    <exclude expression="info/*"></exclude> 
    </crontabfilter> 
    </crontab> 
    # 設置sersync傳輸後調用name指定的插件腳本,默認關閉 
    <plugin start="false" name="command"/> 
    </sersync> # 插件腳本範例 
    <plugin name="command"> 
        <param prefix="/bin/sh" suffix="" ignoreError="true"/>  
        <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="xxx"/> 
            <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>

sersync 啟動命令

進入 sersync安裝目錄
./sersync -d -r -o confxml.xml

本文沒有詳細介紹下載安裝過程,主要用於介紹配置參數!方便日後回憶.

見諒!

數據文件實時同步(rsync + sersync2)