centos7中使用Rsync和inotify同步文件


 

 

一. 環境說明

由於web服務器所提供的網站數據需要保持一致,但當服務器越來越多時,這些主機之間同步網站數據會很麻煩。

解決方案是在后端建立一個數據發布服務器,該服務器作為rsync客戶端,通過inotify機制實時監控網站數據,當數據發生變化后調用rsync命令上傳數據到多個web服務器(也是rsync服務器)

我使用3台機器做的實驗

pc1的ip為192.168.0.230,作為web服務器1,也是rsync服務端,需要修改/etc/rsyncd.conf配置文件

pc2的ip為192.168.0.231,作為web服務器2,也是rsync服務端,需要修改/etc/rsyncd.conf配置文件

pc3的ip為192.168.0.240,作為數據發布服務器,是rsync的客戶端,不需要配置/etc/rsyncd.conf,但是需要安裝inotify

 

 

二. 在web服務器上部署rsync服務器

在多台web服務器上部署rsync服務,這些rsync服務需要提供客戶端上傳功能,以實現客戶端主機將數據推送到rsync服務器,這樣我們只需要在192.168.0.240主機上修改數據,就可以實時推送數據到兩台web服務器

pc1的配置如下

yum -y install rsync   #centos7中默認已安裝

mkdir -p /var/www/001    #建立數據同步存放目錄

chmod 770 /var/www/001    #修改權限,必須要有讀,寫,執行權限,否而會失敗。

chown nobody.nobody /var/www/001   #修改所屬

然后修改配置文件,vim /etc/rsyncd.conf    如下

transfer logging = yes

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

uid = nobody

gid = nobody

use chroot = no

ignore errors

read only = no

[web1]   #設置web1模塊

comment = web content

path = /var/www/001 #模塊web1的路徑

auth users = tom

secrets file = /etc/rsyncd.secrets

host allow = 192.168.0.240

hosts deny=*

list = false

 

然后設置密碼文件,防火牆

echo "tom:123" > /etc/rsyncd.secrets

chmod 600 /etc/rsyncd.secrets

rsync --daemon    #一定記得要開啟rsync

echo "rsync --daemon" >> /etc/rc.local

firewall-cmd --permanent --add-port=873/tcp    #rsync默認端口是873,設置防火牆永久允許

firewall-cmd --reload

 

pc2的配置和pc1一樣,為了容易區分,可在pc2上建立同步數據存放目錄/var/www/002

 

 

三。配置數據發布服務器(192.168.0.240)

1. 安裝相應軟件

yum -y install rsync

rsync --daemon  #開啟rsync

yum -y install automake libtool   #安裝編譯安裝軟件所需工具

wget http://downloads.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz        #下載inotify-tool軟件包

解壓后進入inotify-tools-3.13目錄,執行如下安裝

./configure      #默認安裝路徑是/usr/local,如果想改變路徑可在后面加參數 --prefix 路徑名

make && make install

 

2. 設置密碼文件

echo "123" > /root/rsync.pass   #名字可任意寫,123為rsync服務端配置的用戶名為tom的密碼

chmod 600 /root/rsync.pass

 

3. 編寫監控腳本

vim notify_rsync.sh

#!/bin/bash

export PATH=/bin:/usr/bin:/usr/local/bin

SRC=/web_data/   #設置修改數據的目錄

DEST1=web1  #pc1的模塊名

DEST2=web2  #pc2的模塊名

Client1=192.168.0.230

Client2=192.168.0.231

User=tom

Passfile=/root/rsync.pass

[ ! -e $Passfile ] && exit 2

#wait for change

inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w%f %e' \

--event modify,create,move,delete,attrib $SRC | while read line

do

echo "$line" > /var/log/inotify_web 2>&1

#同步數據到pc1,下面命令其實就是rsync -avz /web_data/ tom@192.168.0.230::web1,然后把輸出結果記錄在sync_web1中 

rsync -avz --delete --progress --password-file=$Passfile $SRC ${User}@$Client1::$DEST1 >> /var/log/sync_web1 2>&1

#同步數據到pc2

rsync -avz --delete --progress --password-file=$Passfile $SRC ${User}@$Client2::$DEST2 >> /var/log/sync_web2 2>&1 

done &

 

然后執行此腳本 sh notify_rsync.sh,之后在/web_data/目錄下的操作就可同步到web1和web2的相應同步目錄中了

 

注意,我還禁用了selinux,方法如下

1. 查看SELinux狀態:

/usr/sbin/sestatus -v      #如果SELinux status參數為enabled即為開啟狀態

getenforce                 #也可以用這個命令檢查

2. 關閉SELinux:

臨時關閉(不用重啟機器):

setenforce 0     #設置SELinux 成為permissive模式

setenforce 1     #設置SELinux 成為enforcing模式

3. 修改/etc/selinux/config 文件

將SELINUX=enforcing改為SELINUX=disabled

重啟機器即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM