最近涉及到檔案同步以及遠端備份的技術比較多,也系統的整理了一下。目前我的伺服器上采用的是inotify+rsync實時同步的,檔案數量少或者需要同步的伺服器數量少的時候還可以,但是對于大檔案同步,或者需要同步的檔案數較多及多伺服器同步的時候就難以勝任了。
目前業内比較靠譜的同步解決方案有:rsync+inotify和rsync+sersync
前者由于是基于腳本語言編寫,是以規範程度,執行效率相對rsync+sersync就稍微弱一些。
sersync是使用c++編寫,基于boost1.43.0,inotify api,rsync command開發,主要用于伺服器同步,web鏡像等功能。其對linux系統檔案系統産生的臨時檔案和重複的檔案操作能夠進行過濾,是以在結合 rsync同步的時候,節省了運作時耗和網絡資源。是以更快,更适合線上使用。
官網位址:http://code.google.com/p/sersync/
本篇博文就是為了實作将sersync推送端/data/uploadfile下的資料實時同步到rsync接收端/data/uploadfile目錄下,實作rsync伺服器為sersync的鏡像伺服器
注:使用rsync+crontab做定時同步時,主伺服器端開啟rsync守護程序,而鏡像伺服器是運作rsync用戶端,平時一般會利用crontab定時擷取rsync伺服器上的資料。
但使用rsync+sersync做實時同步時,用于推送檔案 的伺服器運作sersync服務,用于接收檔案的伺服器則運作rsync守護程序,簡單來說就是sersync會利用rsync指令将檔案推送到 rsync伺服器,實際線上使用一般會把sersync作為主伺服器,rsync作為鏡像伺服器,實作資料同步備份,web鏡像等功能
解決方案:作業系統: centos6.3 x64
rsync: centos自帶yum源
sersync: sersync2.5_64bit
sersync 推送端 10.0.0.104
rsync 接收端 10.0.0.10
環境搭建:(接收端,推送端)
一.首先關閉selinux與iptables
# vi /etc/sysconfig/selinux
---------
SELINUX=disabled
---------
# setenforce 0
# service iptables stop
在使用sersync之前,我們必須安裝配置好rsync伺服器
rsync ( 接收端)配置一.安裝rsync
# yum install rsync -y
# vi /etc/xinetd.d/rsync
修改disable = no
二.啟動rsync依賴服務
# /etc/init.d/xinetd start
# chkconfig xinetd on
三.配置:
# vi /etc/rsyncd.conf
--------------------
uid = root
gid = root
use chroot = no
max connections = 5
strict modes = yes
port = 873
[uploadfile] # rsync子產品名,後面配置sersync會用到
path = /data/uploadfile/ # 該同步目錄隻要uid所指定的使用者有寫權限即可
comment = mirror for test
ignore errors
read only = no
list = no
auth users = rsync #設定用于同步的使用者名,不需要系統存在使用者
secrets file = /etc/rsync.pas # 密碼認證檔案,必須為600權限,否則rsync傳輸會報錯
hosts allow =10.0.0.104
# hosts deny = 0.0.0.0/0
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
--------------------
四.建立同步目錄
# mkdir /data/uploadfile/
五.配置認證檔案
# echo "user:123456" > /etc/rsync.pas
# chmod 600 /etc/rsync.pas
# rsync --daemon --config=/etc/rsyncd.conf
六.重新開機xinetd使其配置生效:
# /etc/init.d/xinetd restart
七.設定開機啟動:
# echo "rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.local
sersync ( 推送端)設定一.下載下傳sersync源碼包
# wget http://sersync.googlecode.com/files/sersync2.5_32bit_binary_stable_final.tar.gz
注:若在64位平台安裝則可下載下傳64位sersync源碼包,本例用32位
# wget http://sersync.googlecode.com/files/sersync2.5_64bit_binary_stable_final.tar.gz
二.建立sersync目錄結構
#tar zxvf sersync2.5_64bit_binary_stable_final.tar.gz
#mv GNU-Linux-x86 /usr/local/sersync
三.配置sersync
1.首先建立連接配接rsyncd的密碼檔案
# echo "123456" >/etc/rsync.pas
# chmod 600 /etc/rsync.pas
2.配置confxml.xml
# cd /usr/local/sersync
# vi confxml.xml
按照注釋進行修改
-----------------------------
# 設定本地IP和端口
##設定服務端使用端口,可以随便設定,前提是不要使用已占用的端口
# 開啟DUBUG模式
# 開啟xfs檔案系統
# 同步時忽略推送的檔案(正規表達式),預設關閉
# 設定要監控的事件
#這個可以關掉。防止頻繁操作
false "/>
false "/>
# 本地同步的目錄路徑
# 遠端IP和rsync子產品名
# rsync指令參數
# rsync同步認證
# 設定rsync遠端服務端口,遠端非預設端口則需打開自定義
# 設定逾時時間
# 設定rsync+ssh加密傳輸模式,預設關閉,開啟需設定SSH加密證書
# sersync傳輸失敗日志腳本路徑,每隔60會重新執行該腳本,執行完畢會自動清空。
# 設定rsync+crontab定時傳輸,預設關閉
# 設定sersync傳輸後調用name指定的插件腳本,預設關閉
# 插件腳本範例
# 插件腳本範例
-----------------------------
3.建立推送端sersync同步目錄
# mkdir /data/uploadfile
4.啟動sersync
# /usr/local/sersync2 -r -d -o /usr/local/sersync/confxml.xml
注:重新開機操作如下:
# killall sersync2 && /usr/local/sersync2 -r -d -o /usr/local/sersync/confxml.xml
6.設定開機啟動
# echo "/usr/local/sersync2 -r -d -o /usr/local/sersync/confxml.xml " >> /etc/rc.local
sersync2的參數
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參數,則預設執行同步程式
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script> 閱讀(2669) | 評論(1) | 轉發(1) | 2
上一篇:mysql資料庫性能優化—my.cnf詳解
下一篇:檢視CPU是否支援虛拟化
給主人留下些什麼吧!~~

CU部落格助理2014-05-22 13:15:46
嘉賓點評:
前期交待的應用背景如果有一些對比資料這篇文章就更有說服力了。後面的配置步驟比較全,配置檔案說明不是太詳細,比較适合有一定基礎的人來看。最後配置及啟動後,如果有一些文字或者圖檔說明以上操作都是成功且傳大檔案效率會更高就更好了。(感謝您參與“原創博文評選”獲獎結果即将公布)
回複 | 舉報 評論熱議