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搭建測試