场景描述:
在 Linux 服务器上,通过使用 Nginx 实现负载均衡,或者在阿里云直接购买负载均衡,根据配置的转发规则,不同的请求会被转发到其不同的服务器上进行处理。如果遇到需要上传图片的情况,那最后只有其中一台服务器存有这张图片,而其他服务器则没有。随后,如果请求获取这张图片,但是转发到的恰好是没有存有这张图片的服务器,那么请求就失败了。为了避免这类问题,就需要同步相应的目录上的文件。
Lsyncd 简述:
Lsyncd 是一个简单高效的文件同步工具,通过lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。
安装过程:
1、安装 lua 语言依赖包
yum install lua
yum install lua-devel
2、安装 Lsyncd
yum install lsyncd
这里一定要注意,最好安装最新的版本,笔者安装的版本是 2.2.2 。网上很多教程的版本是2.1.5 ,这个版本有 bug ,但在后续的版本里已经修复,直接安装即可。之后,你可以发现在 etc 目录下,不但多了 lsyncd.conf 配置文件,而且还多了 rsync 工具的配置文件 rsyncd.conf 。这说明 Lsyncd 工具确是使用 rsync 工具创建起来的,通过 rsync 去进行目录的差异同步。
远程前提:
通过 Lsyncd 工具同步负载均衡转发规则下的服务器,需要在涉及的服务器上都安装好 Lsyncd ,一般通过 SSH 远程登录,进行远程同步。因此,在远端被同步的服务器上开启 SSH 无密码登录,请注意用户身份,将对应的用户 user 公钥 id_rsa.pub 复制到被同步的服务器的 .ssh 文件目录下的 authorized_keys 文件里,最后测试是否可以无密码登陆。
如果要实现文件的双向同步,那就要对两台服务器进行差不多的 SSH 配置操作,就可以相互进行无密码登陆了。
chmod 600 /user/.ssh/id_rsa
ssh user@192.168.0.3
配置文件:
vi /etc/lsyncd.conf
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/
--
settings{
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 10,
nodaemon = false,
maxDelays = 7
}
sync{
default.rsync,
source = "/data/wwwroot/default/application",
target = "user@192.168.0.3:/data/wwwroot/default/application",
init = false,
delete = true,
delay = 3,
rsync = {
binary = "/usr/bin/rsync",
compress = true,
archive = true,
verbose = true
}
}
sync{
default.rsync,
source = "/data/wwwroot/default/public",
target = "user@192.168.0.3:/data/wwwroot/default/public",
init = false,
delete = true,
delay = 3,
rsync = {
binary = "/usr/bin/rsync",
compress = true,
archive = true,
verbose = true
}
}
lsyncd /etc/lsyncd.conf
如果要实现文件的双向同步,那就要对两台服务器进行差不多的 Lsyncd 配置操作,下面列出具体需要更改的参数。
logfile 本地存放 Lsyncd 日志的路径,一般直接使用默认的路径就可以了。
statusFile 本地存放 状态文件的路径,一般直接使用默认的路径就可以了。
source 本地源目录路径。
target 远程目的目录路径,注意这里的SSH远程同步写法。
其他参数具体解释(略)
注意事项:
运行 Lsyncd 工具后,可以到源目录下创建几个文本,查看是否能成功同步到远程的目的目录下。如果没有成功,可以到 /var/log/lsyncd/lsyncd.log 文件查看详情。
如果配置了 lsyncd.conf 文件,可以不配置 rsyncd.conf 了。
操作环境:
Linux version 3.10.0-693.11.6.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Thu Jan 4 01:06:37 UTC 2018
附(lua语言配置示例,可忽略不看):
-----
-- User configuration file for lsyncd.
--
-- While this example does not do anything it shows