lsyncd + rsync 实时同步搭建
一、inotify和lsync
inotify和lsyncd对比一下,发现虽然lsyncd没有inotify那么真正的实时同步,但是lsyncd的同步基本上可以满足基本实时同步的要求,而且lsyncd的配置相对于inotify来说非常简单。
二、简介
服务端:此服务的服务端是指文件推送的目的服务器
客户端:需要被同步的文件所在的服务器
本次需要将客户端/data/src/目录下的文件推送到服务端/data/dest/
三、安装rsync
服务端和客户端都需要安装
yum源安装:
yum install rsync -y
编辑服务端配置文件,没有的需要新建
vim /etc/rsyncd.conf
1 uid=root # 服务器端传输文件时,要发哪个用户和用户组来执行,默认是nobody 根据实际情况修改成对应的用户和组 --chmod= 改成文件的权限 2 gid=root # 3 use chroot=no #用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外 4 max connections=200 #允许的最大连接数 5 timeout=600 #超时时间 6 port=873 服务器的端口号 默认为873 7 lock file=/var/run/rsync.lock 8 log file=/var/log/rsyncd.log 9 10 11 [test] # 模块名 12 path = /data/dest # 目标目录13 comment = this is test # 说明 14 auth users = test # 认证用户 15 secrets file = /etc/rsyncd.secrets # 认证用户配置文件 16 ignore errors #忽略不重要的错误 17 read only = no 18 write only = no 19 hosts allow = client # 允许的传文件过来的客户端 20 hosts deny = * #不允许传文件过来的客户端
编辑认证文件:
echo "test:test" > /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
启动rsyncd服务
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
无信息输出即传输成功
至此,服务端配置就已经完成,客户端的rsync安装完成即可。
四、安装lsyncd
注:此服务只需要在客户端配置
下载服务安装环境:
yum install cmake lua-devel -y
下载lsyncd服务并安装:
[root@localhost ~]# cd lsyncd/ [root@localhost lsyncd]# ls bin2carray.lua CMakeLists.txt default-direct.lua default-rsyncssh.lua examples INSTALL lsyncd.lua tests ChangeLog config.h.in default.lua distclean.sh fsevents.c lsyncd.c m4 cmake COPYING default-rsync.lua doc inotify.c lsyncd.h README.md [root@localhost lsyncd]# cmake . 。。。。。。 [root@localhost lsyncd]# make && make install
安装完成。
配置lsyncd.conf
vim /etc/lsyncd.conf
1 settings { 2 logfile = "/var/log/lsyncd/lsyncd.log", 3 statusFile = "/tmp/lsyncd.stat", 4 inotifyMode ="CloseWrite", 5 statusInterval = 1, 6 maxDelays = 1, 7 } 8 9 sync_base_wp = { 10 default.rsync, 11 init=false, 12 delete = true, 13 rsync = { 14 binary = "/usr/bin/rsync", 15 archive = true, 16 compress = true, 17 password_file = "/etc/rsyncd.pass" 18 } 19 } 20 21 sync { sync_base_wp,source="/data/src",target = "test@server_ip::test" }
创建日志目录 mkdir /var/log/lsyncd
创建密码文件 echo "test" > /etc/rsyncd.pass;chmod 600 /etc/rsyncd.pass
启动lsyncd lsyncd -log all /etc/rsyncd.conf
注:如果你需要用--include 参数,但是lsyncd直接提供的是exclude和excludeFrom,所以你需要把所有不需要传输的文件类型都列出来,有的时候是不合适的。这个时候你可使用_extra = { "--include=" ,...}来实现。
五、测试
略
至此完成搭建。
附rsync和lsync配置文件详解:
rsync:https://yq.aliyun.com/articles/43202
lsync:https://www.kancloud.cn/hiyang/linux/390195