使用rsync+inotify作雙機實時互備

 

1.. 背景(本人表達能力有限)
環境描述,有兩臺 nginx+php web 服務器,前臺爲 haproxy ,用來實現雙機負載均衡(這裏不描述 haproxy 的安裝使用)
Web1    192.168.0.128  (網站目錄 /web
Web2    192.168.0.129  (網站目錄 /web
Haproxy 192.168.0.130
如今出現的問題是,用戶訪問網站上傳資料的時候,有多是上傳到 web1 ,也有多是上傳到 web2 ,須要網站雙機實時互相備份。
設計思想以下:
Web1 web2 上面都創建虛擬目錄 , 虛擬目錄裏面放置兩個文件, check.php check.txt ,每訪問一次 check.php check.txt 的內容就會更新一次
使用 inotify 監聽 web1 的網站目錄,若是發生變化就使用 curl 訪問 web2 上面的 check.php web2 上面使用 inotify 監聽 check.txt ,若是發生變化就從 web1 上面下載更新網站目錄。
同理 inotify 監聽 web2 的網站目錄,若是發生變化就使用 curl 訪問 web1 上面的 check.php
Web1 上面使用 inotify 監聽 check.txt ,若是發生變化就從 web2 上面下載更新網站目錄。
2. 配置
安裝 rsync inotify, 因爲安裝很是簡單,這裏不在講述。
Web1 配置
############################
#vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
 
[www]
path = /web
comment = web1 file
ignore errors
read only = no
write only = no
hosts allow = 192.168.0.129
hosts deny = *
list = false
uid = root
gid = root
auth users = user
secrets file = /etc/server.pwd
##################
服務端密碼文件(供 web2 訪問使用)
#vim /etc/server.pwd
user:user
#chmod 600 /etc/server.pwd
#rsync –daemon
rsync 服務加入到自啓動文件中:
echo 「/usr/local/bin/rsync --daemon」 >>/etc/rc.local
##########################################
客戶端密碼文件(訪問 web2 使用)
#vim /etc/rsync.pas
user
#chmod 600 /etc/rsync.pas
#############################
觸發腳本(觸發 web2 ,讓 web2 從本機同步更新)
#!/bin/bash
src=/web/
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,create,attrib $src | while read files
        do
       curl "192.168.0.129/check.php"
         done
腳本意思是若是 /web 目錄變化,就經過 curl 訪問 192.168.0.129/check.php
########################
同步腳本(從 web2 更新數據)
#!/bin/bash
host=192.168.0.129
localsrc=/var/www/
src=/web/
dst=www
user=user
 
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $localsrc | while read files
        do
        /usr/local/rsync/bin/rsync -avzP --progress $user@$host::$dst $src --password-file=/etc/rsync.pas
         Done
腳本的意思是若是 /var/www 發生變化就更新 /web 內容
Web2 設置
############################
#vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
 
[www]
path = /web
comment = web2 file
ignore errors
read only = no
write only = no
hosts allow = 192.168.0.128
hosts deny = *
list = false
uid = root
gid = root
auth users = user
secrets file = /etc/server.pwd
##################
服務端密碼文件(供 web1 訪問使用)
#vim /etc/server.pwd
user:user
#chmod 600 /etc/server.pwd
#rsync –daemon
rsync 服務加入到自啓動文件中:
echo 「/usr/local/bin/rsync --daemon」 >>/etc/rc.local
##########################################
客戶端密碼文件(訪問 web1 使用)
#vim /etc/rsync.pas
user
#chmod 600 /etc/rsync.pas
#############################
觸發腳本(觸發 web1 ,讓 web1 從本機同步更新)
#!/bin/bash
src=/web/
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,create,attrib $src | while read files
        do
       curl "192.168.0.128/check.php"
         done
腳本意思是若是 /web 目錄變化,就經過 curl 訪問 192.168.0.128/check.php
########################
同步腳本(從 web1 更新數據)
#!/bin/bash
host=192.168.0.128
localsrc=/var/www/
src=/web/
dst=www
user=user
 
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $localsrc | while read files
        do
        /usr/local/rsync/bin/rsync -avzP --progress $user@$host::$dst $src --password-file=/etc/rsync.pas
         done
腳本的意思是若是 /var/www 發生變化就更新 /web 內容
3 ,虛擬主機的目錄爲 /var/www ( 兩邊都同樣,虛擬主機怎麼設置,這裏不作說明 )
#cd /var/www
#ll
-rw-r--r-- 1 root root 62 06-20 04:12 check.php
-rwxr-xrwx 1 root root 10 06-21 06:52 check.txt
#cat check.php
<?php
file_put_contents("check.txt", time("Y-m-d H:i:s"));
?>
############
Inotify rsync 的參數能夠查看 man 文件
相關文章
相關標籤/搜索