Rsync 文件同步(三):实时同步 Rsync + Sersync

Inotify 工具

inode notify

为用户态应用程序提供了文件系统事件通知机制

  • 发生文件的访问、修改、删除等事件,可以立刻通知给用户态应用程序
  • 通过Inotify可以实时了解文件系统发生的所有变化

常见的监控事件

事件描述
IN_ACCESS文件访问事件
IN_MODIFY文件修改事件
IN_ATTRIB文件属性修改事件
IN_OPEN文件打开事件
IN_CLOSE_WRITE可写文件被关闭事件
IN_CLOSE_NOWRITE不可写文件被关闭事件
IN_MOVED_FROM文件移动或重命名事件
IN_MOVED_TO文件移动或重命名事件
IN_DELETE文件或目录删除事件
IN_CREATE文件或目录创建事件
IN_DELETE_SELF自删除事件

版本要求

Inotify是内核提供的一种系统功能,用户如果要使用,还需要安装用户态软件

  • 在 Linux Kernel 2.6.13之后才提供了此功能

实现方案

对于Inotify的实现,主要有以下几个软件

  • Inotify
  • Sersync
  • Lsyncd

不推荐使用Inotify本身这个工具,因为 Inotify 应用中有对应的BUG:“当向监控目录下复制大量文件,或者复制复杂层次目录(多层次目录中包含文件)时,Inotify 经常会随机性地遗漏某些文件。这些遗漏掉的文件由于未被监控到,因此就会导致这些漏掉的数据没办法同步”,而 Sersync 和 Lsyncd 对 Inotify 这方面的缺陷进行了优化

Sersync 工具

工具说明

sersync 类似于 inotify,同样用于监控,但它克服了 inotify 的缺点。

优势说明

资料来源:http://www.yunweipai.com/36019.html

  • sersync 是使用c++编写,而且对 linux 系统文件系统产生的临时文件和重复的文件操作进行过滤,所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快
  • sersync 配置很简单,其中提供了静态编译好的二进制文件和xml配置文件,直接使用即可
  • sersync 使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态
  • sersync 有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则按设定时长对同步失败的文件重新同步
  • sersync 不仅可以实现实时同步,另外还自带 crontab 功能,只需在xml配置文件中开启,即也可以按要求隔一段时间整体同步一次,而无需再额外配置 crontab 功能
  • sersync 可以二次开发

准备环境

  1. 待同步(备份)的服务器

    • 需要安装 sersync 和 rsync
    • centos 7.9 (注意内核版本要大于2.6.13)
    • 需要同步的目录:/home/share
    • 静态IP地址:192.168.204.52
  2. 备份文件存放服务器(目标服务器)

    • 需要安装 rsync(daemon运行)

    • centos 7.9 (注意内核版本要大于2.6.13)

    • 数据同步过来的存放目录:/home/backups

    • 静态IP地址:192.168.204.57

  3. 逻辑思路

    • sersync 监听192.168.204.52下的/home/share目录,在这个目录下文件的写入和更新就会被 sersync 通过 rsync 命令同步导目标服务器 192.168.204.57

安装 Sersync

在源数据服务器上安装 sersync 服务,我这里是 192.168.204.52

wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz

image-20230214122618331

#解压
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/
#备份一下配置文件
cp /usr/local/sersync/conf/confxml.xml /usr/local/sersync/conf/confxml.xml.bak

安装 Rsync

源文件服务器和目的服务器都需要安装

image-20230214161438044

部署 Rsync daemon 服务

  • 目的服务器需要进行配置操作:192.168.204.57
####/etc/rsyncd.conf文件内容####
transfer logging = yes
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
port = 873
address = 0.0.0.0
uid = 0
gid = 0
use chroot = yes
max connections = 100
timeout = 900
read only = no
ignore errors
auth users = rsync_backup
secrets file = /etc/rsyncd.pass

[backups]
comment = This is a backup test
path = /home/backups
  • 创建备份文件存放目录:mkdir /home/backups

image-20230214162104616

  • 配置账号密码文件(注意文件权限)
echo "rsync_backup:Test123456" >/etc/rsyncd.pass
chmod 600 /etc/rsyncd.pass

image-20230214162224077

  • 启动服务进程:systemctl enable rsyncd --now

image-20230214162324468

源数据服务器配置 Rsync

192.168.204.52 上面执行

创建密码文件

echo 'Test@123456' > /etc/rsync_client.pass
chmod 600 /etc/rsync_client.pass
#注意文件权限

image-20230214162519624

手动测试下同步

我们将源数据服务器的/home/share里面的数据同步到192.168.204.57上面,OK才算正常

rsync -avzP /home/share rsync_backup@192.168.204.57::backups --password-file=/etc/rsync_client.pass

image-20230214162746686

配置 Sersync

192.168.204.52 源数据服务器上操作

修改配置文件/usr/local/sersync/conf/confxml.xml

  • 24行~28行的内容
    • localpath watch:本地要同步的目录
    • remote ip:要同步的服务器IP和模块名
     24         <localpath watch="/home/share">
     25             <remote ip="192.168.204.57" name="backups"/>
     26             <!--<remote ip="192.168.8.39" name="tongbu"/>-->
     27             <!--<remote ip="192.168.8.40" name="tongbu"/>-->
     28         </localpath>

image-20230214163656334

  • 31~34行的内容
    • 关于认证授权
     31             <auth start="true" users="rsync_backup" passwordfile="/etc/rsync_client.pass"/>
     32             <userDefinedPort start="false" port="874"/><!-- port=874 -->
     33             <timeout start="false" time="100"/><!-- timeout=100 -->
     34             <ssh start="false"/>

image-20230214163901814

  • 36~37行的内容
     36         <failLog path="/usr/local/sersync/logs/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins         execute once-->
     37         <crontab start="false" schedule="600"><!--600mins-->

image-20230214164047958

开启 Sersync 守护进程同步数据

配置环境变量

这个地方可以把安装的时候换一个位置,这样就不用配置环境变量了

echo 'export PATH=/usr/local/sersync/bin:$PATH' >> /etc/profile
source /etc/profile

image-20230214164246404

启动命令

sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml

image-20230214164420794

验证一下呢

先看下目标服务器同步情况

image-20230214164510136

源数据服务器去新增一些文件试试

并查看一下目的服务器有没有实时同步

image-20230214164654347

image-20230214164710540

总结一下

  • 这个模式安装配置也不难,但是没有经过实际性能测试,不知道在大文件下同步效率如何
  • 整个流程也可以封装成一个 shell 脚本,这样可以快速拿到其他环境去用,后面可以搞一下
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值