参考文件: https://www.zyku.net/centos/1713.html
检查错误命令: lsyncd -pidfile /tmp/lsyncd.pid /etc/lsyncd.conf
注意事项,配置不支持#注释,配置不支持#注释,配置不支持#注释 重要的事情说三遍浪费我半天时间
使用多台Linux服务器通过Nginx做负载均衡,根据配置的转发规则,不同的请求会被转发到其不同的服务器上进行处理,那么这个时候就存在一个问题,多台服务器上的数据如何能保持一致,比如:用户在A服务器上传了一张图片,但是B服务器上没有,如果其他用户的请求被分配到了B服务器上,那么请求就会变成404,为了避免这类问题,就需要每台服务器之间数据保持实时双向同步。
本文主要介绍使用Lsyncd工具在两台服务器上做实时双向同步。
注意:Lsyncd存在数据被替换风险,操作前请做好数据备份!
Lsyncd 是一个简单高效的文件同步工具,通过lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。
首先在两台服务器上分别安装 Lsyncd:
安装lsyncd依赖包:
yum
install
lua lua-devel pkgconfig gcc asciidoc
|
,安装lsyncd:
yum
install
lsyncd
|
复制lsyncd配置文件:
cp
/usr/share/doc/lsyncd-2
.2.2
/examples/lrsync
.lua
/etc/lsyncd
.conf
|
查看lsyncd版本:
到这一步lsyncd已经安装好了。
下面进行两台服务器之间做免密登录设置,互相可以免密登录:
分别在两台服务器执行下面命令,生成key(以下操作两台服务器都要同时进行):
ssh
-keygen
#默认全部回车
|
然后执行下面命令:
ssh
-copy-
id
ip
#这里的ip地址为想要连接的那台服务器ip地址,并非本机ip
|
命令执行后输入“yes”,然后输入密码,即可连接到第二台服务器,如下图所示:
然后执行下面命令测试一下从这台服务器登录到另外一台服务器,不输入密码是否能成功:
ssh
ip
|
到这里我们就完成了两台服务器之间互相无密码登录。
配置lsyncd:
在A服务器根目录创建创建一个目录“download”,B服务器创建一个目录“public”,进行演示这两个目录互相实时同步。
编辑lsyncd配置文件:
vim
/etc/lsyncd
.conf
|
在A服务器配置文件中添加如下配置信息(B服务器同样需要添加,修改下源目录和远程目录即可):
----
-- User configuration
file
for
lsyncd.
--
-- Simple example
for
default
rsync
.
--
settings {
logfile =
"/var/log/lsyncd.log"
,
statusFile =
"/tmp/lsyncd.stat"
,
inotifyMode =
"CloseWrite or Modify"
,
maxProcesses = 5,
maxDelays = 1,
-- nodaemon =
true
,
}
sync
{
default.
rsync
,
source
=
"/download"
,
target =
"root@116.85.xx.xx:/public"
,
-- excludeFrom =
"/etc/rsyncd.d/rsync_exclude.lst"
,
rsync
= {
binary =
"/usr/bin/rsync"
,
archive =
true
,
compress =
true
,
verbose =
true
,
}
}
|
启动lsyncd服务,并设置开机启动:
systemctl start lsyncd
|
启动完成后查看lsyncd状态,确保lsyncd启动成功:
systemctl status lsyncd
|
设置开机启动:
systemctl
enable
lsyncd
|
启动成功后,我们可以测试一下看看效果,如下图所示:
假如要排除某个文件或者文件夹可以这样配置