sersync 對網(wǎng)站數(shù)據(jù)實時同步備份

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

1 sersync實時同步原理

image-20210104163102063.png
  1. rsync守護(hù)進(jìn)程服務(wù),實現(xiàn)數(shù)據(jù)傳輸
  2. inotify服務(wù),實現(xiàn)目錄中數(shù)據(jù)變化監(jiān)控
  3. 將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 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容