1. 程式人生 > >超詳細CentOS6.5配置rsync+inotify實現同步

超詳細CentOS6.5配置rsync+inotify實現同步

touch iptables cront address mon ges 應對 ret rect

rsync

rsync是一個開源的快速備份工具,可以在不同主機之間鏡像同步整個目錄樹,支持增量備份,保持鏈接和權限,且采用優化的同步算法,傳輸前執行壓縮,因此非常適用於異地備份、鏡像服務器等應用

下行同步

技術分享圖片
在遠程同步任務中,負責發起rsync同步操作的客戶機稱為發起端
而負責響應來自客戶機的rsync同步操作的服務器稱為同步源
在同步過程中,同步源負責提供文檔的原始位置,發起端應對該位置具有讀取權限

inotify

技術分享圖片
inotify是一個Linux特性,它監控文件系統操作,比如讀取、寫入和創建。inotify反應靈敏,用法非常簡單,並且比cron任務的繁忙輪詢高效得多。將rsync工具與inotify機制相結合,可以實現實時同步,只要原始位置發生變化,就立即啟動增量備份操作,否則處於靜默等待狀態,這樣避免了按固定周期備份時存在的延時性、周期過密性等問題

實驗環境

  • 系統環境:centos6.5
  • 同步源IP:192.168.100.96/24
  • 同步源主機名:redhat6_4
  • 發起端IP:192.168.100.97/24
  • 發起端主機名:redhat6_5
  • 共享模塊站點:/var/www/html

搭建步驟:

一、準備工作

1、同步源端、發起關閉防火墻、Selinux

[root@redhat6_4 ~]# vim /etc/sysconfig/selinux
技術分享圖片

[root@redhat6_4 ~]# chkconfig iptables off #開機啟動關閉防火墻
技術分享圖片

二、配置同步源服務器

1、建立並編輯主配置文件

[root@redhat6_4 ~]# rpm -qa | grep ‘rsync‘


技術分享圖片

[root@redhat6_4 html]# vim /etc/rsyncd.conf #centos6中,配置文件需要手工建立,但是在centos7中系統事先已經建立

全局配置

uid = nobody #指定執行用戶(系統偽用戶)
gid = nobody #指定用戶組
use chroot = yes #將用戶禁錮在當前目錄下(源目錄)
address = 192.168.100.96 #服務器監聽地址
port 873 #服務端口
log file = /var/log/rsyncd.log #日誌存放位置

pid file = /var/run/rsyncd.pid #進程ID文件存放位置
host allow = 192.168.100.0/24 #允許訪問的客戶端地址

模塊定義

[page] #共享模塊名稱
path = /var/www/html #共享目錄的實際路徑
conmment = This is the site directory of a site #描述信息
read only = yes #是否為只讀文件,yes代表只讀,反之可以寫,這裏暫時制作備份,定義"yes"即可
dont compress = .gz .bz2 .tgz .zip .rar .z #同步時不再壓縮的文件類型
auth users = rcuser #指定授權賬戶,如果多個用戶以空格進行分割,此用戶不是系統用戶,只是指定一個專門進行的備份的一個賬戶而已
secrets file = /etc/rsyncd_users.db #存放賬戶信息的數據文件

2、建立並編輯賬戶數據文件

[root@redhat6_4 ~]# vim /etc/rsyncd_users.db
技術分享圖片
[root@redhat6_4 ~]# chmod 600 /etc/rsyncd_users.db #修改權限,這裏必須改,否則客戶端遠程同步會報錯,認證有問題,親測!!!

3、同步源安裝httpd並寫入測試文件

[root@redhat6_4 ~]# yum -y install httpd
[root@redhat6_4 ~]# /etc/init.d/httpd start
[root@redhat6_4 ~]# cd /var/www/html/
[root@redhat6_4 html]# rm -rf *
[root@redhat6_4 html]# echo "<h1>hello world </h1>" > index.html
[root@redhat6_4 html]# chmod 777 /var/www/html/ #修改權限最大化,方便測試

4、啟動rsync服務

[root@redhat6_4 ~]# rsync --daemon
[root@redhat6_4 ~]# netstat -anpt | grep ":873"

技術分享圖片

三、發起端使用rsync備份工具進行下行同步

1、使用rsync命令實現下行同步

[root@redhat6_5 ~]# rsync -avz [email protected]::page /root/ #訪問同步源模塊page,下載到本地/root目錄下進行備份

參數解析:

-r:遞歸模式,包含目錄及子目錄中的所有文件
-l:對於符號鏈接文件仍然復制為符號鏈接文件(軟鏈接)
-v:顯示同步過程的詳細(verbose)信息
-a:歸檔模式,保留文件的權限、屬性等信息,等同於組合選項"-rlptgoD"
-z:在傳輸文件時進行壓縮(compress)
-p:保留文件的權限標記
-t:保留文件的時間標記
-g:保留文件的屬組標記(僅超級用戶使用)
-o:保留文件的屬主標記(僅超級用戶使用)
-H:保留硬連接文件
-A:保留ACL屬性信息
-D:保留設備文件及其他特殊文件
--delete:刪除目標位置有而原始位置沒有的文件
--checksum:根據校驗和(而不是文件大小、修改時間)來決定是否跳過文件

技術分享圖片

[root@redhat6_5 ~]# mkdir /opt/pub 
[root@redhat6_5 ~]# rsync -avz rsync://[email protected]/page /opt/pub/ #再次請求同步源服務將頁面備份到/opt/pub/下

技術分享圖片

2、刪除同步源服務器共享模塊文件測試

[root@redhat6_4 ~]# cd /var/www/html/
[root@redhat6_4 html]# rm -rf *
[root@redhat6_4 html]# echo "123" > file1#寫入測試文件
[root@redhat6_4 html]# echo "456" > file2

3、發起端再次發起下行同步

[root@redhat6_5 ~]# rsync -avzH --delete [email protected]::page /opt/pub/
技術分享圖片

4、引入周期性計劃任務,通過免密訪問進行同步管理

[root@redhat6_5 ~]# vim /etc/server.pass #創建用戶密碼文件
技術分享圖片

[root@redhat6_5 ~]# chmod 600 /etc/server.pass #密碼文件權限最小化,否則報錯
[root@redhat6_5 ~]# crontab -e

技術分享圖片

[root@redhat6_5 ~]# /etc/init.d/crond restart
[root@redhat6_5 ~]# chkconfig crond on

四、配置rsync+inotify實時同步

1、調整inotify內核參數

[root@redhat6_5 ~]# vim /etc/sysctl.conf

添加以下參數

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

[root@redhat6_5 ~]# sysctl -p #重新刷新文件

2、安裝inotify-tools

[root@redhat6_5 ~]# yum -y install gcc gcc-c++ #安裝編譯器
[root@redhat6_5 ~]# tar xvfz inotify-tools-3.14.tar.gz  #解壓
[root@redhat6_5 ~]# cd inotify-tools-3.14 
[root@redhat6_5 inotify-tools-3.14]# ./configure #配置
[root@redhat6_5 inotify-tools-3.14]# make && make install #編譯及編譯安裝

3、使用inotifywait命令進行監控測試

[root@redhat6_5 ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html #對本地網站目錄進行遞歸式實時監控,監控的事件包括修改、創建、移動、刪除……

-m:持續的進行監控
-r:遞歸整個目錄
-q:簡化
-e:指定監控的事件
modify:修改
create:創建
move:移動
delete:刪除
attrib:屬性更改
/var/www/html:對此目錄進行監控

4、對網站目錄內容進行增、刪、改、移

技術分享圖片

[root@redhat6_5 ~]# cd /var/www/html/ 
[root@redhat6_5 html]# touch abc.txt          #創建測試文件
[root@redhat6_5 html]# echo "12345" > abc.txt #修改測試文件內容
[root@redhat6_5 html]# mv abc.txt fgh.txt     #修改測試文件名稱
[root@redhat6_5 html]# rm -rf fgh.txt         #刪除測試文件

5、查看監控信息

技術分享圖片

6、編寫觸發式同步腳本(將本地站點文件上行源端)

[root@redhat6_5 ~]# vim inotify_rsync.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]::page/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done

解析腳本:

①.INOTIFY_CMD:執行實時監控
②.RSYNC_CMD:將本地網站目錄上行到源端
③.DIRECTORY EVENT FILE指動態監控的信息賦予給這三個變量變量
DIRECTORY :目錄,輸出的是/var/www/html
EVENT :發生事件,輸出的是如create、modify、move……
FILE:文件的名稱,輸出的是修改、新建的文件名稱
④.循環判斷此時此刻rsync是否在運行,如果沒有,將本地網站目錄上行至源端

[root@redhat6_5 ~]# chmod +x inotify_rsync.sh  #添加執行權限
[root@redhat6_5 ~]# echo ‘/root/inotify_rsync.sh‘ >> /etc/rc.local #將輸出追加至/etc/rc.local中

7、修改同步源配置文件

[root@redhat6_4 ~]# vim /etc/rsyncd.conf
技術分享圖片

[root@redhat6_4 run]# kill -9 $(cat /var/run/rsyncd.pid) #殺死rsync進程
[root@redhat6_4 run]# rm -rf /var/run/rsyncd.pid         #必須刪除進程文件,再次啟動,系統自動生成
[root@redhat6_4 ~]# rsync --daemon                       #啟動rsync

[root@redhat6_4 ~]# ll -d /var/www/html/ #查看站點權限

技術分享圖片

[root@redhat6_4 ~]# chown nobody:nobody /var/www/html/ #修改所有者、所屬組為nobody系統進程進程用戶

[root@redhat6_4 ~]# cd /var/www/html/
[root@redhat6_4 html]# rm -rf *  #刪除站點目錄下的所有文件,方便測試

8、發起端運行同步腳本測試

[root@redhat6_5 ~]# chmod 777 /var/www/html/ #發起端修改權限,設置為最大化
[root@redhat6_5 html]# chown nobody:nobody /var/www/html/ #修改所有者、所屬組為nobody系統進程進程用戶

[root@redhat6_5 ~]# cd /var/www/html/
[root@redhat6_5 html]# rm -rf *      #清空文件方便測試

[root@redhat6_5 ~]# sh -x inotify_rsync.sh  #執行同步腳本

技術分享圖片

[root@redhat6_5 html]# echo "this is test html" &gt; /var/www/html/index.html #創建測試頁面
技術分享圖片

9、同步源查看同步結果

[root@redhat6_4 ~]# cat /var/www/html/index.html

技術分享圖片

超詳細CentOS6.5配置rsync+inotify實現同步