1. 程式人生 > >lsyncd搭建測試

lsyncd搭建測試

lsyncd

lsyncd實時同步搭建


#########################源碼編譯安裝##############################


從源碼編譯安裝可以使用最新版的lsyncd程序,但必須要相應的依賴庫文件和編譯工具:yum install lua lua-devel asciidoc cmake


從github上下載lsyncd-XXXXXX.zip 的版本使用的是 cmake 編譯工具,無法./configure

下載地址:https://github.com/axkibe/lsyncd.git


安裝:

unzip lsyncd-release-2.2.2.zip

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lsyncd-2.2.2

make && make install


異常問題:

-- The C compiler identification is GNU 4.4.7

-- The CXX compiler identification is unknown

-- Check for working C compiler: /usr/bin/cc

-- Check for working C compiler: /usr/bin/cc -- works

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found. Please set CMAKE_CXX_COMPILER to a valid compiler path or name.

-- Found Lua: /usr/lib64/liblua.so;/usr/lib64/libm.so (found version "5.1.4")

-- Configuring incomplete, errors occurred!

See also "/tmp/lsyncd-release-2.2.2/CMakeFiles/CMakeOutput.log".

See also "/tmp/lsyncd-release-2.2.2/CMakeFiles/CMakeError.log".


解決方案:

yum -y install gcc-c++


設置環境變量:ln -s /usr/local/lsyncd-2.2.2/bin/lsyncd /usr/local/bin/lsyncd

###################################配置文件與參數###############################


配置文件:

cd /usr/local/lsyncd-2.2.2

mkdir etc logs

這裏我們創建2個目錄文件方便存放配置文件以及日誌文件


vim lsyncd.conf


settings

裏面是全局設置,--開頭表示註釋,下面是幾個常用選項說明:


settings {

logfile ="/usr/local/lsyncd-2.2.2/var/lsyncd.log",

statusFile ="/usr/local/lsyncd-2.2.2/var/lsyncd.status",

inotifyMode = "CloseWrite",

maxProcesses = 7,

-- nodaemon =true,

}


sync

裏面是定義同步參數,可以繼續使用maxDelays來重寫settings的全局變量。一般第一個參數指定lsyncd以什麽模式運行:rsync、rsyncssh、direct三種模式:


sync {

default.rsync,

source = "/opt/data",

target = "[email protected]:/opt/data",

maxDelays = 5,

delay = 30,

delete = true,

-- init = true,

rsync = {

binary = "/usr/bin/rsync",

archive = true,

compress = true,

-- bwlimit = 2000

-- rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"

}

}


settings

logfile 定義日誌文件

stausFile 定義狀態文件

inotifyMode 指定inotify監控的事件,默認是CloseWrite,還可以是Modify或CloseWrite or Modify

maxProcesses 同步進程的最大個數。假如同時有20個文件需要同步,而maxProcesses = 8,則最大能看到有8個rysnc進程

nodaemon=true 表示不啟用守護模式,默認


sync

default.rsync :本地目錄間同步,使用rsync,也可以達到使用ssh形式的遠程rsync效果,或daemon方式連接遠程rsyncd進程;

default.direct :本地目錄間同步,使用cp、rm等命令完成差異文件備份;

default.rsyncssh :同步到遠程主機目錄,rsync的ssh模式,需要使用key來認證

source 同步的源目錄,使用絕對路徑。

target 定義目的地址.

對應不同的模式有幾種寫法:

/opt/data :本地目錄同步,可用於direct和rsync模式

192.168.166.145:/opt/data :同步到遠程服務器目錄,可用於rsync和rsyncssh模式,拼接的命令類似於/usr/bin/rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET,剩下的就是rsync的內容了,比如指定username,免密碼同步

192.168.166.145::module :同步到遠程服務器目錄,用於rsync模式

init 這是一個優化選項,當init = false,只同步進程啟動以後發生改動事件的文件,原有的目錄即使有差異也不會同步。默認是true

delete 為了保持target與souce完全同步,Lsyncd默認會delete = true來允許同步刪除。它除了false,還有startup、running值

true:默認。Lsyncd將在目標上刪除任何不在源中的內容。在啟動時和正常操作中被刪除的內容。

false:Lsyncd不會刪除目標上的任何文件。不在啟動或正常運行。(可能覆蓋)

startup:當啟動時,Lsyncd將刪除目標上的文件,但不會在正常操作中刪除。

running:啟動時,Lsyncd不會刪除目標上的文件,但會刪除在正常操作期間刪除的文件。


excludeFrom 排除選項,後面指定排除的列表文件,如excludeFrom = "/etc/lsyncd.exclude",如果是簡單的排除,可以使用exclude = LIST



rsync

delete和exclude本來都是rsync的選項,上面是配置在sync中的,我想這樣做的原因是為了減少rsync的開銷

bwlimit 限速,單位kb/s,與rsync相同(這麽重要的選項在文檔裏竟然沒有標出)

compress 壓縮傳輸默認為true。在帶寬與cpu負載之間權衡,本地目錄同步可以考慮把它設為false

perms 默認保留文件權限


lsyncd.conf可以有多個sync,各自的source,各自的target,各自的模式,互不影響。


啟動:lsyncd -log Exec /usr/local/lsyncd-2.2.2/etc/lsyncd.conf


################################lsyncd.conf其它模式示例#################################


測試:根據需要 我們只測試了遠程主機同步的方法

源地址:192.168.166.150

同步目的地址:192.168.166.145


1、rsync + rsyncd daemon

sync {

default.rsync,

source = "/opt/data",

target = "[email protected]:/opt/data",

delete="running",

delay = 30,

-- init = false,

rsync = {

binary = "/usr/bin/rsync",

archive = true,

compress = true,

verbose = true,

_extra = {"--bwlimit=20000"}

}

}

這個方式要求像rsync一樣配置rsyncd服務端


2、rsync+ssh shell

sync {

default.rsync,

source = "/opt/data",

target = "[email protected]:/opt/data",

maxDelays = 5,

delay = 30,

delete = true,

-- init = true,

rsync = {

binary = "/usr/bin/rsync",

archive = true,

compress = true,

-- bwlimit = 20000

-- rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"

}

}


3、rsync+rsyncssh

sync {

default.rsyncssh,

source = "/opt/data",

host = "192.168.166.145",

targetdir = "/opt/data",

-- excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",

maxDelays = 5,

delay = 0,

-- init = true,

rsync = {

binary = "/usr/bin/rsync",

archive = true,

compress = true,

verbose = true,

_extra = {"--bwlimit=20000"},

},

ssh = {

port = 22

}

}

2和3配置ssh方式同步,達到的效果相同


#################################cpu和load測試結果#######################################


經過測試,三種模式都是基於Rsync的原生態模型方式進行同步,不同的區別在於第一種是基於rsync服務,後兩種是基於rsync和ssh服務,三種同步方式都是通過hash值的校驗,只傳送同步差異文件。


服務器cpu性能:8核8G

在同步40G大小的文件(8000個文件)的測試中,(三種模式)cpu性能一直保持在:


source端

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

30781 root 20 0 162m 34m 1008 R 100.0 0.4 0:13.85 rsync

30659 root 20 0 105m 5980 3576 S 28.2 0.1 1:08.01 sshd


load average: 1.00, 0.55, 0.35


target端

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

27268 root 20 0 103m 6528 3140 S 22.6 0.1 0:16.38 sshd

27277 root 20 0 162m 52m 300 R 20.6 0.7 0:14.09 rsync


load average: 0.13, 0.07, 0.02


################################iptables斷網測試#####################################


iptables斷網測試:

主要測試在同步過程中,網絡突然中斷後,是否能夠繼續同步,以及中斷過程同步的文件在恢復後MD5校驗是否一致

首先在目的同步地址加入一條iptables策略

-A INPUT -s 192.168.166.150/32 -p tcp -m tcp --dport 22 -j REJECT --reject-with icmp-port-unreachable

目的是為了在啟動iptabels時,我們的ssh服務斷開,從而達到中斷網絡同步的過程


[[email protected] data]# md5sum SELF_APK/18/55/51/515518.apk

d26dcdbf656cf329b8e81ea5af7c7af5 SELF_APK/18/55/51/515518.apk

斷開前 我們校驗了源文件的MD5碼


目的地址開啟iptables

[[email protected] data]# service iptables start

iptables: Applying firewall rules: [ OK ]


目的同步地址已經不在同步源地址的文件,這個在日誌中也能看的到

[[email protected] data]# md5sum SELF_APK/18/55/51/515518.apk

md5sum: SELF_APK/18/55/51/515518.apk: No such file or directory


目的地址關閉iptables

[[email protected] data]# service iptables stop

iptables: Setting chains to policy ACCEPT: filter [ OK ]

iptables: Flushing firewall rules: [ OK ]

iptables: Unloading modules: [ OK ]


同步傳輸繼續,完成後效驗MD5碼

[[email protected] data]# md5sum SELF_APK/18/55/51/515518.apk

d26dcdbf656cf329b8e81ea5af7c7af5 SELF_APK/18/55/51/515518.apk


最後我們發現,在網絡中斷前,我們的文件是不在進行傳輸同步,當網絡恢復正常時,傳輸繼續,效驗的MD5也一致。


###################################ssh同步免key##################################


遠端被同步的服務器上開啟ssh無密碼登錄,請註意用戶身份

在服務器之間使用lsyncdssh模式進行同步的時候,註意要先將服務器之間的id_rsa拷貝至lsyncd服務器上。



TO-DO:

其它同步工具:csync2,clsync,btsync,drdb


參考文獻:https://axkibe.github.io/lsyncd/manual/config/layer4/

http://seanlook.com/2015/05/06/lsyncd-synchronize-realtime/


本文出自 “歲月丶傾城” 博客,請務必保留此出處http://alca0126.blog.51cto.com/7826974/1963342

lsyncd搭建測試