sersync/lsync實時同步

第一章 爲什麼需要實時同步

1.第二階段實時同步解決了什麼問題:

解決 NFS單點故障問題
備份NFS數據並且提供冗餘的服務功能

2.實時同步難點

什麼條件才同步
多久同步一次
用什麼備份方式同步
用什麼工具同步

第二章 inotify簡介

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

關係圖
在這裏插入圖片描述

第三章 Inotify實時同步

1.查看當前系統是否支持inotify

[root@nfs ~]# uname -r
3.10.0-862.el7.x86_64
[root@nfs ~]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r–r-- 1 root root 0 Oct 21 10:47 max_queued_events
-rw-r–r-- 1 root root 0 Oct 21 10:47 max_user_instances
-rw-r–r-- 1 root root 0 Oct 21 10:47 max_user_watches
===== ===== ===== ===== ===== ===== ===== ===== ===== ===== ===== ===== ===== =====
max_queued_events =====>設置inotify實例事件(event)隊列可容納的事件數量
max_user_instances =====>設置每個用戶可以運行的inotify或者inotifywatch命令的進程數
max_user_watches =====>設置inotifywait或者inotifywatch命令可以監視的文件數量(單進程)

2.安裝inotify-tools

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

3.inotifywait詳細參數解釋

inotifywait參數說明
參數名稱 參數說明
-m ,-monitor 始終保持事件監聽狀態
-r,-recursive 遞歸查詢目錄
-q,-quiet 只打印監控事件的信息
-exclude 排除文件或目錄時,不區分大小寫
-t,-timeout 超時時間
–timefmt 指定時間輸出格式
–format 指定輸出格式
-e,event 後面指定增,刪,改等事件
inotifywait events 事件說明
access 讀取文件或目錄內容
modify 修改文件或目錄內容
attrib 文件或目錄的屬性改變
close_write 修改真實文件內容
close_nowrite
close
open 文件或目錄被打開
moved_to 文件或目錄移動到
moved_from 文件或目錄從…移動到
move 移動文件或目錄移動到監視目錄
create 在監視目錄下創建文件或目錄
delete 刪除監視目錄下的文件或目錄
delete_self
umount 卸載文件系統

4.查看inotify默認參數

[root@nfs01 ~]# sysctl -a |egrep max_queued_events
fs.inotify.max_queued_events = 16384
[root@nfs01 ~]# sysctl -a |egrep max_user_watches
fs.epoll.max_user_watches = 201256
fs.inotify.max_user_watches = 8192
[root@nfs01 ~]# sysctl -a |egrep max_user_instances
fs.inotify.max_user_instances = 128

5.針對上述命令進行測試

參數解釋:

%T #調用並顯示定義好的時間格式
%w #顯示發生變化的文件的絕對路徑
%f #顯示監控到的文件名稱,去掉後只顯示目錄路徑
-e delete,create #指定監控文件變化的類型
1.開啓兩個窗口:測試create和delete

inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M’ --format ‘%T %w%f’ -e delete,create /backup
2.測試close_write

inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M’ --format ‘%w%f’ -e close_write /backup
3.打印出事件類型

inotifywait -mrq --format ‘%w%f %e’ -e delete,create /backup

6.把客戶端監控到情況出發rsync推送變化的文件

#!/bin/bash

Path=/data
backup_Server=172.16.1.41
export RSYNC_PASSWORD=123456

/usr/bin/inotifywait -mrq --format ‘%w%f’ -e create,close_write,delete /data | while read line
do
echo ${line}
if [ -f ${line} ]
then
rsync -az linersyncbackup@{line} rsync_backup@{backup_Server}::data
else
rsync -az --delete /data/ rsync_backup@${backup_Server}::data
fi
done

7.inotify優缺點

inotify優點
1)監控文件系統事件變化

inotify缺點
1)併發如果大於200個文(10-100k),同步就會由延遲
2)我們前面的腳本,每次都是全部推送一次,但是確實是增量的,也可以只同步變化的文件
3)監控到事件後,調用rsync同步是單進程(加&併發)
4)我們自己寫的腳本健壯性不高

第四章 sersync簡介

1.sersync介紹

以下內容摘抄sersync作者官網的說明

sersync主要用於服務器同步,web鏡像等功能.
基於boost1.41.0,inotify api,rsync command開發.
目前使用的比較多的同步解決方案是inotify-tools+rsync

2.sersync優點

1.sersync是使用c++編寫,而且對linux系統文件系統產生的臨時文件和重複的文件操作進行過濾(詳細見附錄,這個過濾腳本程序沒有實現),所以結合rsync同步的時候,節省了運行時耗和網絡資源,因此更快
2.相比較上面兩個項目,sersync配置起來很簡單,其中bin目錄下已經有基本上靜態編譯的2進制文件,配合bin目錄下的xml配置文件直接使用即可.
3.另外本項目相比較其他腳本開源項目,使用多線程進行同步,尤其在同步較大文件時,能夠保證多個服務器保持同步狀態
4.本項目有出錯處理機制,通過失敗隊列對出錯的文件重新同步,如果仍舊失敗,則每10個小時對同步失敗的文件重新同步
5.本項目自帶crontab功能,只需在xml配置文件中開啓,即可按照您的要求,隔一段時間整體同步一次,無須在額外配置crontab功能
6.本項目socket與http插件拓展,滿足您二次開發的需要.

第五章 sersync安裝部署

1.主機規劃

nfs-server 172.16.1.31 rsync+inotify+sersync nfs-client
backup 172.16.1.41 rsync-server nfs-server

2.安裝sersync

cd /opt/
wget http://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
tar zxf sersync2.5.4_64bit_binary_stable_final.tar.gz
mv GNU-Linux-x86 sersync
cd sersync
cp confxml.xml confxml.xml.bak

3.配置解釋

#需要監控的目錄
#遠程rsync服務器的IP地址和模塊名稱
#rsync傳輸的參數
#rsync密碼文件路徑 #

4.配置文件修改

23
24
25
26
27
28
29
30
31

5.查看幫助說明

[root@nfs /opt/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


參數-d:啓用守護進程模式
參數-r:在監控前,將監控目錄與遠程主機用rsync命令推送一遍
c參數-n: 指定開啓守護線程的數量,默認爲10個
參數-o:指定配置文件,默認使用confxml.xml文件
參數-m:單獨啓用其他模塊,使用 -m refreshCDN 開啓刷新CDN模塊
參數-m:單獨啓用其他模塊,使用 -m socket 開啓socket模塊
參數-m:單獨啓用其他模塊,使用 -m http 開啓http模塊
不加-m參數,則默認執行同步程序


[root@nfs /opt/sersync]#

6.啓動服務

./sersync2 -rdo confxml.xml

7.測試數據是否同步

backup服務器操作:

1秒查看一下/data目錄下文件的個數

cd /data
while true ;do ls |wc -l;sleep 0.1;done
nfs服務端操作:

cd /data
for i in {1…1000};do echo “i";echo"{i}"; echo "{i}” > ${i}.txt;sleep 0.1;done

第六章 lsyncd同步

1.官方地址

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

2.lsyncd介紹

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

3.lsyncd安裝

yum install lsyncd -y

4.創建配置文件

只監控1個目錄

[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 = “[email protected]::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"}
}
}
監控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 = “[email protected]::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 = “[email protected]::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"}
}
}

5.配置文件解釋

參考網友博客

https://www.cnblogs.com/zxci/p/6243574.html

6.啓動命令

systemctl start lsyncd

7.檢查測試

backup測試

cd /data
while true ;do ls |wc -l;sleep 0.1;done

NFS測試

cd /data
for i in {1…1000};do echo “i";echo"{i}"; echo "{i}” > ${i}.txt;sleep 0.1;done

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章