为什么选用 Rsync+sersync
1.sersync 是基于 Inotify 开发的, 类似于 Inotify-tools 的工具.
sersync 可以记录被监听目录中发生变化的 (包括增删改) 具体某一个文件或某一个目录的名字, 然后使用 rsync 同步的时候, 只同步发生变化的这个文件或者这个目录.
2.rsync 在同步的时候, 只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的, rsync 在遍历查找比对文件时, 速度很快), 因此, 效率很高.
当同步的目录数据量不大时, 建议使用 Rsync+Inotify-tools; 当数据量很大(几百 G 甚至 1T 以上), 文件很多时, 建议使用 Rsync+sersync.
准备环境
服务器 A:192.168.11.31 源服务器.
服务器 B: 192.168.11.34 目标服务器.
我们要实现的就是把 A 服务器上的文件同步到 B 服务器上, 从而实现备份. 我们主要是在 B 服务器上安装配置 rsync, 在 A 服务器上安装配置 sersync, 通过 sersync 把文件推送到 B 服务器上.
服务器系统环境为 CentOS7.4.
系统基础配置
1. 修改 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 /data/file -type d | wc -l 统计, 必须保证 max_user_watches 值大于统计结果(这里 / data/file 为同步文件目录)
max_user_instances: 每个用户创建 inotify 实例最大值
2. 关闭 selinux
在 / etc/sysconfig/selinux 这个文件, 设置 SELINUX=disable
3. 防火墙开通 873 端口
- firewall-cmd --zone=public --add-port=873/tcp --permanent
- firewall-cmd --reload
以上 A,B 两台服务器都需要配置.
部署 rsync
我们需要在源服务器 A 和目标服务器 B 上都要部署 rsync.
安装 rsync:
yum install -y rsync
配置 rsync:
- [root@localhost ~]# VIM /etc/rsyncd.conf
- uid = root
- gid = root
- use chroot =no
- list = no
- log file = /var/log/rsyncd.log
- [helloweba]
- path=/data/file
- comment=helloweba file backup
- ignore errors=yes
- read only=no
- list=no
- max connections=2000
- timeout=200
- auth users=rsync
- secrets file=/etc/rsync.pas
- hosts allow=*
- #host deny=0.0.0.0/0
auth users 配置同步验证的用户名.
secrets file 这个是配置同步的密码文件的.
[helloweba] 这个是配置同步模块的名称.
path 是配置同步的目录.
hosts allow 是允许同步的主机.
hosts deny 拒绝同步的主机.
创建同步的用户与密码的文件
将用户名和密码写入密码文件中, 同样要设置这个文件的权限为 600.
- echo "rsync:123456">> /etc/rsync.pas
- chmod 600 /etc/rsync.pas
创建同步的目录
按照配置文件中的 path 创建对应的目录:
mkdir /data/file
启动和管理 rsync
启动 rsync:
systemctl start rsyncd
将 rsync 设置为开机自启动:
systemctl enable rsyncd
如果要停止和重启 rsync 可以使用以下命令:
systemctl stop|restart rsyncd
启动好 rsync 服务后, 我们可以使用 netstat -tunpl | grep :873 查看服务端口 873 是否正常.
源服务器 A 部署 sersync
安装和配置 rsync
源服务器 A 也需要安装 rsync, 方法同上述目标服务器 B 部署 rsync 一样.
下载 sersync
在 google code ( http://code.google.com/p/sersync/downloads/list )下载 sersync 的可执行文件版本, 里面有配置文件和可执行文件
不能 google 的同学可以到 http://sersync.sourceforge.net/ 下载旧版本.
安装 sersync
- tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
- mv GNU-Linux-x86 /usr/local/sersync
我们下载的是二进制版, 无需编译安装, 直接就可使用.
我们可以规范下目录结构:
- cd /usr/local/sersync/
- mkdir conf bin logs
- mv confxml.xml conf/
- mv sersync2 bin/
最后目录结构应该是这样的:
- .
- |-- bin
- | `-- sersync2
- |-- conf
- | `-- confxml.xml
- `-- logs
创建密码文件
和目标服务器一样, 不过这个文件只要保存密码即可, 不需要保存用户名, 权限也是 600
- echo "123456">> /etc/rsync-client.pas
- chmod 600 /etc/rsync-client.pas
配置 sersync
直接编辑 sersync 的配置文件:
VIM /usr/local/sersync/conf/confxml.xml
要注意几处需要修改的地方:
1. 定义同步目录和目标服务器 ip 及模块名称.
- <localpath watch="/data/file"> # 定义本地要同步的目录
- <remote ip="192.168.11.34" name="helloweba"/> # 定义要同步的服务器 IP 和模块名
- <!--<remote ip="192.168.8.39" name="tongbu"/>-->
- <!--<remote ip="192.168.8.40" name="tongbu"/>-->
- </localpath>
2. 配置 rsync 同步指令及同步认证.
- <rsync>
- <commonParams params="-artuzP"/> # 定义同步指令
- <auth start="true" users="rsync" passwordfile="/etc/rsync-client.pas"/> #启用同步认证, 指定用户名及密码文件
- <userDefinedPort start="false" port="873"/><!-- port=874 --> #定义远程端口
- <timeout start="false" time="100"/><!-- timeout=100 -->
- <SSH start="false"/>
- </rsync>
启动和管理 sersync 服务
我们需要自己制作一个服务管理脚本, 新建 sersync.service 文件: VIM /usr/lib/systemd/system/sersync.service , 添加以下代码:
- [Unit]
- Description=sersync service
- After=network.target
- [Service]
- Type=forking
- LimitNOFILE=65535
- ExecStart=/usr/local/sersync/bin/sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml
- ExecReload=/bin/kill -USR1 $MAINPID
- Restart=always
- [Install]
- WantedBy=multi-user.target graphical.target
保存, 然后启动 sersync 服务:
systemctl start sersync.service
加入到启动项随系统启动:
systemctl enable sersync.service
可以使用以下命令停止和重启 sersync 服务:
systemctl stop|restart sersync.service
验证
服务都搭建好了, 现在最后一步就是验证测试, 我们在源服务器 A 的 / data/file 目录下(如果不存在则手动创建目录), 执行新建文件, 删除文件, 新建文件夹等操作后, 再到目标服务器 B 的 / data/file 目录下看看是否也存在相同的文件和文件夹. 如果一切正常, 那么恭喜实时同步配置成功了.
以上我们就做好了文件双机自动同步备份, 作者亲测并应用在实际项目中, 这样就不怕文件丢失了.
后记
有的项目中, 我们希望做到双机双向自动同步备份, 就像 《MySQL/MariaDB 主主数据同步配置》 https://www.helloweba.net/server/543.html 一样, 两台服务器既是源服务器又是目标服务器, 这个时候只需在两台服务器上都部署 rsync 和 sersync 服务, 配置和本文配置一毛一样.
来源: http://www.tuicool.com/articles/FFjMJne