歡迎您光臨本站 註冊首頁

RedHat Linux下利用sersync進行實時同步數據

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0

拓撲圖如下:

可以有多個目標伺服器,本機同步也可以(要同時開sersync服務和rsync守護進程) 需求: 1、源伺服器上 要備份的是/data/bookfm/doc/book 目錄包括子目錄下的original.xxx ,其他文件不備份

2、備份伺服器上 備份的路徑/backup/bookfm ,當然備份的伺服器有可能不止一台
由於源伺服器上original.xxx文件比較多,一開始同步方案:寫一個rsync腳本,然後定時執行同步,但是這樣不能做到實時同步,後來使用rsync inotify 寫成腳本來做實時同步,也不行,是inotify可以做到實時監控文件或文件夾創建或是修改,然後通知rsync,但是rsync同步之前都會先構造一個Filelist(文件一多,構造這個列表的時間就長,系統負載也比較大),所以只要有文件創建或者修改,那麼都會構造列表,所以這麼做不適合大批量文件進行實時同步,這時可以用sersync,sersync使用 inotify 監控操作系統對磁碟的操作事件,通過接收到的事件生成帶特定參數的rsync命令行並執行,從而達到實時增量同步的目的.


sersync項目介紹: http://code.google.com/p/sersync/


使用指南 http://hi.baidu.com/like7419/blog/item/21ef5b0c8d83e4f537d12231.html 一、在源和目標上升級rsync(

http://rsync.samba.org),新版的rsync性能上有所改進

[[email protected] ~]#wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz

[[email protected] ~]#tar xzf rsync-3.0.9.tar.gz

[[email protected] ~]#cd

rsync-3.0.9

[[email protected] rsync-3.0.9]#./configure

[[email protected] rsync-3.0.9]#make && make install

默認會安裝到/usr/local/bin/rsync ,所以我們要把/usr/bin下面的rsync備份一次刪除或重命名,然後做一個軟連接到/usr/local/bin/rsync

[[email protected] rsync-3.0.9]#ln -s /usr/local/bin/rsync rsync

查看版本,即為升級后的版本

[[email protected] book]# rsync --version
rsync version 3.0.9 protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, no symtimes

rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.

二、在源伺服器上下載及配置sersync:
1.下載安裝 [[email protected] ~]#

cd /usr/local
[[email protected] local]# wget http://sersync.googlecode.com/files/sersync2.5_32bit_binary_stable_final.tar.gz [[email protected] local]# tar xzf sersync2.5_32bit_binary_stable_final.tar.gz [[email protected] local]# cd GNU-Linux-x86/ [[email protected] GNU-Linux-x86]# ls


confxml.xml sersync2
一個主程序和一個配置文件
2.配置vim /usr/local/GNU-Linux-x86/configxml.xml <?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="9090"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false"> #請根據實際情況啟用
<exclude expression="^((?!original\.).*)$"></exclude> <!-- <exclude expression="abc"></exclude>
<exclude expression="image"></exclude>
<exclude expression="txt"></exclude>
<exclude expression="xml"></exclude>
<exclude expression="*"></exclude>


-->
</filter>
<inotify>
<delete start="false"/> #不監控文件或目錄的刪除
<createFolder start="true"/> #監控目錄的創建
<modify start="true"/> #監控文件的修改
<createFile start="true"/>
<closeWrite start="true"/> #監控創建新文件
<moveFrom start="false"/>
<moveTo start="false"/>
<attrib start="false"/>
</inotify>

<sersync>
<localpath watch="/data/bookfm/doc/book"> #設置監控的目錄
<remote ip="192.168.100.250" name="book"/> #指定目標主機的IP地址和模塊名(和samba的類似,不是目錄的名稱) #有幾台目標主機,配置這樣幾條,同時也要在目標上啟用rsync守護進程
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->


</localpath>
<rsync>
<commonParams params="-au" --include='*original.*' --exclude='bin' --exclude='image' --exclude 'xml' --exclude='txt' --include='*/' --exclude='*'"/> #指定rsync 運行時的參數,可根據自身需要更改
<auth start="true" users="bookbackup" passwordfile="/usr/local/GNU-Linux-x86/rsyncd.secrets"/> #啟用驗證,指定用戶名和密碼文件(只用寫一個密碼即可) #用戶名是目標伺服器上rsync配置文件中指定的用戶名,密碼文件中的密碼也目標伺服器上rsync指定的密碼文件指定的密碼
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" 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> 配置文件一般根據自己需要修改 3.創建用到的目錄和文件 [[email protected] book]# echo "123456" >/usr/local/GNU-Linux-x86/rsyncd.secrets [[email protected] book]# mkdir /var/rsync [[email protected] book]#touch

/var/rsync/rsync_error.log 三、在目標伺服器上配置rsync 1.創建目錄和文件 [[email protected] bookfm]# mkdir /etc/rsyncd/ [[email protected] rsyncd]# touch rsyncd.conf #創建rsync的配置文件 [[email protected] rsyncd]# touch rsyncd.secrets #創建rsync的密碼文件,裡面包含用戶名和密碼,用冒號分開 [[email protected] rsyncd]#chmod -R 600 . #只有root才能讀取這些文件

[[email protected] rsyncd]# vim rsyncd.conf

uid = root

#系統中存在的用戶,這個用戶要能對備份的路徑有寫入許可權
gid = root

#系統中存在的用戶組,用戶組要能對備份的路徑有寫入許可權
max connections = 100 #最大連接數
use chroot = no
log file = /var/rsync/rsync.log #指定同步日誌
pid file = /var/rsync/rsyncd.pid #指定運行時PID文件
lock file = /var/rsync/rsyncd.lock

[book]
path = /backup/bookfm #指定備份的路徑
read only=no #可寫入
ignore errors = yes #忽略錯誤
secrets file =/etc/rsyncd/rsyncd.secrets

#指定rsync自身的密碼文件(非系統用戶)
auth users = bookbackup #指定這個共享名驗證的用戶名
hosts allow = 192.168.100.246/24

#只允許這個IP地址

hosts deny = * #而禁止其他所有IP
[[email protected] rsyncd]# vim

rsyncd.secrets bookbackup:123456
2.啟動rsync守護進程 [[email protected] rsyncd]#rsync --daemon --config=/etc/rsyncd/rsyncd.conf 如果不指定埠,默認是873,如果有啟用iptables,那麼請放行873埠 rsync --daemon --port=9091 --config=/etc/rsyncd/rsyncd.conf 自定義埠時記得防火牆放行該埠 四、在源伺服器上,開啟sersync服務 [[email protected] book]# /usr/local/GNU-Linux-x86/sersync2 選項 -r 進行整體同步一次 -d 後台運行 -o 指定配置文件路徑 -n 指定默認的線程池的線程總數,如果不指定,默認啟動線程池數量是10(適用於四核伺服器)

/usr/local/GNU-Linux-x86/sersync2 -r -d -o /usr/local/GNU-Linux-x86/confxml.xml
通常情況下使用這種方式,對本地到遠程整體同步一次后,在後台運行實時同步. /usr/local/GNU-Linux-x86/sersync2 -d -o /usr/local/GNU-Linux-x86/confxml.xml 在源伺服器上開啟sersync守護進程,使sersync在後台運行,開啟實時同步.
/usr/local/GNU-Linux-x86/sersync2 -r -o /usr/local/GNU-Linux-x86/confxml.xml 在開啟實時監控的之前對主伺服器目錄與遠程目標機目錄進行一次整體同步

如果設置了過濾器,即在xml文件中,filter為true,則暫時不能使用-r參數進行整體同步.-r參數將會無效
/usr/local/GNU-Linux-x86/sersync2 -n 5 -r -o /usr/local/GNU-Linux-x86/confxml.xml 指定默認的線程池的線程總數,如果不指定,默認啟動線程池數量是10(適用於四核伺服器) 如果cpu使用過高,可以通過這個參數調低,如果機器配置較高,可以用-n調高線程總數.
基於上述情況,可以使用以下命令來啟動sersync服務(如果同步時不過濾文件即filter start=false) /usr/local/GNU-Linux-x86/sersync2 -n 5 -r -d -o /usr/local/GNU-Linux-x86/confxml.xml


但是根據自身的情況(只備份original.xxx文件),所以必須要啟用文件過濾(即filter start=true),一旦啟用了這個參數,那麼-r參數就無效,而-r參數又是進行整體同步的參數,那就無法進行一次整體同步. 基於這種情況,可以在源上開啟rsync服務,然後在目標上用rsync進行一次整體同步,然後停止源上面的rsync服務,開啟sersync服務,進行實時同步

/usr/local/GNU-Linux-x86/sersync2 -d -o /usr/local/GNU-Linux-x86/confxml.xml

五、測試 在源伺服器上指定目錄下創建original.pdf文件,然後看看目標上備份的路徑裡面有沒有該文件,然後再創建aaaa文件,看sersync是否同步該文件.

經測試,備份時可以做到實時同步,系統負載也較小.

如果出現以下錯誤: missing secret for user "booksbackup" 可能是:你的兩方配置的用戶名不正確,或者密碼文件許可權不是600或者400

rsync啟動停止的腳本,方便啟動停止rsync守護進程

本文出自 「雷納科斯的博客」 博客,請務必保留此出處http://linux5588.blog.51cto.com/65280/772054


[火星人 ] RedHat Linux下利用sersync進行實時同步數據已經有596次圍觀

http://coctec.com/docs/linux/show-post-46948.html