Rsync+sersync同步配置
源服務(wù)器:10.11.244.3
目標(biāo)服務(wù)器:10.11.11.108
# 前言:
?
## 一、為什么要用Rsync+sersync架構(gòu)?
?
1、sersync是基于Inotify開發(fā)的,類似于Inotify-tools的工具
?
2、sersync可以記錄下被監(jiān)聽目錄中發(fā)生變化的(包括增加、刪除、修改)具體某一個文件或某一個目錄的名字,然后使用rsync同步的時候,只同步發(fā)生變化的這個文件或者這個目錄。
?
## 二、Rsync+Inotify-tools與Rsync+sersync這兩種架構(gòu)有什么區(qū)別?
?
### 1、Rsync+Inotify-tools
?
(1):Inotify-tools只能記錄下被監(jiān)聽的目錄發(fā)生了變化(包括增加、刪除、修改),并沒有把具體是哪個文件或者哪個目錄發(fā)生了變化記錄下來;
?
(2):rsync在同步的時候,并不知道具體是哪個文件或者哪個目錄發(fā)生了變化,每次都是對整個目錄進行同步,當(dāng)數(shù)據(jù)量很大時,整個目錄同步非常耗時(rsync要對整個目錄遍歷查找對比文件),因此,效率很低。
?
### 2、Rsync+sersync
?
(1):sersync可以記錄下被監(jiān)聽目錄中發(fā)生變化的(包括增加、刪除、修改)具體某一個文件或某一個目錄的名字;
?
(2):rsync在同步的時候,只同步發(fā)生變化的這個文件或者這個目錄(每次發(fā)生變化的數(shù)據(jù)相對整個同步目錄數(shù)據(jù)來說是很小的,rsync在遍歷查找比對文件時,速度很快),因此,效率很高。
?
小結(jié):當(dāng)同步的目錄數(shù)據(jù)量不大時,建議使用Rsync+Inotify-tools;當(dāng)數(shù)據(jù)量很大(幾百G甚至1T以上)、文件很多時,建議使用Rsync+sersync。
?
一、firewwall的放行和Selinux關(guān)閉
# firewall-cmd --zone=public --add-port=883/tcp --permanent
# firewall-cmd --reload
# sed -i "s/SELINUXTYPE=targeted/SELINUX=disabled/g"
# setenforce 0
相當(dāng)于
# vi /etc/selinux/config #編輯防火墻配置文件
?
#SELINUX=enforcing #注釋掉
?
#SELINUXTYPE=targeted #注釋掉
?
SELINUX=disabled #增加
?
:wq! #保存,退出
?
setenforce 0 #立即生效
?
二、目標(biāo)服務(wù)器和源服務(wù)器安裝
1、安裝rsync服務(wù)與xinetd服務(wù)
yum install -y rsync xinetd
?
2、rsync開機啟動
添加rsync開機啟動
# cat /etc/xinetd.d/rsync
# default: off
# # description: The rsync server is a good addition to an ftp server, as it \
# #?????? allows crc checksumming etc.
service rsync
{
??????? disable = no
??????? flags?????????? = IPv6
??????? socket_type???? = stream
??????? wait??????????? = no
??????? user??????????? = root
??????? server????????? = /usr/bin/rsync
??????? server_args???? = --daemon
??????? log_on_failure? += USERID
}
?
3、目標(biāo)服務(wù)器操作配置情況:
假設(shè)同步的目錄如下:
# ls
bmw_m? ftp? Solr? special? upload
$ cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# # See rsyncd.conf man page for more options.
# # configuration example:
# uid = nobody
uid = root
# gid = nobody
gid = root
# # use chroot = yes
use chroot = no
# max connections = 4
list = no
log file = /data/var/logs/rsync/rsyncd.log
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
?# dont compress?? = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
?
# [ftp]
?#??????? path = /home/ftp
?#??????? comment = ftp export area
#
secrets file =/etc/rsync.pas
?
[ftp1]
path = /data/ftp
comment = ftp1
ignore errors
read only = no
list = no
max connections = 200
timeout = 600
auth users = rsync
#secrets file =/etc/rsync.pas
hosts allow = 10.11.244.3
?
[upload]
path = /data/upload
comment = upload
ignore errors
read only = no
list = no
max connections = 200
timeout = 600
auth users = rsync
#secrets file =/etc/rsync.pas
hosts allow = 10.11.244.3
?
[Solr]
path = /data/Solr
comment = Solr
ignore errors
read only = no
list = no
max connections = 200
timeout = 600
auth users = rsync
#secrets file =/etc/rsync.pas
hosts allow = 10.11.244.3
?
[special]
path = /data/special
comment = special
ignore errors
read only = no
list = no
max connections = 200
timeout = 600
auth users = rsync
#secrets file =/etc/rsync.pas
hosts allow = 10.11.244.3
?
[bmw_m]
path = /data/bmw_m
comment = bmw_m
ignore errors
read only = no
list = no
max connections = 200
timeout = 600
auth users = rsync
#secrets file =/etc/rsync.pas
hosts allow = 10.11.244.3
2)、創(chuàng)建用于存放同步的用戶及密碼的文件/etc/rsync.pas,并將此文件權(quán)限修改為600
# echo "rsync:sHA4HnrrAm" >> /etc/rsync.pas
# chmod 600 /etc/rsync.pas
?
3)、創(chuàng)建同步的目錄/data/ftp
mkdir /data/webdata
?
4)、目標(biāo)服務(wù)器啟動rsync與xinetd服務(wù)
systemctl start xinetd
systemctl enable xinetd
rsync --daemon --config=/etc/rsyncd.conf
4、源服務(wù)器rsync.conf的配置
# cat /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
list = no
log file = /data/var/logs/rsync/rsyncd.log
?
[ftp1]
path = /data/ftp
comment = ftp1
ignore errors
?
[upload]
path = /data/upload
comment = upload
ignore errors
?
[Solr]
path = /data/Solr
comment = Solr
ignore errors
?
[special]
path = /data/special
comment = special
ignore errors
?
[bmw_m]
path = /data/bmw_m
comment = bmw_m
ignore errors
創(chuàng)建密碼文件跟目標(biāo)服務(wù)器一樣,不過這個文件只要保存密碼即可,不需要保存用戶名,權(quán)限也是600
# echo "sHA4HnrWSAm" >> /etc/rsync.pas
# chmod 600 /etc/rsync.pas
啟動rsync與xinetd服務(wù)
# systemctl start xinetd
# systemctl enable xinetd
# rsync --daemon --config=/etc/rsyncd.conf
?
配置rsync開機自啟動
echo "rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.d/rc.local
測試同步情況
# rsync -avH --port=873 --progress --delete /data/ftp/ rsync@10.11.11.108::data/ftp/ --password-file=/etc/rsync.pas
三、源服務(wù)器安裝sersync服務(wù)(下面的配置與ftp1模塊為例)
1、查看服務(wù)器內(nèi)核是否支持inotify
```
ll /proc/sys/fs/inotify?? #列出文件目錄,出現(xiàn)下面的內(nèi)容,說明服務(wù)器內(nèi)核支持inotify
?
-rw-r--r-- 1 root root 0 Mar? 7 02:17 max_queued_events
?
-rw-r--r-- 1 root root 0 Mar? 7 02:17 max_user_instances
?
-rw-r--r-- 1 root root 0 Mar? 7 02:17 max_user_watches
?
備注:Linux下支持inotify的內(nèi)核最小為2.6.13,可以輸入命令:uname -a查看內(nèi)核
?
CentOS 5.X 內(nèi)核為2.6.18,默認已經(jīng)支持inotify
```
2、修改inotify默認參數(shù)(inotify默認內(nèi)核參數(shù)值太小)
```
查看系統(tǒng)默認參數(shù)值:
?
sysctl -a | grep max_queued_events
?
結(jié)果是:fs.inotify.max_queued_events = 16384
?
sysctl -a | grep max_user_watches
?
結(jié)果是:fs.inotify.max_user_watches = 8192
?
sysctl -a | grep max_user_instances
?
結(jié)果是:fs.inotify.max_user_instances = 128
?
修改參數(shù):
?
sysctl -w fs.inotify.max_queued_events="9999999"
?
sysctl -w fs.inotify.max_user_watches="9999999"
?
sysctl -w fs.inotify.max_user_instances="65535"
?
vi /etc/sysctl.conf #添加以下代碼
?
fs.inotify.max_queued_events=9999999
?
fs.inotify.max_user_watches=9999999
?
fs.inotify.max_user_instances=65535
?
:wq! #保存退出
?
參數(shù)說明:
?
max_queued_events:
?
inotify隊列最大長度,如果值太小,會出現(xiàn)"** Event Queue Overflow **"錯誤,導(dǎo)致監(jiān)控文件不準(zhǔn)確
?
max_user_watches:
?
要同步的文件包含多少目錄,可以用:find /home/www.osyunwei.com -type d | wc -l 統(tǒng)計,必須保證max_user_watches值大于統(tǒng)計結(jié)果(這里/home/www.osyunwei.com為同步文件目錄)
?
max_user_instances:
?
每個用戶創(chuàng)建inotify實例最大值
?
?
3、下載sersync源碼包并安裝sersync服務(wù)
# wget wget --no-check-certificate https://raw.githubusercontent.com/orangle/sersync/master/release/sersync2.5.4_64bit_binary_stable_final.tar.gz
?
# ls
nginx? resin? sersync2.5.4_64bit_binary_stable_final.tar.gz
# mkdir /usr/local/sersync/{conf,bin,log} -p
# tar -zxf sersync2.5.4_64bit_binary_stable_final.tar.gz
# ls
GNU-Linux-x86? nginx? resin? sersync2.5.4_64bit_binary_stable_final.tar.gz
# cp GNU-Linux-x86/confxml.xml /usr/local/sersync/conf/
# cp GNU-Linux-x86/sersync2 /usr/local/sersync/bin/
?
?
4、配置sersync服務(wù)(這類僅與模塊ftp1為例,其他模塊upload,Solr等原理一樣)
# cat /usr/local/sersync/conf/confxml.xml
<?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="/usr/local/data/ftp">
??????? <remote ip="10.11.11.108" name="ftp1"/>
??????? <!--<remote ip="192.168.8.39" name="tongbu"/>-->
??????? <!--<remote ip="192.168.8.40" name="tongbu"/>-->
??? </localpath>
??? <rsync>
??????? <commonParams params="-artuz"/>
????????<auth start="true" users="rsync" passwordfile="/etc/rsync.pas"/>
????????<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/p_w_picpaths"/>
??? </localpath>
??? </plugin>
</head>
5、設(shè)置環(huán)境變量
# echo "export PATH=$PATH:/usr/local/sersync/bin/" >> /etc/profile
# source /etc/profile
?
6、啟動、重啟、停止sersync服務(wù)
# sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml
# ps -aux | grep sersync2?? #查看進程
# ps -aux | grep sersync2
root????? 5669? 0.0? 0.0 1415496? 684 ???????? Ssl? 16:43?? 0:00 sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml
root????? 6313? 0.0? 0.0 112660?? 984 pts/0??? R+?? 16:50?? 0:00 grep --color=auto sersync2
# kill -9 5669????? #停止進程
?
7、設(shè)置開機啟動sersync
?
# echo "sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml" >> /etc/rc.d/rc.local
?
最后,啟動完源服務(wù)器上的sersync服務(wù)后,重啟下目標(biāo)服務(wù)器上的xinetd服務(wù)。
?
8、添加腳本監(jiān)控sersync是否正常運行
# cat /etc/chk_sersync.sh
#!/bin/sh
?
sersync="/usr/local/sersync/bin/sersync2"
?
confxml="/usr/local/sersync/conf/confxml.xml"
?
status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)
?
if [ $status -eq 0 ];
?
then
?
$sersync -d -r -o $confxml &
?
else
?
exit 0;
?
配置定時執(zhí)行腳本
# crontab -e
*/10 * * * * root /etc/chk_sersync.sh > /dev/null 2>&1
# crontab -l
#Ansible: sync cron
* 4 * * * ntp.sjtu.edu.cn
*/10 * * * * root /etc/chk_sersync.sh > /dev/null 2>&1
?
9、重啟系統(tǒng)后,檢查所有配置是否正常生效,并在源服務(wù)新建文件或目錄,測試是否實時同步。
?
如果以上測試都通過,說明inotify實時觸發(fā)rsync同步腳本運行正常。
?
至此,Linux下Rsync+sersync實現(xiàn)數(shù)據(jù)實時同步完成。
?
?
?
### rsync參數(shù)
?
```
-v, --verbose 詳細模式輸出
?
-q, --quiet 精簡輸出模式
?
-c, --checksum 打開校驗開關(guān),強制對文件傳輸進行校驗
?
-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于-rlptgoD
?
-r, --recursive 對子目錄以遞歸模式處理
?
-R, --relative 使用相對路徑信息
?
-b, --backup 創(chuàng)建備份,也就是對于目的已經(jīng)存在有同樣的文件名時,將老的文件重新命名為~filename。可以使用--suffix選項來指定不同的備份文件前綴。
?
--backup-dir 將備份文件(如~filename)存放在在目錄下。
?
-suffix=SUFFIX 定義備份文件前綴
?
-u, --update 僅僅進行更新,也就是跳過所有已經(jīng)存在于DST,并且文件時間晚于要備份的文件。(不覆蓋更新的文件)
?
-l, --links 保留軟鏈結(jié)
?
-L, --copy-links 想對待常規(guī)文件一樣處理軟鏈結(jié)
?
--copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹以外的鏈結(jié)
?
--safe-links 忽略指向SRC路徑目錄樹以外的鏈結(jié)
?
-H, --hard-links 保留硬鏈結(jié)
?
-p, --perms 保持文件權(quán)限
?
-o, --owner 保持文件屬主信息
?
-g, --group 保持文件屬組信息
?
-D, --devices 保持設(shè)備文件信息
?
-t, --times 保持文件時間信息
?
-S, --sparse 對稀疏文件進行特殊處理以節(jié)省DST的空間
?
-n, --dry-run現(xiàn)實哪些文件將被傳輸
?
-W, --whole-file 拷貝文件,不進行增量檢測
?
-x, --one-file-system 不要跨越文件系統(tǒng)邊界
?
-B, --block-size=SIZE 檢驗算法使用的塊尺寸,默認是700字節(jié)
?
-e, --rsh=COMMAND 指定使用rsh、ssh方式進行數(shù)據(jù)同步
?
--rsync-path=PATH 指定遠程服務(wù)器上的rsync命令所在路徑信息
?
-C, --cvs-exclude 使用和CVS一樣的方法自動忽略文件,用來排除那些不希望傳輸?shù)奈募?/p>
?
--existing 僅僅更新那些已經(jīng)存在于DST的文件,而不備份那些新創(chuàng)建的文件
?
--delete 刪除那些DST中SRC沒有的文件
?
--delete-excluded 同樣刪除接收端那些被該選項指定排除的文件
?
--delete-after 傳輸結(jié)束以后再刪除
?
--ignore-errors 及時出現(xiàn)IO錯誤也進行刪除
?
--max-delete=NUM 最多刪除NUM個文件
?
--partial 保留那些因故沒有完全傳輸?shù)奈募?#xff0c;以是加快隨后的再次傳輸
?
--force 強制刪除目錄,即使不為空
?
--numeric-ids 不將數(shù)字的用戶和組ID匹配為用戶名和組名
?
--timeout=TIME IP超時時間,單位為秒
?
-I, --ignore-times 不跳過那些有同樣的時間和長度的文件
?
--size-only 當(dāng)決定是否要備份文件時,僅僅察看文件大小而不考慮文件時間
?
--modify-window=NUM 決定文件是否時間相同時使用的時間戳窗口,默認為0
?
-T --temp-dir=DIR 在DIR中創(chuàng)建臨時文件
?
--compare-dest=DIR 同樣比較DIR中的文件來決定是否需要備份
?
-P 等同于 --partial
?
--progress 顯示備份過程
?
-z, --compress 對備份的文件在傳輸時進行壓縮處理
?
--exclude=PATTERN 指定排除不需要傳輸?shù)奈募J?/p>
?
--include=PATTERN 指定不排除而需要傳輸?shù)奈募J?/p>
?
--exclude-from=FILE 排除FILE中指定模式的文件
?
--include-from=FILE 不排除FILE指定模式匹配的文件
?
--version 打印版本信息
?
--address 綁定到特定的地址
?
--config=FILE 指定其他的配置文件,不使用默認的rsyncd.conf文件
?
--port=PORT 指定其他的rsync服務(wù)端口
?
--blocking-io 對遠程shell使用阻塞IO
?
-stats 給出某些文件的傳輸狀態(tài)
?
--progress 在傳輸時現(xiàn)實傳輸過程
?
--log-format=formAT 指定日志文件格式
?
--password-file=FILE 從FILE中得到密碼
?
--bwlimit=KBPS 限制I/O帶寬,KBytes per second
?
-h, --help 顯示幫助信息
轉(zhuǎn)載于:https://blog.51cto.com/mfm117/1917665
總結(jié)
以上是生活随笔為你收集整理的Rsync+sersync同步配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一劳永逸的搞定 flex 布局
- 下一篇: 【转】ionic run android