inotify+rsync實現文件即便備份

    // Rsync + inotiry 實現即時同步數據 20140913
    [環境需求]
        1.linux 內核版本 > 2.6.13
        2.預先安裝rsync , inotify是在rsync基礎上運行
        3.能夠查看 ls /proc/sys/fs/inotify/
                -rw-r--r-- 1 root root 0 Sep 14 00:00 max_queued_events // 時間隊列 後期生產環境須要改大點
                -rw-r--r-- 1 root root 0 Sep 14 00:00 max_user_instances // 用戶實例數 後期生產環境須要改大點
                -rw-r--r-- 1 root root 0 Sep 14 00:00 max_user_watches // 用戶監聽數 後期生產環境須要改大點

    [安裝inotify]
        1.下載inotify.tgz軟件包,解壓 、編譯、安裝 // 軟件包自行baidu . goole.com 搜索inotify-tools down
        2. 安裝後在/usr/local/inotify-3.14/bin/[inotifywait/inotifywatch]
                inotifywait  [-hcmrq]  [-e  <event>  ]  [-t <seconds> ] [--format <fmt> ] [--timefmt <fmt> ]
       <file> [ ... ]
                    -h // help
                    -c // csv 
                    -r // recursion 遞歸監聽
                    -q // quit  安靜模式
                    -e // 監聽時間
                    -t // 超時時間
                    -format // terminal display format 終端顯示樣式

        3. 腳本實例(啓動腳本,先肯定rsync配置及啓動[ps:]詳解)


            [shell version 2]
                #!/bin/bash
                USER=luowen
                HOST=192.168.213.133
                PASSWD_FILE=/etc/rsyncd.secrets
                SRC_DIR=/www
                BACK_DIR=backup

                # inotify soft
                INOTIFY_BIN='/usr/local/inotify/bin'

                if [ ! -e "$PASSWD_FILE" ] && [ ! -e "$SRC_DIR" ] && [ ! -e "$INOTIFY_BIN" ];
                    then
                        echo 'CHECK CONFIGURE'
                        exit 9;
                fi

                "$INOTIFY_BIN"/inotifywait -mrq --format='%f%w' --timefmt='%F %T' -e close_write,delete,attrib,create "$SRC_DIR" | while read file 
                    do
                        # rsync
                        #echo $file
                        #`$RSYNC -avzP --delete --timeout=100 $USER@$HOST::$BACK_DIR --password-file=${PASSWD_FILE}`  > /dev/null 2>&1
                        cd $SRC_DIR && rsync -avrzP --delete --timeout=100 $SRC_DIR $USER@$HOST::$BACK_DIR --password-file=${PASSWD_FILE} > /dev/null 2>&1 
                    done
                exit 0;

            #============================version 2======================
            #!/bin/sh

            HOST=192.168.1.100 # 備份及的ip地址
            SRC=/backup # 備份機的備份目錄
            DST=www # 模塊 與/etc/rsync.conf 的模塊相對應
            USER=rsync-backup 
            RSYNC_PASSFILE=/etc/rsync.password
            INOTIFY_HOME=/usr/local/initify/

            #judge
            if [ ! -e "$SRC" ] \
               [ ! -e "${RSYNC_PASSFILE}" ] \
               [ ! -e "${INOTIFY_HOME}/bin/inotifywait" ] \
               [ ! -e "/usr/bin/rsync" ];
            then
                echo "Check File And Folder"
                exit 9
            fi

            ${INOTIFY_HOME}/bin/inotifywait -mrq --timefmt '%F %T' --format '%T%w%f' -e close_write,delete,create,attrib $SRC  | while read file \
            do
                rsync -avzP --delete --timeout=100 --password-file=${RSYNC_PASSFILE} $SRC $USER@$HOST::$DST > /dev/null 2>&1

                cd $SRC && rsync -aruz -R --delete ./ --timeout=100 --password-file=/etc/rsync $USER@$HOST::$DST > /dev/null 2>&1

            done
            exit 0


            [ps:]
                rsync 命令模式:
                    1. rsync -avz -P --delete rsync://user@ip:/backup-directory/ /tmp --password-file=/etc/rsync/password
                    2. rsync -avz -P --delete user@ip:/directory /tmp --password-file=/etc/rsync/passwd

                    [rsync 服務器配置]
                        1. A服務器(B服務器上/www目錄下的文件,備份到A服務器)
                            ip : 192.168.213.133 
                            安裝rsync
                                 1. [backup]
                                       comment = public archive
                                       path = /backup
                                       use chroot = no
                                       max connections=10
                                       lock file = /var/lock/rsyncd
                                       read only = false
                                       list = yes
                                       uid = rsync # 對應的/backup目錄rsync用戶具備讀寫權限
                                       gid = rsync # 對應的/backup目錄rsync用戶具備讀寫權限
                                       auth users = luowen # 備份用戶名,能夠隨便填寫不須要是系統上的用戶 用戶 sync命令中的 luowen@xx.x.xx.xx 用戶名
                                       secrets file = /etc/rsyncd.secrets # 存放用戶認證用戶名 格式爲 上行的 luowen:password  // password 在B服務器上認證用
                                       hosts allow = 192.168.213.132 # 容許的機器ip地址 用於安全

                                2. 建立 /etc/rsyncd.secrets 文件 (umask 177; echo 'luowen:password' > /etc/rsyncd.secrets) 文件權限必須是600,否則A服務器驗證不經過
                                3. 啓動rsync服務,以daemon運行 (A服務端必須啓動rsync服務B服務端不須要啓動rsync服務)
                                4. chown -R rysnc:rsync /backup

                        2. B服務器 (將/www的數據備份到A服務器/backup目錄下)
                            1. ip 192.168.213.132
                                安裝rsync
                            2. 建立密碼文件
                                (umask 177; echo 'password' > /etc/rsyncd.secrets) # 一樣此文件必須是600 不然驗證不經過 password爲A服務端設置的密碼

                            3. 測試下 rsync -avzP --delete /www luowen@192.168.213.133::backup

相關文章
相關標籤/搜索