Lsyncd 服务器间实时、双向、多模式文件同步

0. 背景

通常web站点为了提升可用性都会使用多台服务器配置负载均衡, 但若是站点须要上传附件的话就会遇到一个问题, 上传到服务器内的附件如何可以让两台服务器都访问的到?html

通常状况咱们能够用这些方法:git

  • 大型站点能够考虑搭建专用的文件存储集群,能够考虑使用GlusterFS、Lustre、MooseFS、Ceph来实现。
  • 若是在云环境下可使用NAS,可是NAS只能做为一种临时性的存储方案,由于一旦NAS故障了就不存在什么高可用了。
  • 介于NAS的稳定性,咱们能够对NAS集群化,配合其余存储复制解决方案,例如使用NFS+DRBD的方式来实现。
  • 较中小型的站点能够考虑将文件直接存储在每台服务器的磁盘上,使用代码触发文件同步,或者使用rsync类的工具进行文件同步。

本文主要针对最后一种,直接存储在服务器本地磁盘的方式来讲明。github

1. 简介

lsyncd 是一个支持实时、双向、多机器的多模式文件同步工具。 使用 Lua 语言封装,采用 Linux 内核(2.6.13 及之后)的 inotify 触发机制,而后经过 rsync 作差别同步,达到实时的效果。web

为何咱们不直接使用rsync作文件同步,而要使用lsyncd呢? 这就要说如下lsyncd的主要特色:bash

  1. 实时性
  • 使用rsync作同步的状况下 通常都须要额外配置定时任务触发。那么定时任务配置多长时间呢? 文件较小的状况下能够配置每分钟,可是依然可能存在50多秒的空白期,当访问量较大时这段时间内的用户访问都会出现404。 而文件较大的状况下呢,若是时间设置的短了,可能上一次同步任务还未完成就已经到了下一次同步任务启动的时间,最终的状况可能会致使出现多个相同文件的同步任务把系统资源耗尽。但若是同步的时间设置的长了呢又会留下空白期。
  • 使用lsyncd的状况下 与rsync不一样,不须要建立定时任务,文件一旦修改即发起同步。固然也能够灵活的配置修改后延迟多久再同步,或者接收到了几回修改后再同步。
  1. 高效率
  • 使用rsync 众所周知,rsync的每一次同步任务都是将路径下的全部文件、子文件遍历,而后校验对比,须要消耗至关的系统资源或网络资源。
  • 使用lsyncd lsync只对修改的这一个文件作校验和同步,不作额外无用的资源消耗。
  1. 同步方式 lsyncd与rsync同样,支持本机文件同步、rsync协议传输同步、ssh协议传输同步。其实lsyncd也是利用了rsync的二进制文件作文件校验与传输。

lsync支持使用多种协议传输文件,本文只列举其中一种。服务器

2. 部署和使用

2.1. 安装

安装其实很简单只须要使用yum网络

yum install -y epel-release 


#安装
yum install -y rsync lsyncd

复制代码

2.2. 修改配置

#默认lsyncd配置文件路径
/etc/lsyncd.conf
#默认lsyncd日志路径,使用yum安装会自动配置日志截断,不须要额外干预
/var/log/lsyncd/lsyncd.log

#默认的rsync路径
/etc/rsyncd.conf
#默认的rsync日志路径
/var/log/messages
复制代码

在两台服务器上修改rsyncd配置, 在rsync配置内新增一个area,受权指定ip或者网段的设备进入指定路径读写 hosts allow配置两台服务器对方的ip 具体的配置项说明详见:download.samba.org/pub/rsync/r…负载均衡

#cat /etc/rsyncd.conf 
uid = root
gid = root
use chroot = yes
max connections = 10
pid file = /var/run/rsyncd.pid
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 *.xz

[ops]
path = /root/ops
ignore errors
read only = no
hosts allow = 192.168.0.1 192.168.0.2
hosts deny = *
复制代码

配置lsyncd.conf,一样分别在两台服务器上作配置,其中的target须要配置对方的ip 配置项说明详见:axkibe.github.io/lsyncd/manu…ssh

# cat /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 = 7,
  nodaemon = false,
  insist = true
  }

sync {
    default.rsync,
    source    = "/root/ops/",
    target    = "192.168.0.11::cs-conf-ops/",
    delete= "running",
    exclude = {
      ".*"
    },
    delay = 0,
    rsync = {
        binary    = "/usr/bin/rsync",
        archive   = true,
        compress  = false,
        verbose   = true
        }
    }
复制代码

2.3 启动服务

systemctl start rsyncd
systemctl start lsyncd
systemctl enable lsyncd
systemctl enable rsyncd
复制代码

2.4 验证

能够在其中一台服务器建立或者修改一个文件,看看另一台有没有作出相应的变更工具

相关文章
相关标签/搜索