centos6.6配置rsync+sersync實現實時同步分散式多客戶端分發同步

来源:http://www.cnblogs.com/zhangxinqi/archive/2017/04/06/6671367.html
-Advertisement-
Play Games

1、sersync項目: sersync項目利用inotify與rsync技術實現對伺服器數據實時同步到解決方案,其中inotify用於監控sersync所在伺服器上文件系統的事件變化,rsync是目前廣泛使用的本地及異地數據同步工具,其優點是只對變化的目錄數據操作。 sersync項目的優點:1) ...


1、sersync項目:

sersync項目利用inotify與rsync技術實現對伺服器數據實時同步到解決方案,其中inotify用於監控sersync所在伺服器上文件系統的事件變化,rsync是目前廣泛使用的本地及異地數據同步工具,其優點是只對變化的目錄數據操作。

sersync項目的優點:
1)使用C++編寫,對linux系統文件產生的臨時文件和重覆的文件操作會進行過濾,再結合rsync同步到時候,會減少網路資源,因此速度更快。
2)sersync配置起來很簡單,在http://code.google.com/p/sersync/downloads/list處下載源碼。其中bin目錄下是已經編譯好的二進位文件,配合bin目錄下的xml文件直接使用即可。
3)使用多線程進行同步,尤其在同步較大文件時,能夠保證多個伺服器實時保持同步狀態。
4)sersync自帶出錯處理機制,通過失敗隊列對出錯的文件重新同步,如果扔失敗,則每10個小時對同步失敗的文件再重新同步。
5)sersync自帶crontab功能,只需在xml配置文件中開啟,即可按預先的配置,隔一段時間整理同步一次。
6)sersync自帶socket與http的協議擴展,可以滿足有特需要去掉公司二次開發。

inotify識別事件參考:
http://www.ibm.com/developerworks/cn/linux/1-inotifynew
http://blog.johntechinfo.com/?p=122

2、配置前準備
1)環境準備說明:
192.168.233.129 rsync server(rsync服務端)
192.168.233.132 sersync

2)配置前檢查
cat /etc/redhat-release
CentOS release 6.6 (Final)
uname -r
2.6.32-504.el6.x86_64
uname -m
x86_64

3)配置rsync服務端
#yum安裝:
yum install -y rsync
#下載編譯安裝很簡單,tar==>configure --ferfix=/usr/local/rsync ==>make && make install 不詳細列出步驟了,我這選擇的是YUM安裝,註意在編譯安裝後註意路徑環境變數就可以了,其他都一樣。
wget http://pkgs.repoforge.org/rsync/rsync-3.0.9-2.el6.rfx.x86_64.rpm
#檢查安裝
rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
#建立密碼文件,並修改許可權
echo "rsyncback:123.com" >/etc/rsync.password
chmod 600 /etc/rsync.password

#建立配置文件:
cat >>/etc/rsyncd.conf<<EOF
#/etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 200
hosts allow = *
timeout = 600
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
ignore errors
read only = false
list = false
host deny = 0.0.0.0/32
auth users = rsyncback
secrets file = /etc/rsync.password
transfer logging = yes
#Module definitions

[data]
comment = data by pjy
path = /data/
####################################
[www]
comment = www by pjy
path = /data/www/
###################################
[bbs]
comment = bbs by pjy
path = /data/bbs/
##################################
[blog]
comment = blog by pjy
path = /data/blog/
##################################
EOF

#創建模塊監控目錄,我這用的是root用戶所以沒有配置許可權,如果指定的用戶不同時,需要給目錄配置用戶許可權。
mkdir -p /data/{www,bbs,blog}
tree /data
/data
├── bbs
├── blog
└── www
#啟動rsync服務:
/usr/bin/rsync --damon
ps -ef|grep rsync|grep -v grep
root 7858 1 0 20:09 ? 00:00:00 rsync --daemon
netstat -lntp|grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7858/rsync
tcp 0 0 :::873 :::* LISTEN 7858/rsync
lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 7858 root 3u IPv4 224418 0t0 TCP *:rsync (LISTEN)
rsync 7858 root 5u IPv6 224419 0t0 TCP *:rsync (LISTEN

#在sersync端建立密碼文件,並測試同步是否正常
echo "123.com" >/etc/rsync.password
chmod 600 /etc/rsync.password
rsync -zvaP --password-file=/etc/rsync.password [email protected]::data /data/
tree data/
./
├── bbs
├── blog
└── www

3、安裝sersync服務
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz
tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
GNU-Linux-x86/
GNU-Linux-x86/sersync2
GNU-Linux-x86/confxml.xml
cp -rf GNU-Linux-x86/ /usr/local/sersync/
cd /usr/local/sersync/
mkdir bin logs conf
mv confxml.xml conf/
mv sersync2 bin/sersync
tree
.
├── bin
│   └── sersync
├── conf
│   └── confxml.xml
└── logs
#備份配置文件
cp conf/confxml.xml conf/confxml.xml.bak$(date +%F)
#配置環境變數
echo "export PATH=$PATH:/usr/local/sersync/bin" >>/etc/profile
tail -1 /etc/profile
source /etc/profile
which sersync
1)單實例配置:
#修改sersync配置文件:(有註釋說明的地方是需要修改的)
<?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>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<modify start="false"/>
</inotify>

<sersync>
<localpath watch="/data"> #指定本地要同步到目錄
<remote ip="192.168.233.129" name="data"/> #指定rsync服務端的ip地址和模塊名
</localpath>

<rsync>
<commonParams params="-aruz"/> #指定rsync同步選項
<auth start="true" users="rsyncback" passwordfile="/etc/rsync.password"/> #開啟指定密碼,對應rsync同時的用戶名和密碼文件
#如:rsync -zvaP --password-file=/etc/rsync.password [email protected]::data /data/
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 --> #指定超時100秒
<ssh start="false"/>
</rsync>

<failLog path="/usr/local/sersync/logs/www_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>

#配置英文變數,以防亂碼:
LANG=EN
#啟動監控服務(參數說明在後面)
sersync -r -d -o /usr/local/sersync/conf/confxml.xml

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
option: -r rsync all the local files to the remote servers before the sersync work
option: -d run as a daemon
option: -o config xml name: /usr/local/sersync/conf/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is rsyncback
passwordfile is /etc/rsync.password
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /data/www && rsync -aruz -R --delete ./ [email protected]::www --password-file=/etc/rsync.password >/dev/null 2>&1
run the sersync:
watch path is: /data/www

#單實例監控完成,測試成功!

2)多實例配置(此次只用了一臺rsync伺服器模擬多台rsync服務端實時同步配置,換成多台伺服器只需修改ip地址和模塊即可)
#靠譜3個配置文件,模擬www,bbs,blog代碼同步分發
cd /usr/local/sersync/conf
cp confxml.xml www_confxml.xml
cp confxml.xml bbs_confxml.xml
cp confxml.xml blog_confxml.xml

#修改配置文件:(這裡只列出修改部分)
cat www_confxml.xml
<sersync>
<localpath watch="/data/www">
<remote ip="192.168.233.129" name="www"/>
</localpath>

<rsync>
<commonParams params="-aruz"/>
<auth start="true" users="rsyncback" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>

<failLog path="/usr/local/sersync/logs/www_rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->

cat bbs_confxml.xml
<sersync>
<localpath watch="/data/bbs">
<remote ip="192.168.233.129" name="bbs"/>
</localpath>

<rsync>
<commonParams params="-aruz"/>
<auth start="true" users="rsyncback" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>

<failLog path="/usr/local/sersync/logs/bbs_rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
cat blog_confxml.xml
<sersync>
<localpath watch="/data/blog">
<remote ip="192.168.233.129" name="blog"/>
</localpath>

<rsync>
<commonParams params="-aruz"/>
<auth start="true" users="rsyncback" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>

<failLog path="/usr/local/sersync/logs/blog_rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->

#修改註明:(版本號為sersync2.5.4_64)
1.修改預設配置的23到28行,指定本地同步目錄,對端ip和模塊
2.修改預設配置的30到33行,指定rsync同步時的參數,開啟密碼文件,指定用戶,密碼文件路徑。
3.修改預設配置的36行,指定消息隊列文件路徑。

#重啟動sersync服務:
ps -ef|grep sersync
root 14270 1 0 21:44 ? 00:00:00 sersync -r -d -o /usr/local/sersync/conf/confxml.xml
root 14445 13674 0 22:00 pts/0 00:00:00 grep sersync
pkill sersync
ps -ef|grep sersync
root 14459 13674 0 22:01 pts/0 00:00:00 grep sersync
sersync -d -o /usr/local/sersync/conf/www_confxml.xml
sersync -d -o /usr/local/sersync/conf/bbs_confxml.xml
sersync -d -o /usr/local/sersync/conf/blog_confxml.xml
#查看進程
ps -ef|grep sersync
root 14464 1 0 22:02 ? 00:00:00 sersync -d -o /usr/local/sersync/conf/www_confxml.xml
root 14482 1 0 22:03 ? 00:00:00 sersync -d -o /usr/local/sersync/conf/bbs_confxml.xml
root 14500 1 0 22:03 ? 00:00:00 sersync -d -o /usr/local/sersync/conf/blog_confxml.xml

#測試文件同步
cd /data
for i in `ls`;do echo ddd >>$i/$i$i.sh;done
tree /
./
├── bbs
│   ├── bbsbbs.sh
│   └── bbs.log
├── blog
│   ├── blogblog.sh
│   └── blog.log
└── www
├── www.log
└── wwwwww.sh
#rsync服務端,三個模塊實時同步成功!

#將sersync服務加入到開啟自啟動
cat >>/etc/rc.local<<EOF
#sync data to 192.168.233.192
sersync -d -o /usr/local/sersync/conf/www_confxml.xml
sersync -d -o /usr/local/sersync/conf/bbs_confxml.xml
sersync -d -o /usr/local/sersync/conf/blog_confxml.xml
EOF

tail -4 /etc/rc.local
#sync data to 192.168.233.192
sersync -d -o /usr/local/sersync/conf/www_confxml.xml
sersync -d -o /usr/local/sersync/conf/bbs_confxml.xml
sersync -d -o /usr/local/sersync/conf/blog_confxml.xml

#查看實時監控進程,應該是三個sersync守護進程,
ps -ef |grep rsync
root 14464 1 0 22:02 ? 00:00:02 sersync -d -o /usr/local/sersync/conf/www_confxml.xml
root 14482 1 0 22:03 ? 00:00:02 sersync -d -o /usr/local/sersync/conf/bbs_confxml.xml
root 14500 1 0 22:03 ? 00:00:02 sersync -d -o /usr/local/sersync/conf/blog_confxml.xml

參數說明:
-r 開啟實時監控之前對主伺服器目錄與遠程目錄目錄進行一次整體同步,如果設置了過濾器,即在xml文件中,filter為true,則暫時不能使用-r參數進行整體同步.
-o 指定配置文件,如不指定sersync會使用sersync可執行文件目錄下的預設配置文件confxml.xml.
-n 指定預設的線程池的線程總數,如不指定預設啟動線程池數量是10個
-d 後臺啟動服務
-m 不進行同步,只運行插件,如:sersync -m command 則在監控到事件後,不對遠程目錄伺服器進行同步,而是直接運行command插件

#後續配置文件改進更新。。。。。。。


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

-Advertisement-
Play Games
更多相關文章
  • 用於 SELECT 和 WHERE 子句的函數 ...
  • 引自:http://www.blogjava.net/pengpenglin/archive/2008/01/16/175689.html 在導入一批數據到Oracle時,碰到了一個問題:Toad提示要給一個自定義變數AMP賦值,一開始我很納悶,數據是一系列的Insert語句,怎麼會有自定義變數呢? ...
  • 認識敦奴 敦奴集團創立於1987年,主營服裝、酒店、地產,總部位於中國皮都-海寧。浙江敦奴聯合實業股份有限公司(以下簡稱“敦奴”)是一家集開發、設計、生產、銷售於一體的大型專業服裝企業。敦奴擁有上海、海寧兩個研發運營中心,旗下有DUNNU,DDU,DIDIER PARAKIAN三大品牌,銷售網路遍及 ...
  • 在知乎上,有很多的大學生或求職者都在問,現在好的數據分析師都在哪些行業、什麼崗位,還有哪些專業是適合數據分析師專業的? 1、現在數據分析師的分佈是怎麼樣的情況? 從不完全統計,現在數據分析師主要分佈在互聯網公司(包括電商、O2O、游戲、互聯網金融行業)占70%,傳統零售行業(多品類+大數據快消)占8 ...
  • MySQL查詢提示: 1.LOW_PROPRITY,HIGHT_PRIORITY 作用:指定sql語句的運行優先順序,會將加了HIGHT_PROPRITY提示的sql調度到表訪問隊列的最前面 限制:僅對錶級別的鎖的引擎有效(MyISAM引擎),對非表級別的引擎的鎖無效,比如innodb引擎 用法:up ...
  • 測試 看下markdown 效果 ...
  • 信號量: 是用來解決進程/線程之間的同步和互斥問題的一種通信機制,是用來保證兩個或多個關鍵代碼不被併發調用。 信號量(Saphore)由一個值和一個指針組成,指針指向等待該信號量的進程。信號量的值表示相應資源的使用情況。信號量S>=0時,S表示可用資源的數量。執行一次P操作意味著請求分配一個資源,因 ...
  • 文本地址 點擊關註微信公眾號 wenyuqinghuai 分享提綱: 1. 問題背景 2. 代碼實現 分享提綱: 1. 問題背景 2. 代碼實現 1.問題背景 在做公司的測試的自動化測試時,覆蓋了一些開發代碼的函數,但是那些還沒有做,使用一個函數一個函數搜索的方法還是比較慢的,這裡提供一種快速找出來 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...