rsync+sersync实时同步
废话我也不多说了,走了很多坑,直接说搭建流程。。。
目标服务器:10.0.3.11
源服务器:10.0.3.10
最终目的:将 源服务器 指定目录下的文件或目录 拷贝到 目标服务器指定目录下
目标服务器操作步骤
安装rsync
yum install rsync -y
修改rsyncd.conf配置文件
# 设置rsync运行权限为rsync uid = root gid = root # 监听ip address = 10.0.3.11 # rsync默认端口 port = 873 # 允许同步客户端的IP地址,可以是网段,或者用*表示所有 192.168.1.0/24或192.168.1.0/255.255.255.0,多个网段用空格隔开 hosts allow = * # 是否囚牢,锁定家目录,rsync被黑之后,黑客无法再rsync运行的家目录之外创建文件,选项设置为yes use chroot = yes # 最大连接数 max connections = 5 # 进程id,自动生成 pid file = /var/run/rsyncd.pid # 指定max connetctions参数的锁文件 lock file = /var/run/rsync.lock # 日志文件 log file = /var/log/rsync.log # 客户端登陆后所显示提示信息的保存文件 motd file = /etc/rsyncd.motd # 等待超时时间 timeout = 100 # 共享(同步)模块名称 [test] # 路径 path = /home/www/ # 描述说明 comment = used for web-data backup # 设置文件读写权限,false为可读写,ture为只读 read only = false # 是否容许查看模块信息 list = yes # 备份使用的用户名,和系统用户无关 auth users = root # 存放备份用户信息的文件,格式为: 用户名:密码 secrets file = /etc/rsync.passwd #不同步的目录 #exclude =
注意:uid、gid所填用户与运行rsync服务的用户一致!当然为了偷懒,auth users 也可以成一致的, 🤭嘻嘻嘻...
其中secrets file的文件权限设置为 600以及它里面的格式设置为 用户:密码 ,比如 root:123456
源服务器操作步骤
查看服务器内核是否支持inotify
ll /proc/sys/fs/inotify #列出文件目录,出现下面的内容,说明服务器内核支持inotify
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_queued_events
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_instances
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_watches
备注:Linux下支持inotify的内核最小为2.6.13,可以输入命令:uname -a查看内核
CentOS 5.X 内核为2.6.18,默认已经支持inotify
修改inotify默认参数
修改参数:
sysctl -w fs.inotify.max_queued_events="99999999"
sysctl -w fs.inotify.max_user_watches="99999999"
sysctl -w fs.inotify.max_user_instances="65535"
vi /etc/sysctl.conf #添加以下代码
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
:wq! #保存退出
参数说明:
max_queued_events:
inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
max_user_watches:
要同步的文件包含多少目录,可以用:find /home/www -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/home/www为同步文件目录)
max_user_instances:
每个用户创建inotify实例最大值
创建密码认证文件
vi /etc/rsync.passwd 123456 :wq! chmod 600 /etc/rsync.pass #设置文件权限
测试数据同步
# 安装rsync测试
yum install rsync -y
rsync -avz --delete --password-file=/etc/rsync.passwd /home/www/ root@10.0.3.11::test #测试同步文件
--/home/www/ #同步目录
--10.0.3.11 #目标服务器,安装并配置完毕rsync
--test #模块自定义名称,即目标服务器的rsync配置文件中配置的
脚本守护sersync
![](https://images2018.cnblogs.com/blog/1410227/201809/1410227-20180910173217034-932449446.png)
安装sersync工具
cd /usr/local/src
wget https://sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz
tar zxvf sersync2.5_32bit_binary_stable_final.tar.gz
mv /usr/local/src/GNU-Linux-x86/ /usr/local/sersync/
vi /usr/local/sersync/confxml.xml
需要修改如下几个地方:
<!--配置源服务器上的需要拷贝的目录-->
<localpath watch="/home/www"> #需要同步的目录
<!—-监听目的服务器及test模块-->
<remote ip="10.0.3.11" name="test"/> #目标服务器ip+模块名称
<!—设置从服务器的IP-->
<!--<remote ip="192.168.0.10" name="test"/>-->
<!--<remote ip="192.168.0.11" name="test"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/> #rsync后接的参数
<auth start="true" users="root" passwordfile="/etc/rsync.passwd"/>
<!--配置auth start为ture(开启),users为备份数据用户,passwordfile为密码文件-->
<!—-设置同步的用户名和密码文件-->
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<!--配置timeout start为ture(超时断开是否启动)time为超时断开时间按需求配置-->
<ssh start="false"/>
</rsync>
注:如果目的服务器的rsync有配置账号密码时,这里需要配置/etc/rsync.pass
sersync监控开机自启
vim /etc/rc.d/rc.local #编辑,在最后添加一行
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml #设置开机自动运行脚本
:wq! #保存退出
脚本守护sersync
vim /check_sersync.sh
#!/bin/bash
sersync="/usr/local/sersync/sersync2"
confxml="/usr/local/sersync/confxml.xml"
status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)
if [ $status -eq 0 ]; #判断进程是否等于0
then
$sersync -d -r -o $confxml &
else
exit 0;
fi
:wq! #保存退出
chmod +x check_sersync.sh
crontab -e #进入计时器
*/5 * * * * root /root/check_sersync.sh > /dev/null 2>&1 #每隔5分钟执行一次脚本
:wq!
service crond reload #重新加载服务
成功了.....😄
最后提醒一点:
①关闭selinux ②开启防火墙tcp 873端口
参考博文:https://www.cnblogs.com/ping-y/p/5825655.html
本文来自博客园,作者:MegaloBox,转载请注明原文链接:https://www.cnblogs.com/cpw6/p/9621385.html