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
文件