1. 程式人生 > >配置rsync+inotify實現站點文件實時同步

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

rep ron 文件實時同步 .tar.gz exp area 調整 資源 centos

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

二、使用rsync備份工具

2.1、rsync命令的基本用法

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

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

常用命令格式及備份選項:
-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 [email protected]::abc /root
或者
[root@localhost~]# rsync -avz rsync://[email protected]/abc /root

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

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

crontab -e
30 22 * * * /usr/bin/rsync --delete --password-file=/etc/server.pass [email protected]::abc /opt   //每天22:30執行腳本
servevice crond restart
chkconfig crond on

三、配置rsync+inotify實時同步

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

  • 查看內核版本

uname -r

1、系統環境

主機 操作系統 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

2、軟件安裝

rpm -q rsync //查詢rsync是否安裝,一般為系統自帶安裝
yum install rsync -y //若沒有安裝,使用yum安裝

  • 安裝inotify軟件包

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

3、調整inotify內核參數

vim /etc/sysctl.conf

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

4、配置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,否則也會報錯。

  • 啟動服務

rsync --daemon

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

4.1、創建賬戶驗證文件

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

vim /etc/rsyncd_users.db

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

chmod 600 /etc/rsyncd_users.db

  • 由於這種形式在執行命令時需要交互式驗證,因此需要創建獨立密碼驗證文件。

4.2、創建獨立密碼文件

vim /etc/server.pass

abc123    //只含密碼的文件

chmod 600 /etc/server.pass

4.3、編寫觸發式同步腳本

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.4、源服務器端測試

  • 執行腳本後,當前終端會變成實時監控界面,需要重新打開終端操作。
  • 在源服務器端共享模塊目錄下進行文件操作,然後去備份服務器下,可觀察到文件已經被實時同步。

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