用 lsyncd 来替代 inotify-rsync 进行文件同步
Contents
##################### phanx.com #####################
Author: phanx
Updated: 2017-6-18
转载请保留作者信息
###################################################
两个主机有目录需要内容一样,NAS上的NFS没法用,直接export NFS也不太合适,上集群文件系统又有点过了,于是还是考虑用rsync来同步。
考虑到同步要求要“实时”,所以需要用inotify-tools来及时触发rsync的同步。
网上inotify + rsync的教程很多,但是确实都有些毛病。想用这个方案的同学请参考 真正的inotify+rsync实时同步 彻底告别同步慢
后来又研究了一下,决定用lsyncd + rsync来实现。
网上已经有一篇写的比较好的教程了,可以参考 seanlook 写的 lsyncd实时同步搭建指南——取代rsync+inotify
SegmentFault上也有 lsyncd实时同步搭建指南——取代rsync+inotify 内容一样。
我因为要在内部YUM上分发,因此需要编译成RPM。 新版本(写这个的时候版本为2.2.2)的lsyncd没有提供RPM编译所需的SPEC文件,所幸EPEL上有lsyncd-2.1.5的版本SRC RPM,里面提供了SPEC文件,但是新版本的编译前配置方式从configure改成了cmake,因此要调整一下2.1.5所提供的SPEC文件。
先为编译lsyncd的做一些准备:
gcc
gcc-c++
这些不用说了,编译环境必须要的,没有的话,先搞好,要不然cmake会出错。由于编译lsyncd依赖
lua
/ lua-devel
和 asciidoc
,lua 在 RHEL/CentOS 的安装DVD中可以找到,但 lua-devel 和 asciidoc 这两个包不在 RHEL 的 base-channel 里面,而是在 rhel-6-server-optional-rpms 中,因此需要提前下载安装好。有redhat账号的同学可以直接从 redhat CUSTOMER PORTAL —–> DOWNLOADS —–> Tech Preview: New RPM Package Search 中找到并下载。
没有的就找 CentOS的RPM 来装: asciidoc-8.4.5-4.1.el6.noarch.rpm
lua-devel-5.1.4-4.1.el6.x86_64.rpm
asciidoc 安装的时候会依赖
docbook-style-xsl
包,如果配了安装DVD的YUM源, 用yum装 asciidoc 的时候会自动安装解决依赖,没有配YUM就手工装,安装DVD中有。另外,由于需要
cmake
,所以也需要提前安装好(同样在安装DVD里面有)。这些准备完后,从EPEL上下载 lsyncd-2.1.5-0.el6.src.rpm,从GITHUB上下载 lsyncd-master.zip 后,就可以开始构建新版RPM了。
先安装 lsyncd-2.1.5 的源码包
|
|
然后在 rpmbuild的SPEC目录会有 lsyncd.spec
按照以下差异修改 lsyncd.spec 文件:
|
|
再把 lsyncd-master.zip 放到rpmbuild的SOURCES目录,解压 修改目录名,创建build空目录,再打包。
|
|
完成后会生成两个RPM,一般只需要 lsyncd-2.2.2-0.el6.x86_64.rpm 。
如果有内部的RPM包签名,那么加上签名就可以在内部YUM源发布了。
rpm --addsign lsyncd-2.2.2-0.el6.x86_64.rpm
以上,lsyncd的RPM的编译制作就完成了,现在开始安装配置 lsyncd 。
———-
先按照常规配置好rsync daemon模式
目标端:
|
|
然后源端配置lsyncd
|
|
如果目标端有防火墙或者iptables,那么记得在防火墙和iptables中放开目标端的TCP 873,就可以了。
更详细的介绍,还是请参考前面提到的 seanlook 的文章 或者 lsyncd 的文档。