rsync- sersync -inotify


Rsync簡介php

  Rsync是一款優秀的、快速的、多功能的本地或遠程數據鏡像同步備份工具。適用於unix/linux/windows等多種平臺linux

  從軟件的名稱Rsync(Remote Rynhronization)能夠看出來,Rsync具備可以使本地主機不一樣分區或目錄之間及本地和遠程兩臺主機之間的數據快速同步鏡像,遠程備份等功能c++

  在同步備份時,默認狀況下,Rsync經過其獨特的「quick check」算法,僅同步大小或者最後修改時間發生變化的文件或目錄(也能夠根據權限,屬主等變化同步,須要指定參數),甚至是隻同步一個文件裏有變化的內容部分,因此,能夠實現快速的同步數據的功能算法

  提示:傳統的cp,scp工具拷貝每次均爲完整拷貝,而rsync除了完整拷貝,還具有增量拷貝的功能,所以,從性能及效率上更勝一籌shell


 

Rsync的特性express

  • 支持拷貝特殊文件,如鏈接、設備等
  • 能夠有排除指定文件或目錄同步的功能,至關於打包命令tar
  • 能夠作到保持原來文件或目錄的權限、時間、軟硬鏈接等全部屬性均不改變
  • 能夠實現增量同步,既只同步發生變化的數據,所以數據傳輸效率很高
  • 可使用rcp,rsh,ssh等方式來配合傳輸文件,也能夠經過直接的socket鏈接
  • 支持匿名的或認證的進程模式傳輸

 

Rsync的工做方式windows

  • 本地方式傳輸
  • 經過rcp,ssh等通道傳輸
  • 以守護進程的方式傳輸數據
#本地數據傳輸

##語法
rsync [OPTION...] SRC..[DEST]
語法說明
    rsync爲同步的命令
    [OPTION...]爲同步時的參數選項
    SRC爲源,即待拷貝的分區、文件或目錄等
    [DEST]爲目的分區、文件、目錄等

#經過遠程shell進行傳輸
拉取:rsync [OPTION...] [USER@]HOST:SRC... [DEST]
推送:rsync [OPTION...] SRC.. [USER@]HOST:DEST
語法說明
    rsync爲同步的命令
    [OPTION...]爲同步時的參數選項
    [USER@]HOST...爲rsync同步的遠程的鏈接用戶和主機地址
    SRC爲源文件、分區、目錄,和HOST之間用一個冒號鏈接
    [DEST]爲目的分區、文件、目錄

 

Rsync參數選項說明bash

-v --詳細模式輸出,傳輸時的進度等信息
-z --compress傳輸室進行壓縮以提升效率,--compress-level=NUM可按級別壓縮
-r --recursive對子目錄以遞歸模式,即目錄下的全部目錄都一樣傳輸,注意是小寫r
-t --times保持文件時間信息
-o --owner保持文件屬主信息
-p --poems保持文件權限
-g --group保持文件屬組信息
-P --progress顯示同步的過程及傳輸時的進度等信息
-a --archive歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性,等於-rptopgD1
-e --rsh=COMMAND使用的信道協議,指定替代rsh的shell程序。例如:ssh --exclude=PATTERN指定排除不須要傳輸的文件模式
-D --devices保持設備文件信息
-l --links保留軟鏈接

 

實例服務器

#三臺虛擬機
1
    IP:10.0.0.1
    hostname:A-server
2
    IP:10.0.0.2
    hostname:B-server
3
    IP:10.0.0.20
    hostname:C-server

#實例1
rsync -avz -P /etc /tmp/

#注意這裏/etc,/etc/是有區別的,前者拷貝整個目錄包括目錄,後者拷貝目錄裏的全部東西

#實例2
[root@B-server ~]# mkdir -p /root/1/{2,3,4,5,6,} #建立目錄
[root@A-server ~]# rsync -avzP -e 'ssh -p 22' root@10.0.0.2:/root/1 /tmp/ #拉取
[root@A-server ~]# rsync -avzP 'ssh -p 22' /tmp/etc/ root@10.0.0.2:/root/1/ #推送

#藉助ssh key祕鑰實現數據免祕鑰驗證加密傳輸
#就是說,若是實現設置了ssh key祕鑰免登陸驗證,既可用rsync經過ssh方式免登陸驗證同步傳輸數據,這是生產場景最經常使用的方法之一

#配置免祕鑰登陸,A>B
[root@A-server ~]# ssh-keygen -t dsa #一路回車
[root@A-server ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@10.0.0.2 #輸入密碼
[root@A-server ~]# rsync -avzP 'ssh -p 22' /tmp/etc root@10.0.0.2:/root/2 #再次推送,發現不須要密碼

#實例3
#需求:要求在A-server上以rsync守護進程方式部署rsync服務,使得全部客戶端主機,能夠把本地數據經過rsync的方式到數據備份服務器A-server上。本例的客戶端僅以B-server、C-server爲例
##配置rsync配置文件
[root@A-server ~]# cat /etc/rsyncd.conf 
###
#rsync_config
#create by daniel 2018-02-01

#start
uid = root
gid = root
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log

[daniel]
path = /daniel/
ignore errors
read only = false
list = false
hosts allow = 10.0.0.0/24
hosts deny = 10.0.0.0./32
auth users = rsync_backup
secrets file = /etc/rsync.password
#end
###

#配置文件解讀
uid:以什麼用戶讀取本地目錄
gid:同上
use chroot:是否使用chroot
max connections:最大鏈接數
timeout:鏈接超時
pid file:pid文件
lock file:lock文件
log file:log文件
[daniel]:模塊名,讀取的時候須要使用這個
path:備份路徑
ignore errors:忽略錯誤
read only:只讀,true爲是,false爲否
hosts allow:容許主機
hosts deny:拒絕主機
auth users:驗證用戶
secrets file:認證文件

##配置用戶驗證文件
[root@A-server ~]# cat /etc/rsync.password 
rsync_backup:123456
[root@A-server ~]# chmod 600 /etc/rsync.password  #權限600

##建立備份目錄
[root@A-server ~]# mkdir /daniel
[root@A-server ~]# chown -R root.root /daniel/ #由於uid,gid都是root全部要受權給root
[root@A-server ~]# rsync --daemon ##啓動rsync,以守護進程的方式啓動

#--daemon 以守護進程的方式啓動
#--address 綁定指定IP地址提供服務
#--config=FILE 更改配置文件路徑,默認是/etc/rsyncd.conf
#--port=PORT 更改服務端口,默認873

[root@A-server ~]# echo "/usr/bin/rsync --daemon" >>/etc/rc.local #開機自啓動

#使用客戶端測試rsync
[root@B-server data]# mv /root/{1,2} /data/
[root@B-server data]# echo '123456' >/etc/rsync.password
[root@B-server data]# chmod 600 /etc/rsync.password 
[root@B-server data]# rsync -avzP /data rsync_backup@10.0.0.1::daniel --password-file=/etc/rsync.password 

#查看A-server的/daniel
[root@A-server ~]# ls /daniel/
data

#--delete
[root@B-server data]# mkdir /data/3
[root@B-server data]# rsync -avzP --delete /data/3/ 
rsync_backup@10.0.0.1::daniel --password-file=/etc/rsync.password #所有刪掉了,由於delete的選項就是本地目錄有什麼遠端就有什麼,若是本地沒有,遠端會所有刪掉

#擴展
#當你有多個模塊(多個共享目錄)時,就要寫一大堆的配置,咱們在這種狀況下能夠簡化配置文件

[root@A-server ~]# cat /etc/rsyncd.conf 
###
#rsync_config
#create by daniel 2018-02-01

#start
uid = root
gid = root
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 10.0.0.0/24
hosts deny = 10.0.0.0./32
auth users = rsync_backup
secrets file = /etc/rsync.password

[daniel]
path = /daniel/

[daniel2]
path = /daniel2/

。。。
#end
#以此類推

 

rsync+inotify實時數據同步框架

 

#rsync+inotify實時數據同步
#實驗目的:B-server將本地數據實時同步推送到A-server

[root@B-server /]# mkdir /server/scripts -p  

#檢查是否支持inotify
[root@B-server /]# ls -l /proc/sys/fs/inotify/
總用量 0
-rw-r--r-- 1 root root 0 2月   5 16:53 max_queued_events
-rw-r--r-- 1 root root 0 2月   5 16:53 max_user_instances
-rw-r--r-- 1 root root 0 2月   5 16:53 max_user_watches

#下載並安裝inotify
[root@B-server /]# mkdir /tmp/dowmloads
[root@B-server /]# cd /tmp/dowmloads/
[root@B-server dowmloads]# wget https://sourceforge.net/projects/inotify-tools/files/inotify-tools/3.13/inotify-tools-3.13.tar.gz/download --no-check-certificate
[root@B-server dowmloads]# tar zxf inotify-tools-3.13.tar.gz 
[root@B-server dowmloads]# cd inotify-tools-3.13
[root@B-server inotify-tools-3.13]# yum -y install gcc gcc-c++
[root@B-server inotify-tools-3.13]# ./configure --prefix=/usr/local/inotify
[root@B-server inotify-tools-3.13]# make && make install

#寫事件監控腳本
[root@B-server inotify-tools-3.13]# mkdir -p /server/scripts
[root@B-server inotify-tools-3.13]# vi /server/scripts/inotify.sh
####
#!/bin/bash
host01=10.0.0.1
src=/data/www/
dst=daniel
user=rsync_backup
rsync_passfile=/etc/rsync.password
inotify_basedir=/usr/local/inotify/

#
if [ ! -e "$src" ] \
|| [ ! -e "${rsync_passfile}" ] \
|| [ ! -e "${inotify_basedir}/bin/inotifywait" ] \
|| [ ! -e "/usr/bin/rsync" ];
then
    echo "Check File and Folder"
    exit 9
fi

#
${inotify_basedir}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,\
delete,create,attrib $src | while read file
#${inotify_basedir}/bin/inotifywait -mrq -e close_write,delete,create,attrib $src | while read file
    do
        #rsync -avzP --delete --timeout=100 --password-file=${rsync_passfile} $src $user@$host01::$dst >/dev/null 2>&1
        cd $src && rsync -aruz -R --delete ./ --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
        done
exit 0
####
[root@B-server inotify-tools-3.13]# mkdir /data/www
[root@B-server inotify-tools-3.13]# cd /server/scripts/
[root@B-server scripts]# chmod +x inotify.sh
[root@B-server scripts]# sh inotify.sh &

##測試
#在/data/www下建立文件或寫入文件試試,而後再查看10.0.0.1的daniel模塊目錄
[root@B-server www]# for n in `seq 100`; do mkdir /data/www/$n;done


##壓力測試
#腳本測試
[root@B-server scripts]# vi inotify_Ceshi.sh
####
#!/bin/sh
count=150

while true
do

for ((i=1;i<=$count;i++))
do
  /bin/cp /server/scripts/10k.jpg /data/www/$i/10k_`echo $(date)$RANDOM|md5sum|cut -c 1-8`.jpg
done

sleep 1

for ((i=1;i<=$count;i++))
do
  /bin/cp /server/scripts/30k.jpg /data/www/$i/30k_`echo $(date)$RANDOM|md5sum|cut -c 1-8`.jpg
done

sleep 1

for ((i=1;i<=$count;i++))
do
  /bin/cp /server/scripts/50k.jpg /data/www/$i/50k_`echo $(date)$RANDOM|md5sum|cut -c 1-8`.jpg
done

sleep 1

done
####

#首先A-sever,B-server要同步時間。ntpdate time.windwos.com
[root@B-server scripts]# sh inotify.sh & #先啓用同步腳本
[root@B-server scripts]# touch /tm/tmp.log #建立同步日誌,用於查看,A-server也要
[root@B-server scripts]# sh inotify_Ceshi.sh & #開始測試腳本
[root@B-server www]# echo -en "`date +%H:%M`\t" >>/tmp/tmp.log && tree | wc -l >>/tmp/tmp.log #在A-server,B-server下使用這個命令來採集每秒建立的文件而後寫入日誌,每兩秒一次,十次採集就夠了,這個要在同步目錄使用,或者tree命令後面,加一下同步目錄路徑
[root@B-server scripts]# kill -9 113580  #而後停掉inotify_Ceshi.sh,同時再次執行上面的命令兩次,看看日誌,是否是瞬間同步完成

#查看兩邊的日誌,查看是否同步完成
[root@B-server www]# cp /tmp/tmp.log /tmp/`uname -n`.log
[root@A-server daniel]# cp /tmp/tmp.log /tmp/`uname -n`.log
[root@B-server tmp]# scp 10.0.0.1:/tmp/A-server.log #將兩個日誌拿到一塊兒
[root@B-server tmp]# paste B-server.log A-server.log  > inotify.log
[root@B-server tmp]# awk '{if($1==$3) print $1" "$2" "$4" "(($2-$4));}' inotify.log 
11:50 3632 3623 9
11:50 3943 3943 0
11:50 4183 4183 0
11:50 4503 4503 0
11:50 4823 4823 0
11:50 5063 5056 7
11:50 5383 5339 44
11:50 5783 5783 0
11:50 6183 6183 0
11:51 6423 6423 0
11:51 6983 6983 0
11:51 6983 6983 0
11:51 6983 6983 0
#作減法,看看同步的時候的兩邊差距
#而後能夠增長腳本中的count數,增大壓力,一直嘗試

Sersync項目簡介與框架設計

  Sersync項目利用inotify與rsync技術實現對服務器數據實時同步的解決方案,其中inotify用於監控sersync所在服務器上文件系統的事件變化,rsync是目前普遍使用的本地及異地數據同步工具,其優勢是隻對變化的目錄數據操做,甚至是一個文件不一樣的部分進行同步,因此其優點大大超過使用掛接文件系統或scp等方式進行鏡像同步

  目前使用的比較多的同步程序版本是inotify-tools,另一個是google開源項目Openduckbill(依賴於inotify-tools),這兩個都是基於腳本語言編寫的,其設計思路一樣是採用inotify與rsync命令

 

Sersync同步需求圖

  當前版本sersync依賴於rsync進行數據同步。以下圖所示,在同步主服務器Sersync上開啓sersync,sersync負責監控配置路徑中的文件系統時間變化,而後調用rsync命令把更新的文件同步到目標服務器(Rsync-1,Rsync-2)

Sersync安裝配置

環境準備

Sersync
    ip:10.0.0.1
    hostname:Sersync

Rsync-1
    ip:10.0.0.2
    hostname:Rsync-1

Rsync-2
    ip:10.0.0.3
    hostname:Rsync-2

 

安裝並配置

#在Rsync-1,Rsync-2配置rsync
[root@Rsync-1 ~]# vi /etc/rsyncd.conf #
####
#rsync_config
#create by daniel 2018-02-01
 
#start
uid = root
gid = root
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 10.0.0.0/24
hosts deny = 10.0.0.0./32
auth users = rsync_backup
secrets file = /etc/rsync.password
 
[www]
comment = daniel
path = /data/www/www

[bbs]
comment = daniel
path = /data/www/bbs/

[blog]
comment = daniel
path = /data/www/blog
####

[root@Rsync-1 ~]# mkdir -p /data/www/{www,bbs,blog} #建立同步目錄
[root@Rsync-1 ~]# echo rsync_backup:123456 >/etc/rsync.password #寫入用戶密碼,用於同步
[root@Rsync-1 ~]# chmod 600 /etc/rsync.password #修改權限
[root@Rsync-1 ~]# echo "/usr/bin/rsync --daemon" >>/etc/rc.local #開機自啓動


#配置和Sersync
[root@Sersync ~]# echo '123456' >/etc/rsync.password #配置rsync權限認證
[root@Sersync ~]# mkdir -p /data/www/{www,bbs,blog} #建立同步目錄
[root@Sersync ~]# for n in `seq 100`;do mkdir /data/www/www/$n;done #建立一百個目錄
[root@Sersync ~]# chmod 600 /etc/rsync.password
[root@Sersync ~]# rsync -avzP /data/www/www/ rsync_backup@10.0.0.2::www --password-file=/etc/rsync.password
[root@Sersync ~]# rsync -avzP /data/www/www/ rsync_backup@10.0.0.3::www --password-file=/etc/rsync.password #同步到Rsync-1和Rsync-2中的www模塊
[root@Rsync-1 ~]# ls /data/www/www/
1    12  16  2   23  27  30  34  38  41  45  49  52  56  6   63  67  70  74  78  81  85  89  92  96
10   13  17  20  24  28  31  35  39  42  46  5   53  57  60  64  68  71  75  79  82  86  9   93  97
100  14  18  21  25  29  32  36  4   43  47  50  54  58  61  65  69  72  76  8   83  87  90  94  98
11   15  19  22  26  3   33  37  40  44  48  51  55  59  62  66  7   73  77  80  84  88  91  95  99 #查看


#安裝Sersync
[root@Sersync ~]# mkdir /tmp/downloads
[root@Sersync ~]# cd /tmp/downloads/
[root@Sersync downloads]# tar zxf sersync_64bit_binary_stable_final.tar.gz 
[root@Sersync downloads]# mv GNU-Linux-x86/ sersync
[root@Sersync downloads]# cd sersync
[root@Sersync sersync]# mkdir bin conf logs
#規範目錄
[root@Sersync sersync]# mv confxml.xml conf
[root@Sersync sersync]# mv sersync2 bin/sersync
[root@Sersync sersync]# cd ..
[root@Sersync downloads]# mv sersync /usr/local/
[root@Sersync downloads]# cd /usr/local/sersync/
[root@Sersync sersync]# cp conf/confxml.xml conf/confxml.xml.default

#修改配置文件
[root@Sersync sersync]# vi conf/confxml.xml
####
    <sersync>
        <localpath watch="/data/www/www">
            <remote ip="10.0.0.2" name="www"/>
            <remote ip="10.0.0.3" name="www">
        </localpath>
        <!--##################################-->
        <localpath watch="/data/www/bbs/">
            <remote ip="10.0.0.2" name="bbs"/>
            <remote ip="10.0.0.3  name="bbs"">
        </localpath>
        <!--##################################-->
        <localpath watch="/data/www/blog/">
            <remote ip="10.0.0.2" name="blog"/>
            <remote ip="10.0.0.3  name="blog"">
        </localpath>
        <!--##################################-->
        <rsync>
            <commonParams params="-artuz"/>
            <auth start="true" users="rsync_backup" 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/rsync_fail_log" timeToExecute="60"/><!--default every 60mins execute once--> 
####這貼的是修改的位置,如下爲全部配置文件
####
<?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>
    </filter>
    <inotify>
        <delete start="true"/>
        <createFolder start="true"/>
        <createFile start="false"/>
        <closeWrite start="true"/>
        <moveFrom start="true"/>
        <moveTo start="true"/>
        <attrib start="false"/>
        <modify start="false"/>
    </inotify>

    <sersync>
        <localpath watch="/data/www/www">
            <remote ip="10.0.0.2" name="www"/>
            <remote ip="10.0.0.3" name="www"/>
        </localpath>
        <!--##################################-->
        <localpath watch="/data/www/bbs/">
            <remote ip="10.0.0.2" name="bbs"/>
            <remote ip="10.0.0.3  name="bbs"/>
        </localpath>
        <!--##################################-->
        <localpath watch="/data/www/blog/">
            <remote ip="10.0.0.2" name="blog"/>
            <remote ip="10.0.0.3  name="blog"/>
        </localpath>
        <!--##################################-->
        <rsync>
            <commonParams params="-artuz"/>
            <auth start="true" users="rsync_backup" 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/rsync_fail_log" 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>
####

[root@Sersync sersync]# echo 'export PATH=$PATH:/usr/local/sersync/bin' >>/etc/profile #配置全局路徑
[root@Sersync sersync]# source /etc/profile
[root@Sersync sersync]# sersync -r -d -o /usr/local/sersync/conf/confxml.xml #啓動
#-o --指定配置文件
#-d --後臺運行
#-r --第一次運行使用,初始化數據,讓兩邊同步
#而後建立個目錄嘗試一下
[root@Sersync sersync]# mkdir /data/www/{www,bbs,blog}/555
#這時候發現除了www模塊同步,其餘兩個都沒有
#如今咱們要配置多實例的
[root@Sersync sersync]# cp conf/confxml.xml conf/www_confxml.xml
[root@Sersync sersync]# cp conf/confxml.xml conf/bbs_confxml.xml
[root@Sersync sersync]# cp conf/confxml.xml conf/blog_confxml.xml #生成三份文件(到這裏你應該就知道我要幹什麼了吧)

#配置這三個文件

####www
    <sersync>
        <localpath watch="/data/www/www">
            <remote ip="10.0.0.2" name="www"/>
            <remote ip="10.0.0.3" name="www"/>
        </localpath>
        <!-- ################################## -->
        <rsync>
            <commonParams params="-artuz"/>
            <auth start="true" users="rsync_backup" 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/rsync_www_log" timeToExecute="60"/><!--default every 60mins execute once-->
####這裏只寫修改的地方了

####bbs
    <sersync>
        <localpath watch="/data/www/bbs/">
            <remote ip="10.0.0.2" name="bbs"/>
            <remote ip="10.0.0.3"  name="bbs"/>
        </localpath>
        <!-- ################################## -->
        <rsync>
            <commonParams params="-artuz"/>
            <auth start="true" users="rsync_backup" 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/rsync_bbs_log" timeToExecute="60"/><!--default every 60mins execute once-->
####

####blog
    <sersync>
        <localpath watch="/data/www/blog/">
            <remote ip="10.0.0.2" name="blog"/>
            <remote ip="10.0.0.3"  name="blog"/>
        </localpath>
        <!-- ################################## -->
        <rsync>
            <commonParams params="-artuz"/>
            <auth start="true" users="rsync_backup" 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/rsync_blog_log" timeToExecute="60"/><!--default every 60mins execute once-->
####blog

#要先把前面那個進程刪掉

#如今咱們啓動三個sersync
[root@Sersync sersync]# sersync -r -d -o /usr/local/sersync/conf/www_confxml.xml 
[root@Sersync sersync]# sersync -r -d -o /usr/local/sersync/conf/bbs_confxml.xml 
[root@Sersync sersync]# sersync -r -d -o /usr/local/sersync/conf/blog_confxml.xml

[root@Sersync sersync]# for i in `seq 1000`;do mkdir /data/www/{www,bbs,blog}/$i;done #在每一個模塊目錄下建立一千個目錄,查看同步
[root@Sersync sersync]# cat >>/etc/rc.local<<EOF
> #sersync daniel
> 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
#開機自動同步,最好不要加r,由於它會從0同步一遍

 

Sersync參數說明

-r 在開啓實時監控的以前對主服務器目錄與遠處目標機目錄進行一次總體同步
-o 指定配置文件,若是不加o,那麼會自動使用跟serync在同一目錄的confxml.xml文件
-n 指定默認的線程池的線程總數
-d 後臺運行服務
-m 不進行同步,只容許插件

 

插件基本配置和使用

#插件內容在配置文件中的46-65行
####
    <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>
####
其中plugin標籤設置爲true時,就會調用插件,經過name參數指定須要執行的插件。目前支持的有command refreshCDN socket http四種插件。其中,http插件目前因爲兼容性緣由去除,之後會從新加入


#command插件
####
    <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>
####
當文件同步玩抽,會調用command插件,如同文件是test.php,則test.php文件在改動以後,電泳rsync同步到遠程服務器後,調用command插件,執行
/bin/sh test.php suffix >/dev/null 2>&1
相關文章
相關標籤/搜索