實時同步sersync

<a name="vkTtS"></a>html

1 實時同步

<a name="moE1k"></a>linux

1.1 實時同步原理

存儲服務器數據實時同步到備份服務器 <a name="THGDm"></a>git

1.2 什麼是實時同步

實時同步是一種只要當前目錄觸發事件,就立刻同步到遠程的目錄。 <a name="zi5md"></a>github

1.3 爲何要實時同步

保證數據的連續性<br />減小人力成本 <a name="Cgj9v"></a>web

1.4 實時工具的選擇

inotify+rsync<br />sersync+rsync<br />lsyncd<br />Inotify是一個通知接口,用來監控文件系統的各類變化,若是文件存取,刪除,移動。能夠很是方便地實現文件異動告警,增量備份,並針對目錄或文件的變化及時做出響應。rsync+inotify能夠實觸發式實時同步增量備份。<br />sersync是國人基於rsync+inotify-tools開發的工具,不只保留了優勢同時還強化了實時監控,文件過濾,簡化配置等功能,幫助用戶提升運行效率,節省時間和網絡資源。<br />sersync優勢<br />(1)支持經過配置文件管理<br />(2)真正的守護進程socket(不須要寫腳本)<br />(3)能夠對失敗文件定時重傳(定時任務功能)<br />(4)第三方的HTTP接口(例如更新cdn緩存)<br />(5)默認多線程rsync同步shell

<a name="kmz2V"></a>express

2 inotify

inotify:實時監控目錄數數據變化軟件,安裝在存儲服務器。 <a name="yykPa"></a>vim

2.1 inotify軟件部署

yum install -y inotify-tools		#安裝inotify
rpm -ql inotify-tools			#查看軟件包內容
內容:
/usr/bin/inotifywait   		#監控目錄數據變化的命令 
/usr/bin/inotifywatch  		#統計監控事件信息

<a name="prLZA"></a>windows

2.2 監控目錄數據變化的命令

/usr/bin/inotifywait <br />參數:緩存

-m 讓監控過程始終保持下去;沒有這個參數,只監控一次
-r 遞歸監控目錄
format 定義輸出信息格式<br />時間信息  建立什麼文件  事件信息:建立文件
timefmt 具體定義時間的格式
-q 輸出更少的信息,只輸出事件信息
-e 只監控什麼事件

事件:<br />inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data

access 文件或目錄內容被讀取
modify       文件或目錄內容被寫入
attrib 文件或目錄屬性被改變
close_write 文件或目錄被關閉,在打開以後有寫操做而後關閉文件
close_nowrite 文件或目錄被關閉,在打開以後沒有任何操做<br />編寫文件--打開文件--編輯/沒有編輯--關閉文件    
close 文件或目錄被關閉,寫或讀以後被關閉
open 文件或目錄被打開
moved_to 文件或目錄被移動到監控目錄,其它目錄數據移動到監控目錄
moved_from 文件或目錄從監控目錄移除,監控目錄數據移動到其它地方
move 文件或目錄移動到監控目錄或移除監控目錄
create 文件或目錄在監控目錄中被建立出來
delete 文件或目錄在監控目錄中被刪除
delete_self  文件或目錄被刪除
unmount 包含文件或目錄的文件系統被卸載
重要事件: close_write、move、create、delete

<a name="iuksB"></a>

2.3 監控命令語法結構

語法結構:inotifywait 參數信息 監控目錄
inotifywait -mrq --timefmt "%F %T" --format "%T %w%f %e" /data	#監控命令

2019-07-20 22:13:20 /data/oldboy_dir/oldboy04.txt CREATE		#監控的反應信息
# timefmt裏的"%F %T"對應2019-07-20 22:13:20	#format裏的%T對應timefmt裏的"%F %T"
# %w對應監控的目錄 /data/oldboy_dir
# %f對應觸發事件文件數據信息 create
# %e對應顯示觸發的事件信息

實時同步命令格式_看圖王.png <a name="MRKo9"></a>

2.4 編寫實時同步腳本

第一步:進行數據監控

[root@nfs01 ~]#inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data
/data/test.txt
/data/test.txt

第二步:部署好rsync守護進程服務<br />服務端:<br />安裝rsync軟件<br />編輯配置文件<br />建立虛擬(rsync)用戶<br />建立密碼文件並修改權限600<br />建立備份目錄,修改屬主屬組權限<br />啓動服務程序服務/重啓程序<br /> 客戶端:<br />建立密碼文件,並修改權限600,測試傳輸<br />第三步:編寫腳本

[root@nfs01 scripts]#vi inotify_watch.sh 
[root@nfs01 scripts]#cat inotify_watch.sh 
#!/bin/bash
inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data|\
while read line
do
  rsync -az --delete /data/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
done

問題一:<br />執行腳本總有輸出信息,而且腳本不能持續運行,如何實現腳本在後臺一直運行:<br />方法一: 執行腳本後面加上 &

sh /server/scripts/inotify_watch.sh 
# &:讓腳本在後臺運行,但鏈接斷開,腳本就不回運行
# 在編輯腳本時,將-avz中的v去掉,不會再有輸出信息

方法二: 利用專用命令    nohup

nohup sh /server/scripts/inotify_watch.sh &		#腳本一直持續運行,斷開也會運行

若是想要腳本開機運行,能夠寫入/erc/rc.local<br />問題二:數據已經同步完畢,可是腳本還在一直運行       shell知識學習完,有帶解決。 <a name="TDFrl"></a>

3 sersync

sersync軟件實現實時同步:先安裝好inotify+rsync <a name="3K8HN"></a>

3.1 如何部署安裝sersync軟件

第一步:下載sersync軟件<br />http://github.com/wsgzao/sersync<br />第二步:上傳軟件到linux系統

yum install -y lrzsr	# lrzsz:實現Windows,linux互傳文件
rz -y	# 將Windows數據傳輸到linux
sz -y	# 將linux數據傳輸到windows

第三步:安裝部署sersync軟件(二進制包)

unzip sersync_installdir_64bit.zip
mv /server/tools/sersync_installdir_64bit/sersync/ /usr/local/
#	/usr/local/ 第三方軟件目錄

第四步:修改配置文件

[root@nfs01 ~]# vim /usr/local/sersync/conf/confxml.xml

說明:排除指定信息不要進行實時同步
 <filter start="false">
   <exclude expression="(.*)\.svn"></exclude>
   <exclude expression="(.*)\.gz"></exclude>
   <exclude expression="^info/*"></exclude>
   <exclude expression="^static/*"></exclude>
</filter>

說明:指定監控的事件信息
<inotify>
   <delete start="true"/>
   <createFolder start="true"/>
   <createFile start="false"/>
   <closeWrite start="true"/>
   <moveFrom start="true"/>
   <moveTo start="true"/>
   <attrib start="false"/>
   <modify start="false"/>
</inotify>

重點說明:實現實時同步關鍵配置
<sersync>
<localpath watch="/data">
	<remote ip="127.16.1.41" name="backup"/>
	<!--<remote ip="192.168.8.39" name="tongbu"/>-->
	<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
	<commonParams params="-az"/>
	<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
	<userDefinedPort start="false" port="874"/><!-- port=874 -->

sersync服務配置文件說明_看圖王.png<br />第五步:啓動實時同步服務,並檢查測試<br />首先讓程序文件有執行權限 x

[root@nfs01 bin]# chmod +x /usr/local/sersync/bin/sersync

讓程序啓動<br />(1)在程序的bin目錄啓動:

[root@nfs01 bin]# ./sersync -dro /usr/local/sersync/conf/confxml.xml

(2)建立軟連接啓動

[root@nfs01 bin]# ln -s /usr/local/sersync/bin/sersync /usr/local/sbin/sersync
[root@nfs01 bin]# ll /usr/local/sbin/sersync 
[root@nfs01 bin]# lrwxrwxrwx 1 root root 30 Jul 21 00:28 /usr/local/sbin/sersync -> /usr/local/sersync/bin/sersync

(3)加入環境變量

[root@nfs01 bin]# export PATH=$PATH:/usr/local/sersync/bin/		# 臨時設置
[root@nfs01 bin]# vi /etc/profile		# 永久設置
export PATH=$PATH:/usr/local/sersync/bin/		#	添加在文件中
# source /etc/profile 或者 . /etc/profile 讓修改的配置文件生效

而後sersync就可使用了 <a name="xskeA"></a>

3.2 sersync命令參數

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

啓動程序:

sersync -dro /usr/local/sersync/conf/confxml.xml

<a name="sfCmU"></a>

3.3 利用實時同步能夠解決 nfs服務單點問題

QQ圖片20190720150943.png

當用戶存儲數據時,存儲到nfs服務器中,inotify監控到有新數據產生的時候,會同步給web01中的/data01,當nfs服務器壞掉的時候,web01中data掛載目錄點會被卸載,掛載上data01,這樣用戶讀取數據的時候,就會讀取到data01的數據,data01的數據同nfs服務器中的數據同樣。

原文出處:https://www.cnblogs.com/basa/p/11220209.html

相關文章
相關標籤/搜索