rsync+inotify實現多臺web數據動態同步

 

  • 背景:因爲無存儲共享設備,web集羣中的代碼均存放在本地,最終致使web節點之間的數據沒法一致。
  • 解決辦法:採用rsync+inotify,實現多臺web數據動態同步
  • 解決思路:好比有a、b、c、d四臺web,爲解決哪臺服務器爲源數據服務器,咱們在A服務器上安裝rsync+inotify,而後將一個二級域名指向A服務器,這樣之後網站編輯、開發人員之間訪問二級域名進行平常網站更新,A服務器在檢測到本地有數據更新時,便動態(觸發式)向其它服務器發送更新數據。
  • 注意:必定要使用rsync相同的版本,不然會出現未知錯誤。
  • 選擇rsync+inotify的理由:在常規的數據同步應用案例中,大多數人會選擇使用rsync來完成數據同步,選擇rsync+inotify的理由以下

 

   一、服務器性能:rsync只能實現定時更新,不管網站有無文件更新,rsync都會按着定時任務去檢查文件是否有更新,當數據文件較大時會使服務器性能降低;而rsync+inotify
爲觸發式更新,也就是說只有當某個文件發生改動時纔會更新,這樣一來對服務器性能影響較小。
   二、數據實時性:若是選擇rsync,每隔多長時間同步一次數據是個問題,時間越短,對性能影響就越大。時間太長,用戶/編輯沒法接受。採用rsync+inotify可實現實時更新,
當A服務器文件有更新時,其它服務器當即更新
  • 環境拓撲

 

A:192.168.1.101
B:192.168.1.102
C:192.168.1.103
D:192.168.1.104
注:數據源服務器爲A,目標服務器爲B、C、D
  • 1、目標服務器安裝rsync (在B、C、D服務器上操做,安裝配置均同樣)
  • 安裝rsync 下載地址: http://rsync.samba.org/

 

cd /data/software
wget https://rsync.samba.org/ftp/rsync/rsync-3.0.9.tar.gz
tar zxvf rsync-3.0.9.tar.gz
cd rsync-3.0.9
./configure
make
make install
  • 安裝完成後顯示信息

 

mkdir -p /usr/local/bin
/usr/bin/install -c  -m 755 rsync /usr/local/bin
mkdir -p /usr/local/share/man/man1
mkdir -p /usr/local/share/man/man5
if test -f rsync.1; then /usr/bin/install -c -m 644 rsync.1 /usr/local/share/man/man1; fi
if test -f rsyncd.conf.5; then /usr/bin/install -c -m 644 rsyncd.conf.5 /usr/local/share/man/man5; fi
  • 配置rsync
  • #vi /etc/rsync.conf 加入以下內容

 

uid = root
gid = root
use chroot = no
max connections = 20
strict modes = yes
log file = /data/logs/rsyncd/rsyncd.log
pid file = /data/logs/rsyncd/rsyncd.pid
lock file = /data/logs/rsyncd/rsync.lock
log format = %t %a %m %f %b
[web]
path = /data/vhosts/it121net/
auth users = username
read only = no
hosts allow = 192.168.1.0/24  #能夠是IP段,也能夠是IP地址
list = no
uid = root
gid = root
secrets file = /etc/rsync.passwd
ignore errors = yes
  • 建立目錄,用於存放日誌。

 

mkdir /data/logs/rsyncd
  • 建立認證
  • #vi /etc/rsync.passwd

 

username:passwd
  • #chmod 600 /etc/rsync.passwd
  • 啓動rsync,啓動後使用netstat查看,會發現系統已啓動873端口

 

# rsync --daemon --config=/etc/rsync.conf  
  • 加入開機啓動

 

# echo "rsync --daemon --config=/etc/rsync.conf" >>/etc/rc.local
  • 關閉

 

killall rsync 
  • 2、源服務器安裝rsync+inotify (在a服務器上操做)
  • 安裝rsync(僅安裝便可,不需配置)

 

cd /data/software
wget https://rsync.samba.org/ftp/rsync/rsync-3.0.9.tar.gz
tar zxvf rsync-3.0.9.tar.gz
cd rsync-3.0.9
./configure
make
make install

 

cd /data/software
wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure 
make 
make install
  • 建立啓動腳本
  • #vi /etc/rsync-web.sh 加入以下內容

 

#!/bin/sh
SRC=/data/vhosts/it121net/
DES=web
WEB2=192.168.1.102
WEB3=192.168.1.103
WEB4=192.168.1.104
USER=username
/usr/local/bin/inotifywait -mrq -e create,move,delete,modify $SRC | while read D E F
        do
rsync -ahqzt --password-file=/etc/rsync-client.passwd  --delete $SRC $USER@$WEB2::$DES
rsync -ahqzt --password-file=/etc/rsync-client.passwd  --delete $SRC $USER@$WEB3::$DES
rsync -ahqzt --password-file=/etc/rsync-client.passwd  --delete $SRC $USER@$WEB4::$DES
        done
#注意:網絡上面大部分都是顯示一箇中槓,多是編碼的事情,實際是應該是兩個槓。
  • 增長權限

 

#chmod +x /etc/rsync-web.sh
  • 啓動腳本

 

#nohup /etc/rsync-web.sh &       //必須使用nohup放入後臺執行,不然關閉終端後此腳本進程會自動結束
/etc/rsync-web.sh & 
  • 關閉腳本

 

sudo pkill rsync
sudo pkill inotifywait
  • @ERROR: chdir failed rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]解決辦法

 

setsebool -P rsync_disable_trans on
  • rsync安裝路徑(注意查看)

 

/usr/bin/rsync
/usr/local/bin/rsync
/etc/xinetd.d/rsync

轉載http://wiki.it121.net/linux/inotifylinux

相關文章
相關標籤/搜索