服務器間文件實時雙向同步(rsync+inotify)


  場景: 主從服務器項目文件實時雙向同步(參考:http://www.xcx1024.com/ArtInfo/3026389.html)

.rsync安裝

  yum在線:

        yum install -y rsync

 
  離線:

        cd /usr/local

        wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz

        tar -zxvf rsync-3.1.2.tar.gz

        cd rsync-3.1.2

        ./configure --prefix=/usr/local/rsync

        make

        make install

 

 

. 創建rsync配置文件

   yum在線:

        vi /etc/rsyncd.conf

 

   離線:

        vi /usr/local/rsync/rsyncd.conf

 

 

  配置文件內容:

        #rsync通用配置文件,配置的注釋不要寫在配置后面,否則會有問題

        uid = root

        gid = root

        use chroot = 0

        port = 873

        #允許ip訪問設置,請根據實際需要進行配置,這里為了方便設為全網段 *

  # hosts allow = 192.168.0.1/255.255.255.0 198.162.145.1 10.0.1.0/255.255.255.0

        hosts allow = *

        max connections = 0

        timeout = 300

        pid file = /var/run/rsyncd.pid

        lock file = /var/run/rsyncd.lock

        log file = /var/log/rsyncd.log

        log format = %t %a %m %f %b

        transfer logging = yes

        syslog facility = local3

        #方括號中為模塊聲明,對應命名,這里master_web對應了主web機配置

        [master_web]

        #指定當前模塊在rsync服務器上的同步路徑,該參數是必須指定的

        path = /app/web/data-share/static/

        #注釋,可以同模塊名一樣,從服務器可都為slave_web

        comment = master_web

        ignore errors

        #是否允許客戶端上傳文件

        read only = no

        list = no

        #指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模塊

        auth users = rsync

        #保存密碼和用戶名文件,需要自己生成

        secrets file = /etc/rsyncd.passwd

 

 

 

. 創建用戶名密碼文件

     yum在線:

        vi /etc/rsyncd.passwd

        vi /root/rsyncd.passwd

 

     離線:

        vi /usr/local/rsync/rsyncd.passwd

        vi /root/rsyncd.passwd

 

 

        文件內容:

       

 #/etc/rsyncd.passwd中內容格式 用戶名:密碼 ,兩台服務器設置相同的用戶名密碼 rsync:123456

#/root/rsyncd.passwd中內容只需要填寫從服務器的密碼,兩台服務器設置相同的密碼 123456

 

 

 

.給文件賦權限

   Yum在線:

    chmod 600 /etc/rsyncd.passwd

    chmod 600 /root/rsyncd.passwd

 

   離線:

    chmod 600 /usr/local/rsync/rsyncd.passwd

    chmod 600 /root/rsyncd.passwd

 

 

.以守護進程方式啟動rsync服務

  Yum在線:

    /usr/bin/rsync --daemon --config=/etc/rsyncd.conf

 

   離線:

    /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf

 

 

.添加開啟自啟動

   yum在線:

    echo "/usr/bin/rsync --daemon --config=/etc/rsyncd.conf">>/etc/rc.local

 

    離線:

echo "/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf">>/etc/rc.local

 

 

 

. 驗證是否可以手動同步

 # master_web 為從web服務器的 rsyncd.conf 中配置的模塊名,

  # rsync 為從web服務器的中 rsyncd.passwd 中配置的用戶名

 

    78服務器給79服務器同步:

    

rsync -vzrtopg --delete --progress /usr/local/data-share/static/ rsync@xx.xx.xx.79::master_web --password-file=/root/rsyncd.passwd

 

 

    定時任務:

   

 echo '*/1 * * * * rsync -vzrtopg --delete --progress /usr/local/data-share/static/ rsync@xx.xx.xx.79::master_web --    password-file=/root/rsyncd.passwd > /dev/null 2>&1 &' >> /var/spool/cron/root

 

 

    79服務器給78服務器同步:

    

rsync -vzrtopg --delete --progress /usr/local/data-share/static/ rsync@xx.xx.xx.78::master_web --password-file=/root/rsyncd.passwd

 

    定時任務:

    

echo '*/1 * * * * rsync -vzrtopg --delete --progress /usr/local/data-share/static/ rsync@xx.xx.xx.78::master_web --password-file=/root/rsyncd.passwd > /dev/null 2>&1 &' >> /var/spool/cron/root

 

 

 

.安裝inotify

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz --no-check-certificate

    tar -zxvf inotify-tools-3.14.tar.gz

    makedir /usr/local/inotify

    cd inotify-tools-3.14.tar.gz

    ./configure --prefix=/usr/local/inotify

    make && make install

 

 

    # 查看是否安裝成功

  

  ls -alh /usr/local/inotify/bin/inotify*

 

 

    # 建立軟連接

 

   ln -s /usr/local/inotify/bin/inotifywait /usr/bin/inotifywait

    ln -s /usr/local/inotify/bin/inotifywatch /usr/bin/inotifywatch

 

 

 

.創建並配置inotify_back.sh

 

vi /usr/local/inotify/inotify_back.sh

 

 

    配置文件內容:

 

    78服務器:

    #!/bin/bash

    src=/app/web/data-share/static/

    /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read file

    do

    rsync -vzrtopg --delete --progress /usr/local/data-share/static/ rsync@172.20.14.79::master_web --password-file=/root/rsyncd.passwd

    echo "${file} was rsynced" >> /tmp/rsync.log 2>&1

    done

 

 

    79服務器:

    #!/bin/bash

    src=/app/web/data-share/static/

    /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read file

    do

    rsync -vzrtopg --delete --progress /usr/local/data-share/static/ rsync@172.20.14.78::master_web --password-file=/root/rsyncd.passwd

    echo "${file} was rsynced" >> /tmp/rsync.log 2>&1

    done

 

 

 

.inotify_back.sh腳本賦予可執行權限

chmod +x inotify_back.sh

 

 

十一.運行inotify_back.sh同步監控腳本和配置守護進程

   nohup ./inotify_back.sh &

    #建立守護進程運行inotify_back.sh腳本

    echo "nohup ./inotify_back.sh &" >> /etc/rc.local

 

 

 

注意點:

開放873端口

創建同步用戶(useradd rsync , 並配置密碼passwd rsync)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM