背景介紹
中小企業的web應用場景中,web伺服器可能是由2台伺服器組成,通過DNS的輪詢作為負載均衡,此時就需要對2台伺服器之間同步的實時性有較高的要求,上一篇文章所介紹的rsync+crontab就不能滿足此需求,本章就來介紹使用rsync+inotify完成伺服器之間的實時同步
<a href="http://s4.51cto.com/wyfs02/M02/89/05/wKiom1gE4E2TjIvKAABwalFgaPY949.png" target="_blank"></a>
實驗說明
作業系統:CentOS6.8,inotify要求核心版本必須為2.6.13以上
源伺服器:172.16.10.20/24
目标伺服器:172.16.10.10/24
實驗目的:将源伺服器上的/rsync目錄内的内容實時同步到目标伺服器/rsync目錄下
其他事項:為避免安全機制帶來的幹擾,源和目标伺服器都關閉Selinux和iptables
實驗步驟
一、安裝rsyncd服務
1、伺服器端操作
(1)安裝xinetd超級守護程序
yum -y install xinetd
(2)将rsync設定為開機啟動
chkconfig rsync on
(3)建立rsync配置檔案填
vim /etc/rsyncd.conf 并填寫下列内容:
# global setting
log file = /var/log/rsyncd.log #設定log檔案位置
pid file = /var/run/rsyncd.pid #設定pid檔案位置
lock file = /var/run/rsyncd.lock #設定lock檔案位置
uid = rsync #設定啟動時以哪個使用者來代替root運作rsync
gid = rsync
list = no #不允許列出名單
chroot = no #不切換根目錄
timeout = 300 #設定逾時時間
ignore errors = yes #是否忽略錯誤
max connections = 10 #最大連接配接數
# module setting
[data] #設定子產品名稱
path = /rsync #指定子產品路徑
read only = no #是否可寫
write only = no #是否可讀
auth users = rsync_bak #建立允許連結該子產品的虛拟使用者
secrets file = /etc/rsyncd.passwd #賬戶密碼(rsync_bak)的存放檔案
strict modes = yes #檢查secrets file檔案的權限是否滿足要求
hosts allow = 172.16.10.20/32 #白名單
hosts deny = * #黑名單
(4)建立secrets file檔案,并修改其權限
vim /etc/rsyncd.passwd
<a href="http://s4.51cto.com/wyfs02/M02/89/02/wKioL1gE4E3yx_iRAAAFv9eVeM8621.png" target="_blank"></a>
chmod 600 /etc/rsyncdpasswd
(5)建立rsync系統使用者
useradd -s /sbin/nologin rsync
(6)建立需要同步的目錄并修改其屬主和屬組
mkdir /rsync
chown -R rsync:rsync /rsync
(7)啟動rsyncd服務,并檢視873端口是否正常偵聽
service xinetd start
netstat -ntl
2、用戶端操作
(1)檢視/etc/rsyncd.passwd是否收到,權限是否為600,再将檔案内rsync_bak使用者名删除掉,隻保留rsync_bak賬戶的密碼
<a href="http://s5.51cto.com/wyfs02/M00/89/05/wKiom1gE4E7QITHrAAADL24X0n0369.png" target="_blank"></a>
(2)再檢測rsyncd服務是否可以正常傳輸,至此rsyncd服務就搭建完成
<a href="http://s5.51cto.com/wyfs02/M00/89/02/wKioL1gE4E6DMabFAAAxLnTlk7w634.png" target="_blank"></a>
二、安裝inotify-tools
1、inotify-tools工作機制
inotify更像一個監控程序,它會監視指定的目錄或檔案,并篩選出資訊發生變化的内容,根據這個特性我們可以在rsync用戶端安裝inotify-tools并将其篩選出來的目錄或檔案作為輸入再通過rsync用戶端推送到rsync伺服器上以實作兩個伺服器之間的實時同步
2、安裝inotify-tools的2個先決條件
(1)安裝inotify-tools的機器核心版本必須是2.6.13及以上
(2)檢視機器核心是否支援inotify
<a href="http://s5.51cto.com/wyfs02/M00/89/05/wKiom1gE4E_RUfWqAAAmaSzTj4M050.png" target="_blank"></a>
3、安裝inotify-tools操作步驟
(1)從 http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz 下載下傳源碼并放到/usr/local/src目錄下
(2)解壓源碼包後進入目錄
tar -xf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
(3) ./configure --prefix=/usr/local/inotify #配置configure參數
(4)make && makeinstall #編譯安裝
(5)echo "PATH=/usr/local/inotify/bin:$PATH" >>/etc/profile.d/inotify.sh #添加PATH路徑
(6)source /etc/profile.d/inotify.sh #重讀下該檔案
(7)ln -sv /usr/local/inotify/include/ /usr/include/inotify #頭檔案輸出
(8)echo "/usr/local/inotify/lib" >> /etc/ld.so.conf.d/inotify.conf #庫檔案輸出
(9)使用ldconfig -v 檢視inotify庫是否已被加載
<a href="http://s5.51cto.com/wyfs02/M01/89/05/wKiom1gE4E_Q1Kf8AAAUk3R2FdA118.png" target="_blank"></a>
(10)使用vim /etc/man.config,将inotify的man文檔輸出
<a href="http://s5.51cto.com/wyfs02/M01/89/02/wKioL1gE4E_Qt6uRAAAnt65YQJM089.png" target="_blank"></a>
三、測試inotify的監視功能
1、通過tree可以看到inotify的核心就隻有2條指令,可以通過--help檢視
<a href="http://s5.51cto.com/wyfs02/M02/89/05/wKiom1gE4E_zdvevAAAfP0mYpF4927.png" target="_blank"></a>
2、mkdir /rsync #手動建立一個/rsync目錄用于inotify的監視
3、inotifywait -mqr --format '%w%f' -e create /rsync 讓inotify監視/rsync目錄的變化
-q quite隻輸出變化資訊
-m monitor監視
-r recursive遞歸
--format 指定格式類型
-e event真實的事件,後面接create,delete等,多個事件間用 , 分隔
4、新開一個終端,在/rsync下建立檔案或目錄看是否能夠被監視到
<a href="http://s4.51cto.com/wyfs02/M02/89/02/wKioL1gE4FDgZ0rSAAAVpNgXcmo238.png" target="_blank"></a>
<a href="http://s5.51cto.com/wyfs02/M01/89/05/wKiom1gE4cPhnelhAAAVpNgXcmo533.png" target="_blank"></a>
四、inotify結合rsync實作實時同步
1、建立存放腳本的目錄及腳本檔案
mkdir /etc/usr/local/inotify/script
vim /etc/usr/local/inotify/script/rsync.sh
2、填寫腳本内容
#!/bin/bash
rsyncSrc=/rsync
rsyncCommand=/usr/local/inotify/bin/inotifywait
$rsyncCommand -mrq --format '%w%f' -e close_write,delete,create $rsyncSrc \
| while read file;do
cd $rsyncSrc && rsync -az --delete --password-file=/etc/rsyncd.passwd ./ \
[email protected]::data > /dev/null 2>&1
done
或者下圖腳本也可以
<a href="http://s4.51cto.com/wyfs02/M00/89/06/wKioL1gFtLqRI67vAAA4IZBRnQ4880.png" target="_blank"></a>
注意:腳本中的./代表同步/rsync目錄中的内容而不包括/rsync目錄本身,和圖檔腳本紅框部分意義一樣,以目錄方式執行效率更高
3、給腳本執行權限
chmod +x /usr/local/inotify/script/rsync.sh
4、設定腳本開機自動啟動
vim /etc/rc.d/rc.local
sh /usr/local/inotify/script/rsync.sh &
:wq
本文轉自 qiao645 51CTO部落格,原文連結:http://blog.51cto.com/arkling/1862807