Linux篇(六)------Centos7.0下使用rsync+inotify实现文件双向实时同步

一、背景

两台centos7 服务器,主机A上搭建了nginx服务,实现了两台服务器直接的负载均衡,现在需要将两台服务器之间的文件进行同步,即保障两台服务器上文件一致。

主机 类型 安装软件 共享目录路径
主机A:172.16.25.126 web服务器、nginx服务器 rsync+inotify www/static
主机B:172.16.25.127 web服务器 rsync+inotify www/static

二、rsync软件的下载与安装

rsync安装有两种方式,一种是yum在线,一种是离线安装

2.1、rsync下载

1、yum方式:

yum install -y rsync

2、源码方式:(官网:http://rsync.samba.org/)

#进入user/local目录

cd /usr/local   

#下载rsync源码包(本地上传也行)

wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz

#解压压缩包

tar -zxvf rsync-3.1.2.tar.gz

#删除压缩包

rm -rf rsync-3.1.2.tar.gz

#进入解压文件目录

cd rsync-3.1.2

#安装到指定目录下

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

make

make install

2.2、建立rsync密码认证文件

两台主机的rsync用户名和密码建议配置一样,方便配置且不容易搞错

1、yum方式:

vi /etc/rsyncd.passwd     #内容格式 用户名:密码            rsync:123456
vi /root/rsyncd.passwd    #内容格式 密码                  123456

2、源码方式:

 vi /usr/local/rsync/rsyncd.passwd     #内容格式 用户名:密码            rsync:123456
  vi /root/rsyncd.passwd               #内容格式 密码                  123456

2.3、配置rsync

编辑rsync配置文件

1、yum方式:

  vi /etc/rsyncd.conf

2、源码方式:

 vi /usr/local/rsync/rsyncd.conf

rsyncd.conf配置文件内容

uid = root
gid = root
use chroot = 0
#post rsync使用的端口号
port = 873
#允许A主机的ip访问,这里我直接配置为全网段,同理在主机B上,这里要配置位主机A的ip
# hosts allow = 172.16.25.127
hosts allow = *
max connections = 0
timeout = 300
pid file = /var/run/rsyncd.pid
ock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
log format = %t %a %m %f %b
transfer logging = yes
syslog facility = local3
#方括号中为模块声明,对应命名,这里module_webA对应主机A的配置,配置主机B的时候,可以输入module_webB
[module_webA]
#指定当前模块在rsync服务器上的同步路径
path = /www/static/
#注释,可以同模块名一样 ,,配置主机B的时候,可以输入module_webB
comment = module_webA
ignore errors
#是否允许客户端上传文件
read only = no
list = no
#指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块
auth users = rsync
#保存密码和用户名文件,需要自己生成;这里需要根据自己rsync配置方式来选择,如果是yum方式,则选择 /etc/rsyncd.passwd,如果是源码包的方式则选择/usr/local/rsync/rsyncd.passwd
secrets file = /etc/rsyncd.passwd
#secrets file = /usr/local/rsync/rsyncd.passwd

2.4、rsync密码文件赋600权限

1、yum方式:

chmod 600 /etc/rsyncd.passwd

chmod 600 /root/rsyncd.passwd

2、源码方式:

chmod 600 /usr/local/rsync/rsyncd.passwd

chmod 600 /root/rsyncd.passwd

2.5、运行rsync,并且开机启动

1、yum方式:

#以守护进程方式启动rsync服务
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
#开机启动
echo "/usr/bin/rsync --daemon --config=/etc/rsyncd.conf">>/etc/rc.local

2、源码方式:

#以守护进程方式启动rsync服务
/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf
#开机启动
echo "  /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf ">>/etc/rc.local

2.6、验证rsync是否配置成功

主机A 向 主机B 进行同步

rsync -vzrtopg --delete --progress /www/static/ [email protected]::module_webB --password-file=/root/rsyncd.passwd

主机B 向 主机A 进行同步

rsync -vzrtopg --delete --progress /www/static/ [email protected]::module_webA --password-file=/root/rsyncd.passwd

三、inotify软件的下载与安装

3.1、inotify下载

#进入user/local目录

cd /usr/local   

#下载inotify压缩包

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz --no-check-certificate
tar -zxvf inotify-tools-3.14.tar.gz

#进入user/local/inotify-tools-3.14目录

cd inotify-tools-3.14

#安装inotify

 ./configure --prefix=/usr/local/inotify
  make && make install

#查看是否安装成功

ls -alh /usr/local/inotify/bin/inotify*

#建立软连接

ln -s /usr/local/inotify/bin/inotifywait /usr/bin/inotifywait

ln -s /usr/local/inotify/bin/inotifywatch /usr/bin/inotifywatch

3.2、配置inotify_back.sh同步监控脚本

inotify已经安装好了,需要写一段脚本来自动监控两台服务器文件

 vi /usr/local/inotify/inotify_back.sh

#172.16.25.126 主机A配置文件内容:

#!/bin/bash

src=/www/static/

 /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read file

do

rsync -vzrtopg --delete --progress /www/static/ [email protected]::module_webB --password-file=/root/rsyncd.passwd

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

done

#172.16.25.1267主机B配置文件内容:

#!/bin/bash

src=/www/static/

 /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read file

do

rsync -vzrtopg --delete --progress /www/static/ [email protected]::module_webA --password-file=/root/rsyncd.passwd

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

done

3.3、给inotify_back.sh脚本赋可执行权限

cd /usr/local/inotify/

chmod +x inotify_back.sh

3.4、后台自动运行,并且开机自动启动

运行这个脚本

nohup  /usr/local/inotify/inotify_back.sh &

开机自动启动

echo "nohup  /usr/local/inotify/inotify_back.sh &" >> /etc/rc.local

3.5、重启服务器服务没有自动启动

前面我们已经配置rsync自动启动服务,和inotify自动启动脚本

echo "  /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf ">>/etc/rc.local

echo "nohup  /usr/local/inotify/inotify_back.sh &" >> /etc/rc.local
vi /etc/rc.local 

发现文件里面有下面两行代码

/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf
nohup  /usr/local/inotify/inotify_back.sh &

但是我重启服务器发现,rsync服务没有自动重启。

原因:查看rc.local,会发现这只是一个软连接,真实的文件是/etc/rc.d/rc.local ,并且在文件中有一行注释:

#Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure

由于/etc/rc.local是/etc/rc.d/rc.local的软连接,所以必须确保/etc/rc.local和/etc/rc.d/rc.local都有x权限(可执行)

所以还需要执行命令

chmod +x /etc/rc.d/rc.local

最后重启服务器,发现成功!

四、重启rsync服务

4.1、查看rsync进程

ps -ef | grep rsync

如果启动,会显示如下
root     XXX     1  0 ?        00:00:00 /usr/bin/rsync --daemon --config=/etc/rsyncd.conf

4.2、关闭rsync服务

kill -9 XXX

4.2、重启rsync服务

/usr/bin/rsync --daemon --config=/etc/rsyncd.conf

执行一般会报错:提示

failed to create pid file /var/run/rsyncd.pid: File exists
#删除再执行
rm -rf /var/run/rsyncd.pid

/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
发布了166 篇原创文章 · 获赞 212 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/qq_29914837/article/details/100584081