1. 程式人生 > >rsync+inotify實現遠程同步

rsync+inotify實現遠程同步

root .sh 時間 遠程 文件的權限 reat hosts use systemctl

  • rsync介紹

    rsync,英文全稱是remote synchronize,是一款實現遠程同步功能的免費軟件,它在同步文件的同時,可以保持原來文件的權限、時間、軟硬鏈接等附加信息。 rsync提供了一個客戶機和遠程文件服務器的文件同步的快速方法,而且可以通過ssh方式來傳輸文件。甚至還可以實現只同步一個文件裏有變化的內容部分,所以可以實現快速的同步備份數據。同時,rsync還可以實現同步本地數據、刪除文件和目錄的功能。

  • inotify介紹
  • Inotify 是一個 Linux 內核特性,它監控文件系統,並且及時向專門的應用程序發出相關的事件警告,比如刪除、讀、寫和卸載操作等。您還可以跟蹤活動的源頭和目標等細節。

    • rsync+notify實現自動同步

    如果要實現定時同步數據,可以在客戶端將rsync加入定時任務,但是定時任務的同步時間粒度並不能達到實時同步的要求。在Linux kernel 2.6.13後提供了inotify文件系統監控機制。通過rsync+inotify組合可以實現實時同步。

    • 實驗要求:

    源服務器:192.168.177.132(rsync,httpd)

    發起端:192.168.177.132(rsync,httpd,inotify-tools)

    源服務器

    # rpm -q rsync  //查看rsync有沒有安裝
    # vim /etc/rsyncd.conf   //rsync的配置文件
    
     uid = nobody
     gid = nobody
     use chroot = yes
     address = 192.168.177.132
     port 873
     log file = /var/log/rsyncd.log
     pid file = /var/run/rsyncd.pid
     hosts allow = 192.168.177.0/24
    
     [wwwroot]
     path = /var/www/html
     comment = www.kgc.cn
     read only = yes
     dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
     auth users = backuper
     secrets file = /etc/rsyncd_users.db
    # vim /etc/rsyncd_users.db
      backuper:abc123  //賬號跟密碼的格式
    # chmod 600 /etc/rsyncd_users.db
    # yum install httpd -y   //安裝web服務
    # rsync --daemon  //啟動rsync服務
    # systemctl stop firewalld.service  //關閉防火墻
    # setenforce 0   //增強性安全功能
    # chmod 777 /var/www/html/
    # cd /var/www/html
    # echo "this is test" > 123.txt

    技術分享圖片
    技術分享圖片
    技術分享圖片
    技術分享圖片

    發起端

    # systemctl stop firewalld.service
    # setenforce 0  //必須先關閉防火墻
    交互,輸入的是源服務器的地址
    # rsync -avz [email protected]::wwwroot /opt/  
    免交互,無需輸入密碼
    # vim /etc/server.pass
    # chmod 600 /etc/server.pass
    # rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt
    

    技術分享圖片

    rsync+inotify自動同步

    inotify裝在發起端

    rsync在源服務器上

    源服務器:
    # vim /etc/rsyncd.conf
       read only = no
    # pkill -9 rsync
    # cd /var/run/
    # rm -rf rsyncd.pid //刪除pid進程
    # rsync --daemon  //重啟服務
    發起端:
    # chmod 777 /var/www/html/
    # tar zxvf inotify-tools-3.14.tar.gz -C /opt //解壓
    # cd inotify-tools-3.14/
      ./configure
    # yum install gcc gcc-c++ -y  //安裝編譯環境
    # make && make install
    # vim /etc/sysctl.conf   //進行優化
    fs.inotify.max_queued_events = 16384
    fs.inotify.max_user_instances = 1024
    fs.inotify.max_user_watches = 1048576
    # sysctl -p   //立即生效
    # inotifywait -mrq -e modify,create,move,delete /var/www/html/  //對站點進行監控
    # vim /opt/inotify.sh  //編寫能同步的腳本
    #!/bin/bash
    INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
    RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ [email protected]::wwwroot/"
    $INOTIFY_CMD | while read DIRECTORY EVENT FILE
    do
        if [ $(pgrep rsync | wc -l) -le 0 ] ; then
            $RSYNC_CMD
        fi
    done
    # chmod +x inotify.sh
    # ./inotify.sh

    技術分享圖片
    技術分享圖片
    技術分享圖片
    技術分享圖片

    rsync+inotify實現遠程同步