久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    Linux下同步工具inotify+rsync使用詳解

     點點閱 2017-08-28

    1. rsync

    1.1 什么是rsync

    rsync是一個遠程數(shù)據(jù)同步工具,可通過LAN/WAN快速同步多臺主機間的文件。它使用所謂的“Rsync演算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當(dāng)快。所以通常可以作為備份工具來使用。

    運行Rsync server的機器也叫backup server,一個Rsync server可同時備份多個client的數(shù)據(jù);也可以多個Rsync server備份一個client的數(shù)據(jù)。Rsync可以搭配ssh甚至使用daemon模式。Rsync server會打開一個873的服務(wù)通道(port),等待對方rsync連接。連接時,Rsync server會檢查口令是否相符,若通過口令查核,則可以開始進行文件傳輸。第一次連通完成時,會把整份文件傳輸一次,下一次就只傳送二個文件之間不同的部份。

    基本特點:

    1. 可以鏡像保存整個目錄樹和文件系統(tǒng);
    2. 可以很容易做到保持原來文件的權(quán)限、時間、軟硬鏈接等;
    3. 無須特殊權(quán)限即可安裝;
    4. 優(yōu)化的流程,文件傳輸效率高;
    5. 可以使用rcp、ssh等方式來傳輸文件,當(dāng)然也可以通過直接的socket連接;
    6. 支持匿名傳輸。

    命令語法:
    rsync的命令格式可以為以下六種:
     rsync [OPTION]… SRC DEST
     rsync [OPTION]… SRC [USER@]HOST:DEST
     rsync [OPTION]… [USER@]HOST:SRC DEST
     rsync [OPTION]… [USER@]HOST::SRC DEST
     rsync [OPTION]… SRC [USER@]HOST::DEST
     rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

    對應(yīng)于以上六種命令格式,我們可以總結(jié)rsync有2種不同的工作模式:

    • shell模式:使用遠程shell程序(如ssh或rsh)進行連接。當(dāng)源路徑或目的路徑的主機名后面包含一個冒號分隔符時使用這種模式,rsync安裝完成后就可以直接使用了,無所謂啟動。(目前沒有嘗試過這個方法)
    • daemon模式:使用TCP直接連接rsync daemon。當(dāng)源路徑或目的路徑的主機名后面包含兩個冒號,或使用rsync://URL時使用這種模式,無需遠程shell,但必須在一臺機器上啟動rsync daemon,默認(rèn)端口873,這里可以通過rsync --daemon使用獨立進程的方式,或者通過xinetd超級進程來管理rsync后臺進程。

    當(dāng)rsync作為daemon運行時,它需要一個用戶身份。如果你希望啟用chroot,則必須以root的身份來運行daemon,監(jiān)聽端口,或設(shè)定文件屬主;如果不啟用chroot,也可以不使用root用戶來運行daemon,但該用戶必須對相應(yīng)的模塊擁有讀寫數(shù)據(jù)、日志和lock file的權(quán)限。當(dāng)rsync以daemon模式運行時,它還需要一個配置文件——rsyncd.conf。修改這個配置后不必重啟rsync daemon,因為每一次的client連接都會去重新讀取該文件。

    我們一般把DEST遠程服務(wù)器端成為rsync Server,運行rsync命令的一端SRC稱為Client。

    安裝:
    rsync在CentOS6上默認(rèn)已經(jīng)安裝,如果沒有則可以使用yum install rsync -y,服務(wù)端和客戶端是同一個安裝包。

    # rsync -h
    

    1.2 同步測試

    關(guān)于rsync命令的諸多選項說明,見另外一篇文章rsync與inotifywait命令和配置選項說明

    1.2.1 本機文件夾同步

    # rsync -auvrtzopgP --progress  /root/ /tmp/rsync_bak/
    

    會看到從/root/傳輸文件到/tmp/rsync_bak/的列表和速率,再運行一次會看到sending incremental file list下沒有復(fù)制的內(nèi)容,可以在/root/下touch某一個文件再運行看到只同步了修改過的文件。

    上面需要考慮以下問題:

    • 刪除/root/下的文件不會同步刪除/tmp/rsync_bak,除非加入--delete選項
    • 文件訪問時間等屬性、讀寫等權(quán)限、文件內(nèi)容等有任何變動,都會被認(rèn)為修改
    • 目標(biāo)目錄下如果文件比源目錄還新,則不會同步
    • 源路徑的最后是否有斜杠有不同的含義:有斜杠,只是復(fù)制目錄中的文件;沒有斜杠的話,不但要復(fù)制目錄中的文件,還要復(fù)制目錄本身

    1.3 同步到遠程服務(wù)器

    在服務(wù)器間rsync傳輸文件,需要有一個是開著rsync的服務(wù),而這一服務(wù)需要兩個配置文件,說明當(dāng)前運行的用戶名和用戶組,這個用戶名和用戶組在改變文件權(quán)限和相關(guān)內(nèi)容的時候有用,否則有時候會出現(xiàn)提示權(quán)限問題。配置文件也說明了模塊、模塊化管理服務(wù)的安全性,每個模塊的名稱都是自己定義的,可以添加用戶名密碼驗證,也可以驗證IP,設(shè)置目錄是否可寫等,不同模塊用于同步不同需求的目錄。

    1.3.1 服務(wù)端配置文件

    ** /etc/rsyncd.conf: **

    #2014-12-11 by Sean
    uid=root
    gid=root
    use chroot=no
    max connections=10
    timeout=600
    strict modes=yes
    port=873
    pid file=/var/run/rsyncd.pid
    lock file=/var/run/rsyncd.lock
    log file=/var/log/rsyncd.log
    
    [module_test]
    path=/tmp/rsync_bak2
    comment=rsync test logs
    auth users=sean
    uid=sean
    gid=sean
    secrets file=/etc/rsyncd.secrets
    read only=no
    list=no
    hosts allow=172.29.88.204
    hosts deny=0.0.0.0/32
    

    這里配置socket方式傳輸文件,端口873,[module_test]開始定義一個模塊,指定要同步的目錄(接收)path,授權(quán)用戶,密碼文件,允許哪臺服務(wù)器IP同步(發(fā)送)等。關(guān)于配置文件中選項的詳細說明依然參考rsync與inotifywait命令和配置選項說明

    經(jīng)測試,上述配置文件每行后面不能使用#來來注釋

    ** /etc/rsyncd.secrets: **

    sean:passw0rd
    

    一行一個用戶,用戶名:密碼。請注意這里的用戶名和密碼與操作系統(tǒng)的用戶名密碼無關(guān),可以隨意指定,與/etc/rsyncd.conf中的auth users對應(yīng)。

    修改權(quán)限:chmod 600 /etc/rsyncd.d/rsync_server.pwd

    1.3.2 服務(wù)器啟動rsync后臺服務(wù)

    修改/etc/xinetd.d/rsync文件,disable 改為 no

    # 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
    }
    

    執(zhí)行service xinetd restart會一起重啟rsync后臺進程,默認(rèn)使用配置文件/etc/rsyncd.conf。也可以使用/usr/bin/rsync --daemon --config=/etc/rsyncd.conf。

    為了以防rsync寫入過多的無用日志到/var/log/message(容易塞滿從而錯過重要的信息),建議注釋掉/etc/xinetd.conf的success:

    # log_on_success  = PID HOST DURATION EXIT
    

    如果使用了防火墻,要添加允許IP到873端口的規(guī)則。

    # iptables -A INPUT -p tcp -m state --state NEW  -m tcp --dport 873 -j ACCEPT
    # iptables -L  查看一下防火墻是不是打開了 873端口
    # netstat -anp|grep 873
    

    建議關(guān)閉selinux,可能會由于強訪問控制導(dǎo)致同步報錯。

    1.3.3 客戶端測試同步

    單向同步時,客戶端只需要一個包含密碼的文件。
    /etc/rsync_client.pwd:

    passw0rd
    

    chmod 600 /etc/rsync_client.pwd

    命令:
    將本地/root/目錄同步到遠程172.29.88.223的/tmp/rsync_bak2目錄(module_test指定):

    /usr/bin/rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd /root/ sean@172.29.88.223::module_test 
    

    當(dāng)然你也可以將遠程的/tmp/rsync_bak2目錄同步到本地目錄/root/tmp:

    /usr/bin/rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd sean@172.29.88.223::module_test /root/ 
    

    從上面兩個命令可以看到,其實這里的服務(wù)器與客戶端的概念是很模糊的,rsync daemon都運行在遠程172.29.88.223上,第一條命令是本地主動推送目錄到遠程,遠程服務(wù)器是用來備份的;第二條命令是本地主動向遠程索取文件,本地服務(wù)器用來備份,也可以認(rèn)為是本地服務(wù)器恢復(fù)的一個過程。

    1.4 rsync不足

    與傳統(tǒng)的cp、tar備份方式相比,rsync具有安全性高、備份迅速、支持增量備份等優(yōu)點,通過rsync可以解決對實時性要求不高的數(shù)據(jù)備份需求,例如定期的備份文件服務(wù)器數(shù)據(jù)到遠端服務(wù)器,對本地磁盤定期做數(shù)據(jù)鏡像等。

    隨著應(yīng)用系統(tǒng)規(guī)模的不斷擴大,對數(shù)據(jù)的安全性和可靠性也提出的更好的要求,rsync在高端業(yè)務(wù)系統(tǒng)中也逐漸暴露出了很多不足,首先,rsync同步數(shù)據(jù)時,需要掃描所有文件后進行比對,進行差量傳輸。如果文件數(shù)量達到了百萬甚至千萬量級,掃描所有文件將是非常耗時的。而且正在發(fā)生變化的往往是其中很少的一部分,這是非常低效的方式。其次,rsync不能實時的去監(jiān)測、同步數(shù)據(jù),雖然它可以通過crontab方式進行觸發(fā)同步,但是兩次觸發(fā)動作一定會有時間差,這樣就導(dǎo)致了服務(wù)端和客戶端數(shù)據(jù)可能出現(xiàn)不一致,無法在應(yīng)用故障時完全的恢復(fù)數(shù)據(jù)。基于以上原因,rsync+inotify組合出現(xiàn)了!

    2. inotify-tools

    2.1 什么是inotify

    inotify是一種強大的、細粒度的、異步的文件系統(tǒng)事件監(jiān)控機制,Linux內(nèi)核從2.6.13開始引入,允許監(jiān)控程序打開一個獨立文件描述符,并針對事件集監(jiān)控一個或者多個文件,例如打開、關(guān)閉、移動/重命名、刪除、創(chuàng)建或者改變屬性。

    CentOS6自然已經(jīng)支持:
    使用ll /proc/sys/fs/inotify命令,是否有以下三條信息輸出,如果沒有表示不支持。

    total 0
    -rw-r--r-- 1 root root 0 Dec 11 15:23 max_queued_events
    -rw-r--r-- 1 root root 0 Dec 11 15:23 max_user_instances
    -rw-r--r-- 1 root root 0 Dec 11 15:23 max_user_watches
    
    • /proc/sys/fs/inotify/max_queued_evnets表示調(diào)用inotify_init時分配給inotify instance中可排隊的event的數(shù)目的最大值,超出這個值的事件被丟棄,但會觸發(fā)IN_Q_OVERFLOW事件。
    • /proc/sys/fs/inotify/max_user_instances表示每一個real user ID可創(chuàng)建的inotify instatnces的數(shù)量上限。
    • /proc/sys/fs/inotify/max_user_watches表示每個inotify instatnces可監(jiān)控的最大目錄數(shù)量。如果監(jiān)控的文件數(shù)目巨大,需要根據(jù)情況,適當(dāng)增加此值的大小。

    inotify-tools:

    inotify-tools是為linux下inotify文件監(jiān)控工具提供的一套C的開發(fā)接口庫函數(shù),同時還提供了一系列的命令行工具,這些工具可以用來監(jiān)控文件系統(tǒng)的事件。 inotify-tools是用c編寫的,除了要求內(nèi)核支持inotify外,不依賴于其他。inotify-tools提供兩種工具,一是inotifywait,它是用來監(jiān)控文件或目錄的變化,二是inotifywatch,它是用來統(tǒng)計文件系統(tǒng)訪問的次數(shù)。

    下載inotify-tools-3.14-1.el6.x86_64.rpm,通過rpm包安裝:

    # rpm -ivh /apps/crm/soft_src/inotify-tools-3.14-1.el6.x86_64.rpm 
    warning: /apps/crm/soft_src/inotify-tools-3.14-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 4026433f: NOKEY
    Preparing...                ########################################### [100%]
       1:inotify-tools          ########################################### [100%]
    # rpm -qa|grep inotify
    inotify-tools-3.14-1.el5.x86_64
    

    2.2 inotifywait使用示例

    監(jiān)控/root/tmp目錄文件的變化:

    /usr/bin/inotifywait -mrq --timefmt '%Y/%m/%d-%H:%M:%S' --format '%T %w %f'  -e modify,delete,create,move,attrib /root/tmp/
    

    上面的命令表示,持續(xù)監(jiān)聽/root/tmp目錄及其子目錄的文件變化,監(jiān)聽事件包括文件被修改、刪除、創(chuàng)建、移動、屬性更改,顯示到屏幕。執(zhí)行完上面的命令后,在/root/tmp下創(chuàng)建或修改文件都會有信息輸出:

    2014/12/11-15:40:04 /root/tmp/ new.txt
    2014/12/11-15:40:22 /root/tmp/ .new.txt.swp
    2014/12/11-15:40:22 /root/tmp/ .new.txt.swx
    2014/12/11-15:40:22 /root/tmp/ .new.txt.swx
    2014/12/11-15:40:22 /root/tmp/ .new.txt.swp
    2014/12/11-15:40:22 /root/tmp/ .new.txt.swp
    2014/12/11-15:40:23 /root/tmp/ .new.txt.swp
    2014/12/11-15:40:31 /root/tmp/ .new.txt.swp
    2014/12/11-15:40:32 /root/tmp/ 4913
    2014/12/11-15:40:32 /root/tmp/ 4913
    2014/12/11-15:40:32 /root/tmp/ 4913
    2014/12/11-15:40:32 /root/tmp/ new.txt
    2014/12/11-15:40:32 /root/tmp/ new.txt~
    2014/12/11-15:40:32 /root/tmp/ new.txt
    ...
    

    3. rsync組合inotify-tools完成實時同步

    這一步的核心其實就是在客戶端創(chuàng)建一個腳本rsync.sh,適用inotifywait監(jiān)控本地目錄的變化,觸發(fā)rsync將變化的文件傳輸?shù)竭h程備份服務(wù)器上。為了更接近實戰(zhàn),我們要求一部分子目錄不同步,如/root/tmp/log和臨時文件。

    3.1 創(chuàng)建排除在外不同步的文件列表

    排除不需要同步的文件或目錄有兩種做法,第一種是inotify監(jiān)控整個目錄,在rsync中加入排除選項,簡單;第二種是inotify排除部分不監(jiān)控的目錄,同時rsync中也要加入排除選項,可以減少不必要的網(wǎng)絡(luò)帶寬和CPU消耗。我們選擇第二種。

    3.1.1 inotifywait排除

    這個操作在客戶端進行,假設(shè)/tmp/src/mail/2014/以及/tmp/src/mail/2015/cache/目錄下的所有文件不用同步,所以不需要監(jiān)控,/tmp/src/下的其他文件和目錄都同步。(其實對于打開的臨時文件,可以不監(jiān)聽modify時間而改成監(jiān)聽close_write

    inotifywait排除監(jiān)控目錄有--exclude <pattern>--fromfile <file>兩種格式,并且可以同時使用,但主要前者可以用正則,而后者只能是具體的目錄或文件。

    # vi /etc/inotify_exclude.lst:
    /tmp/src/pdf
    @/tmp/src/2014
    

    使用fromfile格式只能用絕對路徑,不能使用諸如*正則表達式去匹配,@表示排除。

    如果要排除的格式比較復(fù)雜,必須使用正則,那只能在inotifywait中加入選項,如--exclude '(.*/*\.log|.*/*\.swp)$|^/tmp/src/mail/(2014|201.*/cache.*)',表示排除/tmp/src/mail/以下的2014目錄,和所有201*目錄下的帶cache的文件或目錄,以及/tmp/src目錄下所有的以.log或.swp結(jié)尾的文件。

    3.1.2 rsync排除

    使用inotifywait排除監(jiān)控目錄的情況下,必須同時使用rsync排除對應(yīng)的目錄,否則只要有觸發(fā)同步操作,必然會導(dǎo)致不該同步的目錄也會同步。與inotifywait類似,rsync的同步也有--exclude--exclude-from兩種寫法。

    個人還是習(xí)慣將要排除同步的目錄卸載單獨的文件列表里,便于管理。使用--include-from=FILE時,排除文件列表用絕對路徑,但FILE里面的內(nèi)容請用相對路徑,如:
    /etc/rsyncd.d/rsync_exclude.lst

    mail/2014/
    mail/201*/201*/201*/.??*
    mail??*
    src/*.html*
    src/js/
    src/ext3/
    src/2014/20140[1-9]/
    src/201*/201*/201*/.??*
    membermail/
    membermail??*
    membermail/201*/201*/201*/.??*
    

    排除同步的內(nèi)容包括,mail下的2014目錄,類似2015/201501/20150101/下的臨時或隱藏文件,等。

    3.2 客戶端同步到遠程的腳本rsync.sh

    下面是一個完整的同步腳本,請根據(jù)需要進行裁剪,rsync.sh

    #rsync auto sync script with inotify
    #2014-12-11 Sean
    #variables
    current_date=$(date +%Y%m%d_%H%M%S)
    source_path=/tmp/src/
    log_file=/var/log/rsync_client.log
    
    #rsync
    rsync_server=172.29.88.223
    rsync_user=sean
    rsync_pwd=/etc/rsync_client.pwd
    rsync_module=module_test
    INOTIFY_EXCLUDE='(.*/*\.log|.*/*\.swp)$|^/tmp/src/mail/(2014|20.*/.*che.*)'
    RSYNC_EXCLUDE='/etc/rsyncd.d/rsync_exclude.lst'
    
    #rsync client pwd check
    if [ ! -e ${rsync_pwd} ];then
        echo -e "rsync client passwod file ${rsync_pwd} does not exist!"
        exit 0
    fi
    
    #inotify_function
    inotify_fun(){
        /usr/bin/inotifywait -mrq --timefmt '%Y/%m/%d-%H:%M:%S' --format '%T %w %f'           --exclude ${INOTIFY_EXCLUDE}  -e modify,delete,create,move,attrib ${source_path}           | while read file
          do
              /usr/bin/rsync -auvrtzopgP --exclude-from=${RSYNC_EXCLUDE} --progress --bwlimit=200 --password-file=${rsync_pwd} ${source_path} ${rsync_user}@${rsync_server}::${rsync_module} 
          done
    }
    
    #inotify log
    inotify_fun >> ${log_file} 2>&1 &
    

    --bwlimit=200用于限制傳輸速率最大200kb,因為在實際應(yīng)用中發(fā)現(xiàn)如果不做速率限制,會導(dǎo)致巨大的CPU消耗。

    在客戶端運行腳本# ./rsync.sh即可實時同步目錄。

    其他功能:雙向同步sersync2實時同步多遠程服務(wù)器

    參考

      本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
      轉(zhuǎn)藏 分享 獻花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 国产精品免费久久久久影院| 大地资源中文第二页日本| 亚洲AV毛片一区二区三区| 日本福利一区二区精品| 亚洲色最新高清AV网站| 国产欧美日韩VA另类在线播放| 日韩一区在线中文字幕| 欧美大屁股流白浆XXXX| 性一交一乱一伦| 国产永久免费高清在线| 欧美人妻一区二区三区| 欧美高清狂热视频60一70| 日韩精品久久久肉伦网站| 亚洲高清WWW色好看美女| 亚韩精品中文字幕无码视频| 免费无码又爽又刺激高潮虎虎视频| 人人妻人人做人人爽 | 久久综合精品国产二区无码| 日本福利一区二区精品| 男人把女人桶到喷白浆的软件免费| 日韩中文字幕国产精品| 55夜色66夜色国产精品视频| 精品视频在线观看免费观看| 美女内射毛片在线看免费人动物| 免费午夜无码片在线观看影院| 八区精品色欲人妻综合网| 亚洲欧洲精品专线| 国产一区二区日韩在线| 99久久99久久精品国产片| 国产免费高清69式视频在线观看| 又大又粗又硬又爽黄毛少妇 | 老子影院午夜精品无码| 欧美成人午夜在线观看视频| bt天堂新版中文在线| 亚洲AV无码久久久久网站蜜桃| 加勒比无码人妻东京热| 国产精品v片在线观看不卡| 1000部拍拍拍18勿入免费视频| 日韩人妻精品中文字幕| 久久人人爽人人人人片AV| FC2免费人成在线视频|