博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rsync+sersync实现服务器文件同步
阅读量:6628 次
发布时间:2019-06-25

本文共 4282 字,大约阅读时间需要 14 分钟。

集群间服务器实现数据的同步一直是一个问题,比如一个lvs集群中,如果有上百台RS服务器,当更新Web程序时,如何在这么多台服务器间进行快速的更新,这是一个问题,如果使用手动更新,或者scp等命令,明显是不可取的。因此,介绍这样rsync+sersync的组合工具实现多台服务器直接的文件数据同步。

Rsync服务在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。

Sersync服务可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;
当数据量很大(几百G甚至1T以上)、文件很多时,建议使用Rsync+sersync。

环境:

操作系统:CentOS 7.3
源服务器:192.168.30.10
目标服务器: 192.168.30.20
目的:把源服务器上/home/Sync目录实时同步到目标服务器的/home/Sync下
具体操作:
第一部分:在目标服务器192.168.0.50上操作
一、在目标服务器安装Rsync服务端
1、关闭SELINUX
2、关闭防火墙
3、安装Rsync服务端软件
#yum install rsync xinetd #安装
rsync是由超级守护进程xinetd来启动的。因此需要启动xinetd服务。
1

# vi /etc/rc.d/rc.local #设置开机启动

/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
# chmod +x/etc/rc.d/rc.local #否则重启不执行

4、创建rsyncd.conf配置文件

vim /etc/rsyncd.conf

  • 添加自定义的配置文件内容,配置文件中需要删除其中的添加配置后的注释。截图中的注释仅作提示。
    2

5、创建用户认证文件

#vi/etc/rsync.pass #配置文件,添加以下内容,添加允许传输用户和密码
Sync:123 #格式,用户名:密码,可以设置多个,每行一个用户名:密码
3

6、设置文件权限

#chmod 600 /etc/rsyncd.conf #设置文件所有者读取、写入权限
#chmod 600 /etc/rsync.pass #设置文件所有者读取、写入权限

  • 权限设置必须为600,否则rsync会报错,这是基于安全的考虑。
    4

7、启动rsync

# systemctl start rsyncd

第二部分:在源服务器192.168.30.10上操作

一、安装Rsync客户端
1、关闭SELINUX
2、关闭防火墙
3、安装Rsync客户端端软件
#yum install rsync
# vi /etc/rc.local #设置开机启动
/usr/bin/rsync --daemon

#vim/etc/rsyncd.conf #编辑配置文件添加如下的配置规则

  • 配置文件中设置的规则需与目标端的设置相符。
    5

#systemctl start xinetd #启动(CentOS中是以xinetd来管理rsync服务的)

如果没有安装xinetd,需要手动安装。
6

4、创建认证密码文件

#vi /etc/passwd.txt #编辑文件,添加以下内容,该密码应与目标服务器中的/etc/rsync.pass中的密码一致,
123 #密码
7

#chmod 600 /etc/passwd.txt #设置文件权限,只设置文件所有者具有读取、写入权限即可

5、测试源服务器192.168.30.10到目标服务器 192.168.30.20,之间的数据同步

#mkdir -p /home/Sync/ceshi 在目标服务器上创建测试文件夹
8

在源服务器运行下面1行命令

9

运行完成后,在目标服务器192.168.30.10上查看,在/home/Sync/目录下有ceshi文件夹,说明数据同步成功,命令中目录可以随意目录,传输到目标服务器目录时文件(或目录)均放到/etc/rsyncd.conf配置的服务器目录路径,如果源目录改变了,那么传输时两个目录将进行目录匹配,会有增删动作,因此需要注意。

Rsync服务文件同步成功,但是需要手动触发,现在搭建sersync服务,配合crontab定时任务和脚本自动触发数据同步。

sersync是基于Inotify开发的,类似于Inotify-tools的工具,所以先查看一下inotify的内核参数,并适当修改,如果参数过小可能导致报错。

1.查看系统默认参数值:

sysctl -a | grep max_queued_events
结果是:fs.inotify.max_queued_events= 16384
sysctl -a | grep max_user_watches
结果是:fs.inotify.max_user_watches= 8192
sysctl -a | grep max_user_instances
结果是:fs.inotify.max_user_instances= 128

2.修改参数:

#sysctl -wfs.inotify.max_queued_events="99999999"
#sysctl -w fs.inotify.max_user_watches="99999999"
#sysctl -wfs.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

参数说明:

max_queued_events:
inotify队列最大长度,如果值太小,会出现" Event QueueOverflow "错误,导致监控文件不准确
max_user_watches:
要同步的文件包含多少目录,可以用:find /home/Sync-type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/
home/Sync为同步文件目录)
max_user_instances:
每个用户创建inotify实例最大值

3、安装sersync

下载sersync2.5.4_64bit_binary_stable_final.tar.gz
10

11

#tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz

#mv GNU-Linux-x86 /usr/local/sersync #移动目录到/usr/local/sersync
wget--no-check-certificate

4.配置sersync

#cd /usr/local/sersync #进入sersync安装目录
#cp confxml.xml confxml.xml-bak #备份原文件
#vi confxml.xml #编辑,修改下面的代码
12

参数说明:

截图中圈出的是需要修改的地方
localpath watch="/home/Sync":#源服务器同步目录
192.168.30.20:#目标服务器IP地址
name="Sync": #目标服务器rsync同步目录模块名称
users="Sync": #目标服务器rsync同步用户名
passwordfile="/etc/rsync.pass": #目标服务器rsync同步用户的密码在源服务器的存放路径
remote ip="192.168.30.20": #目标服务器ip,每行一个
failLogpath="/tmp/rsync_fail_log.sh" #脚本运行失败日志记录
start="true" #设置为true,每隔600分钟执行一次全盘同步

5、设置sersync监控开机自动执行

#vi /etc/rc.d/rc.local #编辑,在最后添加一行
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml #设置开机自动运行脚本
:wq! #保存退出
# chmod +x /etc/rc.d/rc.local #否则重启不执行
13

6、添加脚本监控sersync是否正常运行,或者直接将同步命令写入计划任务,按时执行同步。

#mkdir /home/crontab
#vi /home/crontab/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 ];``
then
$sersync -d-r -o $confxml &
else
exit 0;
fi
14

#chmod +x /home/crontab/check_sersync.sh#添加脚本执行权限

15

#vi /etc/crontab #编辑,在最后添加下面一行

/5 * root /home/crontab/check_sersync.sh >/dev/null 2>&1 #每隔5分钟执行一次脚本
16

#重新加载服务

#systemctl restart crond.service
6、测试sersync实时触发rsync同步脚本是否正常运行
在源服务器192.168.30.20上创建文件inotify_rsync_ceshi
#mkdir /home/Sync/inotify_rsync_ceshi
重新启动源服务器:192.168.30.10
等系统启动之后,查看两台目标服务器 192.168.30.10的/home/Sync下是否有inotify_rsync_ceshi文件夹
如果测试通过,说明inotify实时触发rsync同步脚本运行正常。

转载地址:http://zqqpo.baihongyu.com/

你可能感兴趣的文章
format的用法
查看>>
DHCPv6 server port and DHCPv6 client port
查看>>
BitmapFactory.Options避免 内存溢出 OutOfMemoryError的优化方法
查看>>
Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片
查看>>
DNGuard 免费的DotNet加密保护工具 V1.0
查看>>
编程中的命名设计
查看>>
easyui form validate总是返回false原因
查看>>
在(CListView)列表视图中添加右键菜单的方法
查看>>
自定义服务器控件(处理不同的浏览器)
查看>>
解决IE6-IE7下li上下间距
查看>>
聚集索引更新后会不会马上重新排序
查看>>
幸运大抽奖
查看>>
Post请求
查看>>
Java排序算法(三):直接插入排序
查看>>
Python 列表 min() 方法
查看>>
HSF源码阅读
查看>>
【死磕jeesite源码】Jeesite配置定时任务
查看>>
程序8
查看>>
TBluetoothLEDevice.UpdateOnReconnect
查看>>
poj3517
查看>>