Lsyncd:负载均衡之后,服务器的文件双向同步

场景描述:

    在 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语言配置示例,可忽略不看):

lalarm.lua
-----
-- User configuration file for lsyncd.
--
-- While this example does not do anything it shows
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值