lsync 負載實現程式碼主從同步
參考檔案: 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 rpm資源,並安裝lsyncd:
rpm -iUvh http:
//mirror
.centos.org
/centos/7/extras/x86_64/Packages/epel-release-7-9
.noarch.rpm
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 =
"[email protected]:/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
|
啟動成功後,我們可以測試一下看看效果,如下圖所示: