天天看點

inotify + rsync實作web鏡像實時同步

一、環境:

節點名稱     用途              ip               網頁資料路徑

 web1       服務節點    119.147.146.248          /data/www

 web2       服務節點    119.147.146.249          /data/www

 web      内容釋出節點  119.147.146.246          /data/www

系統版本:centos5.6 64位

核心版本:2.6.18-238.el5

二、環境說明:

inotify-tools是用來監控檔案系統變化的工具,是以必須安裝在内容釋出節點上,服務節點不需要安裝,另外在web1、web2、web節點上都要安裝rsync,在這個環境中,web充當了rsync的用戶端角色,而兩給服務節點充當了rsync的伺服器端角色,整個同步的過程就是一個從用戶端向伺服器端發送資料的過程。

三、軟體安裝

1.web上安裝inotify

下載下傳:

wget http://sourceforge.net/projects/inotify-tools/files/inotify-tools/3.13/inotify-tools-3.13.tar.gz/download

# tar -zxvf inotify-tools-3.13.tar.gz

# cd inotify-tools-3.13

# ./configure

# make

# make install

2.web、web1和web2上安裝rsync

# tar -zxvf rsync_2.6.9.orig.tar.gz

# cd rsync-2.6.9/

# ./configure --prefix=/usr/local/rsync

三台安裝是一樣的

四、配置

1.在web1和web2上配置rsync

a. vi /etc/xinetd.d/rsync

将disable = yes 改為no,

b.建立rsyncd.conf

vi /etc/rsyncd.conf

web1的内容如下:

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

[web1]

path = /data/www/

comment = web1 file

ignore errors

read only = no

write only = no

hosts allow = 119.147.146.246

hosts deny = *

list = false

uid = root

gid = root

auth users = web1

secrets file = /etc/web1.pass

web2的内容如下:

[web2]

auth users = web2

secrets file = /etc/web2.pass

c.建立web1、web2的密碼檔案

vi /etc/web1.pass

vi /etc/web2.pass

内容格式:

使用者名:密碼,如:

web1:123456

d.web1、web2上配置好rsync後,依次啟動rsync守護程序,将rsync加入開機啟動檔案中

echo “/usr/local/rsync/bin/rsync --daemon” >> /etc/rc.loacl

2.配置web節點

a.編寫shell腳本

vi inotifyrsync.sh

#!/bin/bash

host1=119.147.146.248

host2=119.147.146.249

src=/data/www/

dst1=web1

dst2=web2

user1=web1

user2=web2

/usr/local/bin/inotifywart -mrq --timefmt `%d/%m/%y %h:%m` --format `%t %w%f%e` -e modify,delte,create,attrib $src \

| while read files

        do

        /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/web1.pass

            pass $src $user1@$host1::$dst1

        /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/web2.pass 

            pass $src $user2@$host2::$dst2

                echo "${files} was rsynced" >> /tmp/rsync.log 2 >&1

        done

b.在/etc目錄下建立web1.pass和web2.pass密碼檔案,内容分别是web1和web2使用者的密碼,更改這兩個檔案的權限為600

c.把inotifyrsync.sh放到/data/www目錄下,放到背景用行:

# chmod 755 /data/www/inotifyrsync.sh 

# /data/www/inotifyrsync.sh &

d.最後将此腳本加入開機啟動檔案中

echo “/data/www/inotifyrsync.sh &” >> /etc/rc.local

五、測試:

在web節點/data/www目錄下添加、删除或者修改檔案,然後到web1、web2對應目錄下檢視檔案是否随着web中/data/www目錄下檔案的變化而變化,如果是那邊就配置成功了。

<code>如果出現這個錯誤“/usr/local/bin/inotifywait: error while loading shared libraries: libinotifytools.so.0”可以采用以下辦法解決:</code>

<code>ln -sv /usr/local/lib/libinotify* /usr/lib/ ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0 cp /usr/lib/libinotifytools.so.0 /usr/local/lib/</code>