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 驗證

能夠在其中一臺服務器建立或者修改一個文件,看看另一臺有沒有作出相應的變更工具

相關文章
相關標籤/搜索