rsync+sersync实现数据实时同步

sersync是基于inotify+rsync的大量文件的多服务器自动同步程序
使用 Linux 2.6 内核的 inotify 监控 Linux 文件系统事件,被监听目录下如果有文件发生修改,sersync 将通过内核自动捕获到事件,并将该文件利用 rsync 同步到多台远程服务器。sersync 仅仅同步发生增、删、改事件的单个文件或目录,不像rsync镜像同步那样需要比对双方服务器整个目录下数千万的文件,并且支持多线程同步,因此效率非常高

rsync 采用c/s模式,监听端口为 873

前期准备

下载sersync

1
2
3
谷歌项目地址:(https://code.google.com/archive/p/sersync/)  
64位下载地址:(https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz)
32位下载地址:(https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5_32bit_binary_stable_final.tar.gz)

上不去google的可以使用百度网盘我的备份包,这里只提供64位版本的:
链接:https://pan.baidu.com/s/1j3H7KBv4y3_DzOWb-rwpMQ
提取码:0g8a

注: 压缩包里面有两个文件confxml.xml和sersync2。前者是sersync配置文件,后者是sersync主程序。

确认当前系统关闭selinux及防火墙,或将873端口加入iptables白名单
注意: 该步骤需要在备份源服务器和目标服务器上都要操作

  1. 关闭SELINUX
    1
    2
    3
    4
    5
    6
    [root@rsync ~]# vim /etc/selinux/config #编辑防火墙配置文件
    #SELINUX=enforcing #注释掉
    #SELINUXTYPE=targeted #注释掉
    SELINUX=disabled #增加
    :wq! #保存,退出
    [root@rsync ~]# setenforce 0 #立即生效
  2. 开启防火墙tcp 873端口
    1
    2
    3
    4
    [root@rsync ~]# vim /etc/sysconfig/iptables #编辑防火墙配置文件
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
    :wq! #保存退出
    [root@rsync ~]# /etc/init.d/iptables restart #最后重启防火墙使配置生效
  3. 开放873端口 比如阿里云服务器 要到后台设置哦

需求说明

我这里有两台centos8的主机,IP分别是192.168.2.98和192.168.2.248。
我在192.168.2.98安装sersync,主动推送数据到192.168.2.248上。
也就是说 192.168.2.98作为数据备份源,192.168.2.248作为目标机器。

实现过程

目标机器配置

  1. 安装rsync
    yum install rsync

  2. 创建rsync配置文件
    vi /etc/rsyncd.conf

    增加以下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    uid = root #这里是系统用户 需要有备份目标文件夹操作权限 这个注释后续需要删除
    gid = root
    use chroot = yes
    hosts allow=*
    max connections = 5
    port = 873
    timeout = 900
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    motd file = /etc/rsyncd.motd
    [backup]
    path = /var/www/backup
    comment = Hi
    read only = false
    list =yes
    auth users = rsyncuser
    secrets file =/etc/rsync.passwd

    编辑完成保存退出
    具体配置注释见下图

  3. 在secrets file指定的用户密码文件
    vim /etc/rsync.passwd  内容格式:用户名:密码,可以设置多个,每行一个用户名:密码
    执行echo "rsyncuser:password" >> /etc/rsync.passwd
    把内容追加到rsync.passwd末尾
    然后,更改文件的读写权限为600
    chmod 600 /etc/rsync.passwd

  4. 启动rsync
    配置完成可使用netstat -antup |grep 873 查看是否有端口873在运行没有的话启动
    /usr/bin/rsync --daemon # 以守护进程方式
    /usr/bin/rsync --daemon --config=/etc/rsyncd.conf  # 加载配置文件rsyncd.conf启动rsync服务

注: 可使用 kill -9 杀掉进程.(进程ID 可以通过 ps aux | grep rsync 方法得到)

  1. 配置rsync开机自启动
    直接追加 echo "/usr/bin/rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.d/rc.local

  2. 实时监控
    进入你要备份的目标路径 键入watch ls -l可实现实时监控。

数据备份源机器配置

  1. 安装rsync

    1
    2
    3
    [root@rsync ~]# whereis rsync   #查看系统是否已安装rsync,出现下面的提示,说明已经安装
    rsync: /usr/bin/rsync /usr/share/man/man1/rsync.1.gz
    yum install rsync #如果默认没有rsync,运行此命令进行安装rsync
  2. 下载sersync到本地解压

    1
    2
    3
    4
    5
    6
    7
    # 我这里将sersync放在了/usr/local/sersync/目录下
    cd /usr/local/
    wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz
    tar xzf sersync2.5.4_64bit_binary_stable_final.tar.gz
    rm -rf sersync2.5.4_64bit_binary_stable_final.tar.gz
    mv GNU-Linux-x86/ sersync
    cd sersync
  3. 创建认证密码文件
    密码需和目标服务器配置的一致,且不需要用户名.将该文件的权限也更改为600
    echo "password" >> /etc/rsync.passwd
    chmod 600 /etc/rsync.passwd

  4. 修改confxml.xml文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ......
    <sersync>
    24 <localpath watch="监控目录路径">
    25 <remote ip="rsync目标服务端IP地址" name="模块名"/>
    ......
    <rsync>
    30 <commonParams params="-az"/>
    31 <auth start="true" users="rsync客户端用户名" passwordfile="rsync客户端密码文件"/>
    ......
    36 <failLog path="指定Sersync日志文件路径" timeToExecute="60"/>......
  5. 修改权限 chmod +x sersync2

  6. 读取指定路径配置文件启动sersync /usr/local/serync/serync2 -d -r -o /usr/local/sersync/confxml.xml
    耐心等待执行完成后进行后续操作。

    -n 启用线程数量
    -d daemon方式启动
    -o 指定配置文件
    sersync整体同步一次 在sersync目录下运行 ./sersync2 -r
    开启实时同步命令 ./sersync2 -d。 一般先运行完整体同步后,再进行该命令操作

  7. 设置开机启动
    echo "/usr/local/sersync/sersync2 -r -d -o /usr/local/sersync/confxml.xml" >> /etc/rc.d/rc.local
    执行完成可以测试。

  8. 添加脚本监控sersync是否正常运行

    1. 编辑脚本vi /usr/local/check_sersync.sh,添加以下代码

      #!/bin/bash
      sersync="/usr/local/serync/serync2"
      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
    2. 测试脚本
      sh /usr/local/check_sersync.sh

    3. 赋予脚本执行权限
      chmod +x /usr/local/check_sersync.sh

    4. 定义计划任务实现定时备份
      echo ‘*/5 * * * * sh /usr/local/check_sersync.sh &’ >> /var/spool/cron/root

rsync参数说明

参考文章

https://blog.whsir.com/post-1097.html
https://blog.csdn.net/chrisjingu/article/details/78317907
https://www.jianshu.com/p/31a67de3f669

本文标题:rsync+sersync实现数据实时同步

文章作者:xugz

发布时间:2019年10月29日 - 14:26

最后更新:2021年09月11日 - 16:45

原始链接:https://xlline.github.io/2019/10/29/rsync+sersync/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。