sersync 實現(xiàn)實時同步數(shù)據(jù)
1 sersync實時同步原理

image-20210104163102063.png
- rsync守護(hù)進(jìn)程服務(wù),實現(xiàn)數(shù)據(jù)傳輸
- inotify服務(wù),實現(xiàn)目錄中數(shù)據(jù)變化監(jiān)控
- 將rsync服務(wù)和inotify服務(wù)建立聯(lián)系,將變化的數(shù)據(jù)進(jìn)行實時備份傳輸
2 實時同步服務(wù)部署
2.1 部署rsync守護(hù)進(jìn)程方式
2.1.1 備份服務(wù)rsync守護(hù)進(jìn)程服務(wù)
#step1 安裝rsync軟件
rpm -qa |grep rsync
yum install -y rsync
#step2 編寫配置文件 以root身份運(yùn)行rsync但保留用戶所有權(quán)
vim /etc/rsyncd.conf
uid = root
gid = root
port = 873
#fake super = yes
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = true
hosts allow = 172.17.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by devops"
path = /backup
#step3 創(chuàng)建rsync服務(wù)的虛擬賬戶 上面配置使用的rsync 不創(chuàng)建也可以 沒有測試
useradd rsync -M -s /sbin/nologin
#step4 配置rsync的認(rèn)證信息
ehco "rsync_backup:1" >/etc/rsync.password
chmod 600 /etc/rsync.password
#step5 創(chuàng)建備份目錄 屬主屬組默認(rèn)是root 所有不需要修改
mkdir /backup
#step6 啟動服務(wù)
systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd
2.1.2 存儲服務(wù)器即 rsync客戶端配置
#step1 安裝rsync軟件
rpm -qa |grep rsync
yum install -y rsync
#配置下密碼文件,這個密碼是存儲服務(wù)器rsync認(rèn)證信息中的密碼
echo "1" > /etc/rsync.pas
2.2 存儲服務(wù)器部署inotify監(jiān)控服務(wù)
2.2.1 安裝inotify軟件
yum -y install inotify-tools
2.2.2 inotify 軟件的命令的使用
rpm -ql inotify-tools
[root@ data]# rpm -ql inotify-tools
/usr/bin/inotifywait
/usr/bin/inotifywatch
inotifywait命令使用方法
Usage: inotifywatch [ options ] file1 [ file2 ] [ ... ]
-m|--monitor --------------- 實現(xiàn)一直監(jiān)控目錄的數(shù)據(jù)變化
-r|--recursive ----------------- 進(jìn)行遞歸監(jiān)控
-q|--quiet ------------------- 盡量減少信息的輸出
--format <fmt> -------------- 指定輸出信息的格式
--timefmt ------------------- 指定輸出的時間信息格式
-e|--event ------------------ 指定監(jiān)控的事件信息
創(chuàng)建文件監(jiān)控信息輸出
/data/ CREATE test --- 一個文件被創(chuàng)建
/data/ OPEN test --- 打開創(chuàng)建的文件
/data/ ATTRIB test --- 修改文件的屬性信息
/data/ CLOSE_WRITE,CLOSE test --- 保存關(guān)閉一個文件
sed 命令修改文件原理
#一屏打開執(zhí)行sed修改文件
[root@ www]# sed -i 's#b#a#g' test
#一屏監(jiān)控文件變化
[root@ data]# inotifywait -m /data/www
Setting up watches.
Watches established.
/data/www/ OPEN test --------------- 打開test文件
/data/www/ CREATE sedBw5yaY --------------- 創(chuàng)建一個臨時文件(內(nèi)存)
/data/www/ OPEN sedBw5yaY --------------- 打開臨時文件
/data/www/ ACCESS test --------------- 讀取源文件
/data/www/ MODIFY sedBw5yaY --------------- 修改臨時文件
/data/www/ ATTRIB sedBw5yaY --------------- 修改臨時文件屬性變化
/data/www/ CLOSE_NOWRITE,CLOSE test --------------- 不編輯直接關(guān)閉源文件
/data/www/ CLOSE_WRITE,CLOSE sedBw5yaY ------------ 寫入關(guān)閉臨時文件
/data/www/ MOVED_FROM sedBw5yaY --------------- 將臨時文件 移除
/data/www/ MOVED_TO test --------------- 移入一個新的test源文件
inotify監(jiān)控命令格式:
inotifywait -mrq --timefmt "%F" --format "%T %w %f 事件信息:%e" /data -e CREATE
一般監(jiān)控 create創(chuàng)建,delete刪除,move_to移入,close_write修改
2.2.3 inotify應(yīng)用
需要用到inotify進(jìn)行實時一直監(jiān)控 /etc passwd /var/spool/cron/root
2.3 存儲服務(wù)器部署sersync同步服務(wù)
2.3.1 安裝sersync
#step1 下載sersync 并解壓 此項目github地址 https://github.com/wsgzao/sersync
mkdir /server/tools
cd /server/tools
wget https://codeload.github.com/wsgzao/sersync/zip/master
yum -y install unzip
unzip master
cd sersync-master
tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
#安裝解壓好的二進(jìn)制程序
mv GNU-Linux-x86 /usr/local/sersync
2.3.2 編寫配置文件
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<!---指定哪些數(shù)據(jù)信息不需要同步--->
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<!---定義inotify程序需要監(jiān)控的事件--->
<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">
<!---修改rsync服務(wù)端的ip和rsync服務(wù)端的模塊信息--->
<remote ip="172.17.1.104" name="backup"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<!---修改rsync參數(shù)--->
<commonParams params="-az"/>
<!---修改遠(yuǎn)程rsync服務(wù)端的認(rèn)證信息--->
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pas"/>
<!---修改端口信息默認(rèn)是873--->
<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>
2.3.3 啟動實時同步服務(wù)
/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml