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

  1. 设置密码文件

echo “123” > /root/rsync.pass #名字可任意写,123为rsync服务端配置的用户名为tom的密码

chmod 600 /root/rsync.pass

  1. 编写监控脚本

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 P a s s f i l e SRC User@ U s e r @ Client1::$DEST1 >> /var/log/sync_web1 2>&1

同步数据到pc2

rsync -avz –delete –progress –password-file= Passfile P a s s f i l e SRC User@ U s e r @ 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 #也可以用这个命令检查

  1. 关闭SELinux:

临时关闭(不用重启机器):

setenforce 0 #设置SELinux 成为permissive模式

setenforce 1 #设置SELinux 成为enforcing模式

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

将SELINUX=enforcing改为SELINUX=disabled

重启机器即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值