sersync - 数据同步神器

sersync 是基于 boost1.43.0 inotify api rsync command 开发的一个服务器同步工具。

托管在 Google Code 上的项目地址为: https://code.google.com/archive/p/sersync/

虽是个陈年老项目,有年久失修的风险(最新的版本还是 2011 年),但如果你正好有比较轻量级的数据同步需求,sersync 不失为是一个好选择。


假设我们今天的需求如下:

  • 有两台主机,IP 分别为 192.168.1.10192.168.1.11
  • 这两台主机上都有个 /var/data 目录,目前里面都是空的。
  • 希望这两台主机的 /var/data 能双向实时同步。
  • 例如,在 192.168.1.10:/var/data 中添加一个文件后,192.168.1.11:/var/data 上也会相应出现该文件,反之亦然。

接来下用 5 分钟时间来解决这个需求!

为了更加方便快捷地使用 sersync,我已经将其打包为一个 docker 镜像。

首先,在两台主机上分别下载镜像

docker pull taojy123/sersync

接下来,在 192.168.1.10 主机上启动 sersync

docker run -d -v /var/data:/syncdir -p 873:873 -e TARGET_HOST=192.168.1.11 --name sersync taojy123/sersync

注意:
1. -v 参数后面的 /var/data 为宿主机上要进行同步的目录,可根据实际情况更改,/syncdir 为固定容器内目录不要改动。
2. 必须要暴露宿主机的 873 端口,有防火墙的要打开。
3. TARGET_HOST 设置为另一台主机的 IP 或域名。

然后,在另一台主机 192.168.1.11 上也启动 sersync

docker run -d -v /var/data:/syncdir -p 873:873 -e TARGET_HOST=192.168.1.10 --name sersync taojy123/sersync

注意:
1. 这里的 TARGET_HOST 要相应改成前面那台主机的地址,即 192.168.1.10
2. 命令执行后,当前 192.168.1.10:/var/data 目录里面内容,会被 192.168.1.11:/var/data 覆盖。

搞定!这两台主机上的 /var/data 目录,已实现双向同步。

验证一下:

# on 192.168.1.10
> cd /var/data
> echo 123 > a.txt

# on 192.168.1.11
> cd /var/data
> ls
a.txt
> echo 456 > b.txt
> rm a.txt


# on 192.168.1.10
> cd /var/data
> ls
b.txt
> cat b.txt
456

总结一下
目前跨服务器数据同步使用的比较多的解决方案是 inotify-tools + rsync,本文提到的 sersync 其核心原来也是利用 rsync 进行同步。在此例中与 docker 相结合更好地突出了其轻量级、便捷实用的特性,不失为一件神器。