Lsyncd 即 Live Syncing Daemon,它是开源的数据实时同步工具(后台进程),基于 inotify 和 rsync。Lsyncd 会密切监测本地服务器上的参照目录,当发现目录下有文件或目录变更后,立刻通知远程服务器,并通过 rsync 或 rsync+ssh 方式实现文件同步。这样做的好处就是,你可以利用 Lsyncd 搭建一个 VPS 同步镜像,应用场景例如 CDN 镜像、网站数据备份、网站搬家等等。
发送端需要安装 lsyncd,而接收端不需要安装。
lsyncd 是基于 rsync 的,故发送端安装 lsyncd 后也会自动依赖安装 rsync。
发送端设置 SSH 免密登录
如果想要将发送端的数据同步到接收端,发送端必须拥有免密码登录接收端的权限,可以设置密钥登录来完成。
ssh-keygen -t rsa # 生成秘钥直接按回车
ssh-copy-id 目的IP # 将公钥发送到目标机器
ssh 192.168.1.101 # 测试免密效果
发送端安装 lsyncd
yum -y install epel-release
yum -y install lsyncd
lsyncd --version # 查看 lsyncd 版本
发送端配置 /etc/lsyncd.conf(Lua 语言通过两个“-”注释)
settings {
logfile = "/var/log/lsyncd.log", -- 指定日志文件位置
statusFile = "/var/log/lsyncd.status", -- 指定状态文件位置
inotifyMode = "CloseWrite", -- 当文件被关闭时开始同步
maxProcesses = 1, -- 最大线程,ssh 模式的缺点就是最大线程只能为 1
}
sync {
default.rsyncssh, -- 指定工作模式为 ssh
source = "/home/prometheus-2.31.1.linux-amd64/", -- 源路径
host = "10.31.140.28", -- 目标主机
targetdir = "/home/prometheus-2.31.1.linux-amd64/", -- 目标路径
maxDelays = 1, -- 为了实时同步,一般设置为 1,表示即使只有一个文件改变也同步
delay = 0,
-- init = false,
rsync = {
binary = "/usr/bin/rsync", -- 告诉 lsyncd,rsync 的地址在哪里
archive = true, -- 打包后再同步(打包不等于压缩,打包即可以压缩也可以不压缩)
compress = true, -- 压缩后再同步
verbose = false, -- 输出同步信息
_extra = {
"--include=rules.yml", -- 同步的文件
"--exclude=*" -- 排除掉的文件
}
},
ssh = {
port = 22
}
}
发送端启动 lsyncd
systemctl start lsyncd
systemctl enable lsyncd # 配置开机启动
接收端安装 rsync
检查是否已安装,rsync 配置文件不用做修改。
rpm -qa | grep rsync # rsync 是 git 的依赖,所以如果装了 git,就会有 rsync
netstat -an | grep 873 # 检查 rsync 服务是否启动
systemctl start rsyncd
systemctl status rsyncd # 查看服务状态
systemctl enable rsyncd.service
kill $(ps -aux | grep rsync | awk '{print $2}') # 关闭 lsync
设置 lsyncd 开启自启动
写进 /etc/rc.local
/usr/bin/lsyncd /etc/lsyncd.conf # 启动 lsyncd
# kill $(ps -aux | grep lsync | awk '{print $2}') # 关闭 lsyncd