配置rsync+inotify實現站點文件實時同步

1、rsync簡介

  • rsync是linux系統下的數據鏡像備份工具。能夠在不一樣主機之間鏡像同步整個目錄樹,支持增量備份,保持連接和權限,且採用優化的同步算法,在傳輸前執行壓縮,所以很是適用於異地備份、鏡像服務器等應用。
  • rsync的官方站點爲http:rsync.samba.org/

2、使用rsync備份工具

2.一、rsync命令的基本用法

  • 用法相似於cp命令,例如將文件/etc/fstab 和目錄/boot/grub同步備份到.opt目錄下,其中-r表示遞歸整個目錄,-l選項用來備份連接文件。

rsync /etc/fstab /opt
rsync -rl /etc/fstab /boot/grub /opthtml

經常使用命令格式及備份選項:
-v, --verbose 詳細模式輸出

-q, --quiet 精簡輸出模式

-c, --checksum 打開校驗開關,強制對文件傳輸進行校驗

-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性,等於-rlptgoD

-r, --recursive 對子目錄以遞歸模式處理

-p, --perms 保持文件權限

-o, --owner 保持文件屬主信息

-g, --group 保持文件屬組信息

-z, --compress 對備份的文件在傳輸時進行壓縮處理

-delete 刪除那些DST中SRC沒有的文件,保證兩邊文件同步對齊
  • 配置源的表示方法
  • 在執行遠程同步時,rsync須要指定同步源服務器中的資源位置。
rsync同步資源的表示方式爲 「用戶名@主機地址::共享模塊名」
或者,「rsync://用戶名@主機地址/共享模塊名」
前者爲兩個冒號分割形式,後者爲URL地址形式,例如
執行如下操做將訪問rsync同步源,並下載到本地/root目錄下進行備份
[root@localhost~]# rsync -avz backuper@192.168.144.110::abc /root
或者
[root@localhost~]# rsync -avz rsync://backuper@192.168.144.110/abc /root

執行如下操做訪問源服務器中的abc共享模塊,並下載到本地的/opt目錄下:
[root@localhost~]# rsync -avzH --delete backuper@192.168.144.110::abc /opt

實際生產環境中一般都是計劃性重複執行的,爲了在週期性計劃任務中不用輸入密碼交互式執行,
須要建立一個密碼文件,保存用戶的密碼,如/etc/server.pass,在執行rsync同步時使用選項
--password-file=/etc/server.pass,指定便可。

crontab -e
30 22 * * * /usr/bin/rsync --delete --password-file=/etc/server.pass backuperA@192.168.144.110::abc /opt   //天天22:30執行腳本
servevice crond restart
chkconfig crond on

3、配置rsync+inotify實時同步

  • notify是一種強大的、細粒度的、異步的文件系統事件監控機制,Linux內核從2.6.13版本起,加入了對inotify的支持。經過inotify能夠監控文件系統中添加、刪除、修改、移動等各類事件,利用這個內核接口,inotify-tools即可以監控文件系統下文件的各類變化狀況了。linux

  • 查看內核版本

uname -r 算法

一、系統環境

主機 操做系統 IP地址 所需軟件
rsync源服務器 CentOS 7.0 x86_64 192.168.144.110 rsync+inotify-tools-3.14.tar.gz
rsync備份服務器 CentOS 7.0 x86_64 192.168.144.120 rsync+inotify-tools-3.14.tar.gz

二、軟件安裝

rpm -q rsync //查詢rsync是否安裝,通常爲系統自帶安裝
yum install rsync -y //若沒有安裝,使用yum安裝vim

  • 安裝inotify軟件包

tar zxzvf notify-tools-3.14.tar.gz -C /opt
cd /opt/inotify-tools-3.14
./configuer
make && make install bash

三、調整inotify內核參數

vim /etc/sysctl.conf服務器

fs.inotify.max_queued_events = 16384    //監控事件隊列數
fs.inotify.max_user_instances = 1024    //最多監控實例數
fs.inotify.max_user_watches = 1048576    //實例最多監控文件數

四、配置rsync源於備份服務器

vim /etc/rsyncd.conf異步

# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:
 uid = nobody                   //rsync服務uid
 gid = nobody                   //rsync服務gid
 use chroot = yes               //禁錮家目錄
 pid file = /var/run/rsyncd.pid     //進程文件目錄
address = 192.168.144.110       //源服務器監聽地址           
port = 873                      //服務端口號
log file = /var/log/rsyncd.log  //指定日誌文件位置
hosts allow = *                 //容許任意網段服務器可與之同步
# max connections = 4           //最大連接數
# # exclude = lost+found/
# # transfer logging = yes
# # timeout = 900
# # ignore nonreadable = yes
# # dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
#
# # [ftp]
# # path = /home/ftp
# # comment = ftp export area
#
#
 [abc]                  //共享模塊名稱,兩臺服務器能夠不一樣
 path = /var/www/html   //共享模塊路徑,兩臺服務器能夠不一樣
 comment = www.yun.com  //模塊描述,兩臺服務器能夠不一樣  
 read only = no         //關閉只讀權限,不寫或者註釋爲默認選擇只讀
 write only = no        //關閉可寫權限,不寫或者註釋爲默認選擇不可寫
 uid = root             //指定模塊uid
 gid = root             //指定模塊gid
 hosts allow = *        //容許任意網段服務器訪問此模塊
 auth users=test        //模塊訪問驗證用戶名稱
 secrets file = /etc/rsyncd_users.db        //模塊驗證密碼文件,鍵值對形式
 dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2   //同步過程當中遇到此類文件不進行壓縮
  • 此處須要注意,上述配置文件中,備份服務器的配置須要和源服務器如出一轍,除了備份服務器的不然在源服務器上行文件時會報錯。尤爲是密碼文件權限和獨立密碼文件權限須要爲600,不然也會報錯。ide

  • 啓動服務

rsync --daemon 工具

  • 結束服務,kill進程便可。

4.一、建立帳戶驗證文件

  • 根據配置文件中,按需建立,注意文件路徑與名稱。

vim /etc/rsyncd_users.db測試

test:abc123     //"用戶名:密碼"的形式

chmod 600 /etc/rsyncd_users.db

  • 因爲這種形式在執行命令時須要交互式驗證,所以須要建立獨立密碼驗證文件。

4.二、建立獨立密碼文件

vim /etc/server.pass

abc123    //只含密碼的文件

chmod 600 /etc/server.pass

4.三、編寫觸發式同步腳本

vim /opt/ino.sh

#!/bin/bash
DESIP=192.168.144.120     //設置源服務器須要將文件上行(發送)到備份服務器IP地址
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/ test@$DESIP::abc/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -gt 0 ] ; then
        $RSYNC_CMD
    fi
done
  • 此處須要注意,在兩臺服務器須要同步的目錄之間,也須要將目錄權限放到最大,避免因目錄自己權限報錯。

chmod +x /opt/ino.sh

4.四、源服務器端測試

  • 執行腳本後,當前終端會變成實時監控界面,須要從新打開終端操做。
  • 在源服務器端共享模塊目錄下進行文件操做,而後去備份服務器下,可觀察到文件已經被實時同步。
相關文章
相關標籤/搜索