lsyncd + rsync 实时同步海量小文件
一: 基于epel源安装lsyncd 和 rsync
环境准备
1. lsyncd端: 需要进行实时同步的 rsync 客户端机器 IP地址: 192.168.227.128
2. RsyncServer端: 需要同步数据到此端的机器IP地址: 192.168.227.129
默认关闭selinux以及防火墙
Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具
lsyncd的官方地址:https://github.com/axkibe/lsyncd
安装:
shell > yum install epel-release shell > yum install lsyncd rsync
关于基于各种服务器的相关配置文档,安装之后的路径是:/usr/share/doc/lsyncd/examples,示例文档都再此目录下。
settings {
logfile ="/var/log/lsyncd.log",
statusFile ="/var/log/lsyncd.status",
inotifyMode = "CloseWrite or Modify",
maxProcesses = 10,
statusInterval = 10,
nodaemon = false,
maxDelays = 20
}
sync {
default.rsync,
source = "/data/",
target = "rsyncuser@192.168.227.129::fastdfsback",
delete="true",
exclude = { "logs*" },
delay = 10,
rsync = {
bwlimit=200,
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
perms = true,
password_file = "/etc/rsync.password",
_extra = {"--port=3873"}
}
}
创建密码文件
vim /etc/rsync.password # 创建密码文件
123456
chmod 600 /etc/rsync.password # 修改密码文件权限
启动服务:
shell > systemctl enable lsyncd && systemctl start lsyncd
PS: 如果想配置多个目录,王对端服务器上进行同步,配置如下:
default.rsync,
source = "/opt/",
target = "rsyncuser@192.168.50.148::jirawikiapp",
source = "/data/",
target = "rsyncuser@192.168.50.148::jirawikidata",
二: lsyncd 配置说明
settings 部分
,其实就是关于lsyncd工具自身的一些选项设置
sync 部分主要用来定义同步时的一些设置,可以同时同步多个目录,只需要在该代码块中事先定义好多个sync即可 default.rsync : 指定lsyncd运行模式,另外,还有default.direct,default.rsyncssh模式,个人建议缺省 source : 指定要监控的目录,务必全部用绝对路径 target : 要同步到的目标目录,一般为rsync服务端模块下指定的目录 delay : 当命中的事件累计到多少时再触发同步 exclude : 通过此选项排除掉不需要同步的文件,可用它自己的正则进行匹配 delete : 和rsync 的 --delete 作用一样,先清空再同步
下面是关于 rsync 工具自身的一些设置选项
compress : 压缩后再同步
bwlimit : 限速同步,当你不想占满带宽时
archive : 归档模式同步
perms : 保留文件原有属性同步
_extra = {"--port=873"} :扩展的一些配置和参数,这里是因为我们内部的服务器使用了不同的rsync端口,也是为了安全考虑吧,当然在执行的时候依然可以将其他的参数放在此配置中
其实,lsyncd 还支持当监控到某个指定事件时就执行什么样的命令,待自己详读官方文档后再做单独说明,由于是通过时间延迟和累计事件命中次数来触发同步,在设计上要优于inotify,更多内容,如果有兴趣大家可自行参考其官方文档,待续…
三: RsyncServer端搭建,这里也有人叫客户端
lsyncd其实是监听本地目录的文件变化,然后通过rsync server 将本地文件同步到远端。以实现备份的目的。
1. 安装
yum -y install rsync # 安装
2. 修改配置文件
[root@node2 ~]# cat /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
max connections=0
log file=/var/log/rsyncd/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
[fastdfsback]
path = /var/backup/
read only = no
list = yes
auth users = rsyncuser
secrets file = /etc/rsync.password
3. 创建密码文件
vim /etc/rsync.password # 创建密码文件 rsyncuser:123456
chmod 600 /etc/rsync.password # 修改密码文件权限
mkdir /var/log/rsyncd
4. 启动
/usr/bin/rsync --port=873 --address=192.168.227.129 --daemon
四:rsync配置说明
uid #进程对应的用户 gid #进程对应的用户组 use chroot #安全相关 max connections #最大连接数 0代表不限制 timeout = 300 #超时时间, 可选 pid file #进程对应的进程号文件 lock file #锁文件 log file #日志文件 [backup] #模块名称 path #服务器提供访问的目录 ignore errors #忽略错误, 可选 read only = false #可选 list = false #不能列表 hosts allow = 192.168.10.0/24 #允许的ip地址,可选 auth users #虚拟用户 secrets file #虚拟密码
接下来,就可以创建数据进行验证了。
参考链接:
1. https://www.jianshu.com/p/808d173786c4
2. https://klionsec.github.io/2017/11/18/lsyncd/
3:https://www.cnblogs.com/zxci/p/6243574.html