數據文件實時同步(rsync + sersync2)
阿新 • • 發佈:2018-10-18
啟動命令 壓縮 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)