3.Sersync/Lsyncd服務(wù)

第一章 為什么需要實時同步

1.實時同步的應(yīng)用場景

1.解決NFS單點故障問題
2.備份NFS數(shù)據(jù)并且提供冗余的服務(wù)功能

2.實時同步的難點

1.什么條件才同步?
2.同步哪些文件?
3.多久同步一次?
4.用什么工具同步?

3.實時同步原理

1.需要部署好rsync守護進程服務(wù),實現(xiàn)數(shù)據(jù)傳輸  (rsync)
2.需要部署好inotifye服務(wù),實現(xiàn)目錄中數(shù)據(jù)變化監(jiān)控 (inotify)
3.將rsync服務(wù)和inotify服務(wù)建立關(guān)系,將變化的數(shù)據(jù)進行實時備份傳輸 (sersync/lsyncd)

第二章 inotify實現(xiàn)同步

1.inotify簡介

Inotify是一種強大的,細粒度的,異步的文件系統(tǒng)事件監(jiān)視機制
Linux2.6.13起加入了inotify支持,通過inotify可以監(jiān)控文件系統(tǒng)中添加,刪除,修改,移動等各種
事件
利用這個內(nèi)核接口,第三方軟件就可以監(jiān)控文件系統(tǒng)下文件的各種變化情況
而inotify-tools正是實施這樣監(jiān)控的軟件

2.inotify實戰(zhàn)

2.1 查看當(dāng)前系統(tǒng)是否支持inotify

[root@nfs01 ~]# uname -r
3.10.0-1062.el7.x86_64
[root@nfs01 ~]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Apr 23 09:09 max_queued_events
-rw-r--r-- 1 root root 0 Apr 23 09:09 max_user_instances
-rw-r--r-- 1 root root 0 Apr 23 09:09 max_user_watches

2.狀態(tài)解釋
max_queued_events 設(shè)置inotify實例事件(event)隊列可容納的事件數(shù)量
max_user_instances 設(shè)置每個用戶可以運行的inotify或者inotifywatch命令的進程數(shù)
max_user_watches 設(shè)置inotifywait或者inotifywatch命令可以監(jiān)視的文件數(shù)量 (單
進程)

2.2 安裝iontify-tools

[root@nfs01 ~]# yum install inotify-tools -y

2.3 inotifywait命令參數(shù)解釋

[root@nfs01 ~]# inotifywait --help
inotifywait參數(shù)說明
參數(shù)名稱 參數(shù)說明
-m ,-monitor      始終保持事件監(jiān)聽狀態(tài)
-r,-recursive     遞歸查詢目錄
-q,-quiet         只打印監(jiān)控事件的信息
-exclude          排除文件或目錄時,不區(qū)分大小寫
-t,-timeout       超時時間
--timefmt         指定時間輸出格式
--format          指定輸出格式
-e,event          后面指定增,刪,改等事件
inotifywait events 事件說明
access 讀取文件或目錄內(nèi)容
modify 修改文件或目錄內(nèi)容
attrib 文件或目錄的屬性改變
close  文件被關(guān)閉
open   文件或目錄被打開
move   移動文件或目錄移動到監(jiān)視目錄
create 在監(jiān)視目錄下創(chuàng)建文件或目錄
delete 刪除監(jiān)視目錄下的文件或目錄
umount 卸載文件系統(tǒng)

2.4 inotify監(jiān)控命令測試

格式化輸出參數(shù)解釋:

%T #調(diào)用并顯示定義好的時間格式
%w #顯示發(fā)生變化的文件的絕對路徑
%f #顯示監(jiān)控到的文件名稱,去掉后只顯示目錄路徑
-e delete,create #指定監(jiān)控文件變化的類型
[root@ceisi ~]# mkdir /test
[root@ceisi ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete,create,modify /test
23/04/21 15:58 /test/oldboy.txt
23/04/21 15:58 /test/oldboy.txt
[root@ceisi ~]# cd /test
[root@ceisi test]# touch oldboy.txt
[root@ceisi test]# echo 123 >oldboy.txt 
[root@ceisi test]#

2.5 inotify結(jié)合rsync實現(xiàn)實時同步

2.6 inotify優(yōu)缺點

inotify優(yōu)點:
1.系統(tǒng)內(nèi)核本身支持
2.監(jiān)控文件系統(tǒng)事件變化
inotify缺點:
1.并發(fā)如果大于200個文(10-100k),同步就會由延遲
2.我們前面的腳本,每次都是全部推送一次,但是確實是增量的,也可以只同步變化的文件
3.監(jiān)控到事件后,調(diào)用rsync同步是單進程(加&并發(fā))
4.我們自己寫的腳本健壯性不高

第三章 sersync實現(xiàn)同步

1.sersync簡介

1.sersync主要用于服務(wù)器同步,web鏡像等功能.
2.基于boost1.41.0,inotify api,rsync command開發(fā).

2.sersync實戰(zhàn)

2.1 主機規(guī)劃

ceisi 172.16.1.100 rsync+inotify+sersync/lsyncd 
#部署rsync服務(wù)客戶端+inotify+sersync或者lsyncd服務(wù)

backup 172.16.1.41 rsync-server
#部署rsync服務(wù)服務(wù)端

2.2 安裝sersync

[root@ceisi ~]# cd /opt/
[root@ceisi opt]# ll
total 0
[root@ceisi opt]# wget http://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@ceisi opt]# ll
total 712
-rw-r--r-- 1 root root 727290 Mar  8  2017 sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@ceisi opt]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz 
[root@ceisi opt]# ll
total 712
drwxr-xr-x 2 root root     41 Oct 26  2011 GNU-Linux-x86
-rw-r--r-- 1 root root 727290 Mar  8  2017 sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@ceisi opt]# mv GNU-Linux-x86 sersync
[root@ceisi opt]# ll
total 712
drwxr-xr-x 2 root root     41 Oct 26  2011 sersync
-rw-r--r-- 1 root root 727290 Mar  8  2017 sersync2.5.4_64bit_binary_stable_final.tar.gz

[root@ceisi opt]# cd sersync/
[root@ceisi sersync]# ll
total 1772
-rwxr-xr-x 1 root root    2214 Oct 26  2011 confxml.xml
-rwxr-xr-x 1 root root 1810128 Oct 26  2011 sersync2
[root@ceisi sersync]# cp confxml.xml confxml.xml.bak
[root@ceisi sersync]# ll
total 1776
-rwxr-xr-x 1 root root    2214 Oct 26  2011 confxml.xml
-rwxr-xr-x 1 root root    2214 Apr 23 16:18 confxml.xml.bak
-rwxr-xr-x 1 root root 1810128 Oct 26  2011 sersync2

2.3 配置文件修改

23 <sersync>
24 <localpath watch="/oldboy">                #監(jiān)聽變化的目錄(目錄指的是本機目錄)
25 <remote ip="172.16.1.41" name="backup"/>   #遠程rsync服務(wù)器的IP地址和模塊名稱
26 <!--<remote ip="192.168.8.39" name="tongbu"/>-->
27 <!--<remote ip="192.168.8.40" name="tongbu"/>-->
28 </localpath>
29 <rsync>
30 <commonParams params="-az"/>            #rsync傳輸?shù)膮?shù)
31 <auth start="true" users="rsync_backup" #rsync虛擬用戶名稱
passwordfile="/etc/rsync.password"/>         #rsync密碼文件路徑
sersync2.conf-0423.jpg

2.4 查看啟動幫助說明

[root@ceisi sersync]# ./sersync2 -h
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
_______________________________________________________
參數(shù)-d:啟用守護進程模式
參數(shù)-r:在監(jiān)控前,將監(jiān)控目錄與遠程主機用rsync命令推送一遍
c參數(shù)-n: 指定開啟守護線程的數(shù)量,默認為10個
參數(shù)-o:指定配置文件,默認使用confxml.xml文件
參數(shù)-m:單獨啟用其他模塊,使用 -m refreshCDN 開啟刷新CDN模塊
參數(shù)-m:單獨啟用其他模塊,使用 -m socket 開啟socket模塊
參數(shù)-m:單獨啟用其他模塊,使用 -m http 開啟http模塊
不加-m參數(shù),則默認執(zhí)行同步程序
________________________________________________________________

2.5 啟動服務(wù)

./sersync2 -rdo confxml.xml

2.6 測試數(shù)據(jù)是否同步

[root@ceisi sersync]# cd /oldboy/
[root@ceisi sersync]# touch test.txt 
[root@ceisi oldboy]# ll
total 4
-rw-r--r-- 1 root root 450 Mar 19 17:43 test.txt
[root@backup backup]# ll
total 4
-rw-r--r-- 1 www www 450 Mar 19 17:43 test.txt

2.7 停止sersync2服務(wù)

[root@ceisi oldboy]# ps -ef|grep [s]ersync2
root      20618      1  0 16:48 ?        00:00:00 ./sersync2 -rdo c
root      20788      1  0 17:08 ?        00:00:00 ./sersync2 -rdo c
[root@ceisi oldboy]# kill 20618
[root@ceisi oldboy]# kill 20788
[root@ceisi oldboy]# ps -ef|grep [s]ersync2
[root@ceisi oldboy]# ll
total 4
-rw-r--r-- 1 root root 450 Mar 19 17:43 test.txt
[root@ceisi oldboy]# \rm -rf test.txt 
[root@ceisi oldboy]# ll
total 0
[root@backup backup]# ll
total 4
-rw-r--r-- 1 www www 450 Mar 19 17:43 test.txt

3.sersync優(yōu)缺點

優(yōu)點:
1.開源免費,國人開發(fā)
缺點:
1.同步文件性能不太好,只能監(jiān)控單個目錄
2.安裝步驟復(fù)雜,沒有啟動文件

第四章 lsyncd實現(xiàn)同步

1.lsyncd介紹

官方地址:

https://github.com/axkibe/lsyncd](https://github.com/axkibe/lsyncd

命令介紹:

Lysncd 實際上是lua語言封裝了inotify和rsync工具,采用了Linux內(nèi)核(2.6.13及以后)里的inotify觸發(fā)機制,然后通過rsync去差異同步,達到實時的效果.
它最令人稱道的特性是,完美解決了`inotify + rsync`海量文件同步帶來的文件頻繁發(fā)送文件列表
的問題 —— 通過時間延遲或累計觸發(fā)事件次數(shù)實現(xiàn).
另外,它的配置方式很簡單,lua本身就是一種配置語言,可讀性非常強.lsyncd也有多種工作模式可
以選擇,本地目錄cp,本地目錄rsync,遠程目錄rsyncssh.
實現(xiàn)簡單高效的本地目錄同步備份(網(wǎng)絡(luò)存儲掛載也當(dāng)作本地目錄),一個命令搞定.

2.lsyncd實戰(zhàn)

2.1lsyncd安裝

[root@ceisi ~]# yum install lsyncd -y

2.2 創(chuàng)建配置文件

只監(jiān)控1個目錄

[root@ceisi ~]# vim /etc/lsyncd.conf 
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 8,
}
sync {
default.rsync,
source = "/oldboy",
target = "rsync_backup@172.16.1.41::backup",
delete = true,
exclude = { ".*" },
delay = 1,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file = "/etc/rsync.password",
_extra = {"--bwlimit=200"}
}
}

監(jiān)控2個目錄

[root@nfs ~]# cat /etc/lsyncd.conf
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 8,
}
sync {
default.rsync,
source = "/data",
target = "rsync_backup@172.16.1.41::data",
delete = true,
exclude = { ".*" },
delay = 1,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file = "/etc/rsync.passwd",
_extra = {"--bwlimit=200"}
}
}
sync {
default.rsync,
source = "/backup",
target = "rsync_backup@172.16.1.41::backup",
delete = true,
exclude = { ".*" },
delay = 1,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file = "/etc/rsync.passwd",
_extra = {"--bwlimit=200"}
}
}

2.3 配置文件解釋

settings {                                                //全局設(shè)置
logfile = "/var/log/lsyncd/lsyncd.log",                  //定義日志文件
statusFile = "/var/log/lsyncd/lsyncd.status",           //定義狀態(tài)文件
inotifyMode = "CloseWrite",          //指定inotify監(jiān)控的事件,還可以是Modify或CloseWrite or Modify。
maxProcesses = 8,                   //最大進程數(shù)
maxDelays = 10,                  //累計到多少所監(jiān)控的事件激活一次同步,即使后面的delay延遲時間還未到
nodaemon = true,                //默認不啟用守護模式
statusInterval = 10,           //將lsyncd的狀態(tài)寫入上面的statusFile的間隔,默認10秒.
}
sync {   //里面是定義同步參數(shù),一般第一個參數(shù)指定lsyncd以什么模式運行,有rsync、rsyncssh、direct三種模式.
default.rsync,    //目錄間同步,使用rsync命令.也可以達到使用ssh形式的遠程rsync效果,或daemon方式連接遠程rsyncd進程.
default.rsyncssh,   //同步到遠程主機目錄,rsync的ssh模式,需要使用key來認證.
default.direct,     //本地目錄間同步,使用cp、rm等命令完成差異文件備份.
source = "/data",   //同步的源目錄,即監(jiān)控的目錄.
target = "rsync_backup@172.16.1.41::data",  //同步的目標模塊,用于rsync模式.
target = "rsync_backup@172.16.1.41:/data",  //同步的目標目錄,可用于rsync和rsyncssh模式.
target = "/tmp",  //同步的本地目標目錄,可用于direct和rsync模式.
delete = true, //讓目標目錄和源目錄數(shù)據(jù)保持一致。
init = true,   //當(dāng)值為false,只同步進程啟動以后發(fā)生改動事件的文件,原有的目錄即使有差異也不會同步.
delay = 15,         //延時15秒同步,可避免過于頻繁的同步.
excludeFrom = "",   //排除選項,后面指定排除的列表文件.
exclude = { ".*" },  //排除匹配到的項,這里是排除的是隱藏文件.
rsync = {
binary = "/usr/bin/rsync", //rsync命令的絕對路徑.
archive = true, //遞歸,即同步子目錄的內(nèi)容。
compress = true, //傳輸過程中壓縮文件數(shù)據(jù),相對其他壓縮工具而言,它可以獲得更好的壓縮率,但是需要消耗CPU資源.
verbose = true,    //增加在傳輸過程中獲得的信息量,提供有關(guān)正在傳輸文件的信息.
password_file = "/etc/rsync.password", //密碼文件路徑
_extra = {"--bwlimit=1000"}           //傳輸限速,單位kb.
}
}

2.4 啟動命令

[root@ceisi ~]# systemctl start lsyncd
[root@ceisi ~]# systemctl enable lsyncd
[root@ceisi ~]# ps -ef|grep [l]syncd
root       2128      1  0 19:02 ?        00:00:00 /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf

2.5 檢查測試

[root@ceisi oldboy]# echo 123 >oldboy.txt
[root@ceisi oldboy]# cat oldboy.txt 
123
[root@backup backup]# cat oldboy.txt 
123

3.lsyncd優(yōu)缺點

優(yōu)點:
1.安裝簡單,自帶啟動文件
2.同步速度快,效率高
缺點:無
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容