一、背景
两台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/ rsync@172.16.25.127::module_webB --password-file=/root/rsyncd.passwd
主机B 向 主机A 进行同步
rsync -vzrtopg --delete --progress /www/static/ rsync@172.16.25.126::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/ rsync@172.16.25.127::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/ rsync@172.16.25.126::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