每秒傳輸文件200個mysql
Rsync放在定時任務中也只是一分鐘執行一回,要想達到實時的效果,爲防止單點nfs架構故障,再啓動一臺nfs服務器做爲主nfs服務器的備份服務器,此時須要inotify實時同步數據(秒級別同步),而這臺備份nfs服務器能夠做爲rsync備份服務器sql
Inotify是一種異步的文件系統事件監控機制軟件,經過inotify能夠監控文件系統中添加,刪除,修改,移動等各類事件,利用這個內核接口,第三方軟件就能夠監控文件系統性文件的各類變化狀況。mongodb
Inotify的軟件版本vim
(1)inotify-tools緩存
(2)sersync服務器
(3)lsyncd架構
其中sersync版本軟件是rsync與inotify的結合版本併發
雲yum倉庫安裝oracle
從網上下載一個epel.repo的yum源異步
(1)先查看wget軟件包是否安裝,若沒有則yum安裝wget
# yum -y install wget
(2)# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
把文件下載到這個位置 從哪裏下載
(3)# yum -y clean all
(4)# yum makecache
Inotify安裝步驟
# yum -y install inotify-tools
# which inotifywait
inotifywait參數 |
含義說明 |
-r --recursive |
遞歸查詢目錄 |
-q --quiet |
打印不多的信息,僅僅打印監控事件的信息 |
-m,--monitor |
始終保持事件監聽狀態 |
--exclude |
排除文件或目錄時,不區分大小寫。 |
--timefmt |
指定時間輸出的格式 |
--format |
打印使用指定的輸出相似格式字符串 |
-e,--event |
經過此參數能夠指定須要監控的事件,以下一個列表所示 |
-e :--event的各類事件含義
Events |
含義 |
access |
文件或目錄被讀取 |
modify |
文件或目錄內容被修改 |
attrib |
文件或目錄屬性被改變 |
close |
文件或目錄封閉,不管讀/寫模式 |
open |
文件或目錄被打開 |
moved_to |
文件或目錄被移動至另一個目錄 |
move |
文件或目錄被移動到另外一個目錄或從另外一個目錄移動至當前目錄 |
create |
文件或目錄被建立在當前目錄 |
delete |
文件或目錄被刪除 |
umount |
文件系統被卸載 |
人工測試監控事件
開啓兩個窗口
測試create(創新事件)
# inotifywait -mrq --timefmt '%y %m %d %H %M' --format '%T %w %f' -e create /backup
-mrq:-m 進行不間斷持續監聽
-q 只輸入簡短信息
-r 遞歸監控整個目錄包括子目錄
--timefmt ‘’ 指定輸出的時間格式
「%y %m %d %H %M」----「年 月 日 小時 分鐘」
--format ‘’ 輸出的不只是時間,還有路徑,會按照指定的格式輸出變化的路徑
「%T %w %f」-----「時間 路徑 文件名」
-e 指定監控事件類型,「以create建立事件爲例」
/backup 監控的目錄
%w%f 表達的是路徑+文件名,也就是絕對路徑;
若管道符給rsync,就能夠實時傳送建立事件
測試delete(刪除事件)
# inotifywait -mrq --timefmt '%y %m %d %H %M' --format '%T %w %f' -e delete /backup
當刪除指定目錄的文件時,delete事件有更新跟蹤
測試close_write(寫關閉事件)以write方式打開文件並關閉
close_nowrite 以非write方式打開文件並關閉
當在指定目錄中,寫入文件信息或建立文件預備寫入信息時,寫關閉時間會更新信息,記錄狀況。一般監控「echo」、「touch」、「vim」命令。
# inotifywait -mrq --timefmt '%y %m %d %H %M' --format '%T %w %f' -e close_write /backup
測試moved_to(移動事件)將文件移入被監測的目錄
moved_from將文件移動被監測的目錄出去
# inotifywait -mrq --timefmt '%y %m %d %H %M' --format '%T %w %f' -e moved_to /backup
編寫inotify實時監控腳本
將inotify實時監控放在後臺(在命令後面加「&」)
# inotifywait -mrq --timefmt '%y %m %d %H %M' --format '%T %w %f' -e moved_to /backup &
# backup_Server=備份服務器的IP地址
Inotify絕對路徑 -mrq --format ‘%w%f’ -e create,close_write,delete /data | while read line
Rsync絕對路徑
命令 | while read line(變量)默認將管道符左邊的值複製到line這個變量中,執行while循環
關鍵參數調整
在/proc/sys/fs/inotify目錄下有三個文件,對inotify機制有必定的限制
(1)max_user_watches:設置inotifywait或inotifywatch命令能夠監視的文件數量(單進程)
(2)max_user_instances:設置每一個用戶能夠運行的inotifywait或inotifywatch命令的進程數
(3)max_queued_events:設置inotify實例事件(event)隊列可容納的事件數量。
inotify優勢及缺點
(1)優勢
監控文件系統事件變化,經過同步工具實現實時數據同步。
(2)缺點
sersync功能多:(inotify+rsync命令)
1)支持經過配置文件管理
2)真正的守護進程socket
3)能夠對失敗文件定時重傳(定時任務功能)
4)第三方的HTTP接口(例如:更新cdn緩存)
5)默認多進程rsync同步
1)inotify(sersync)+ rsync,是文件級別的。
2)drbd文件系統級別,文件系統級別,基於block塊同步,缺點:備節點數據不可用
3)第三方軟件的同步功能:mysql同步(主從複製),oracle,mongodb
4)程序雙寫,直接寫兩臺服務器。
5)利用產品業務邏輯解決(讀寫分離,備份讀不到,讀主)
架構解析:
一臺服務器的讀寫速度成爲吞吐量
NFS的單主雙寫模式(當讀取壓力大時使用該架構,但爲單點、不可擴容、吞吐量低,成本高)
單主模式的的吞吐量低,不能無限擴容,小企業纔會使用,大中企業不會使用這種架構
用戶上傳的圖片、附件存儲在主NFS中,可是主NFS經過rsync+inotify進行實時同步,同步兩個徹底同樣的做爲備份:NFS備份1、NFS備份2;同步的目的在於Web服務器讀取數據NFS備份中上傳過來的數據
Web服務器將讀取的壓力再也不給主NFS,而是均衡負載到NFS備份1、NFS備份2上。這樣。寫入的壓力給了主NFS,讀取的壓力在NFS備份上,這種方法稱爲讀寫分離,能夠提升NFS性能(一般,互聯網20%的壓力在寫入,80%的壓力在讀取,至關於多臺NFS分擔壓力)。
NFS的雙主雙寫模式(當寫入壓力大時使用該架構,網卡的使用要求極高,通常爲萬兆網卡)
環境後方爲兩個雙主NFS服務器(記一個爲IP1,一個爲IP2),若開發時設定圖片在IP1中寫入,視頻在IP2中寫入,這樣圖片和視頻的寫入壓力被分散。
假設,Web服務器的掛載目錄都有兩個共享目錄(一個爲/backup1,、另外一個爲/backup2),把IP1的主NFS服務器掛載到/backup1上,把IP2的主NFS服務器掛載到/backup2上,每臺Web服務器都將NFS存儲掛載到不一樣的共享目錄上。開發默認,不論圖片仍是附件都先經過/backup1目錄中讀取,若/backup1中沒有讀取到,就去/backup2中讀取,若都爲讀取到目標數據,則不存在該目標數據。一般,用來緩解NFS的寫入壓力。
集羣架構的搭建
NFS與NFS之間經過rsync和inotify傳遞數據,進行數據間的實時同步(備份),NFS與Web服務器之間經過遠程掛載進行數據共享