1、inotify+rsync實時同步mysql
一、介紹linux
inotify-tools是一種強大的、細粒度的、異步的文件系統事件監控機制,能夠用來監控文件系統的事件。inotify-tools是用c編寫的,除了要求內核支持inotify外,不依賴於其餘。inotify-tools提供兩種工具,一是inotifywait,它是用來監控文件或目錄的變化,二是inotifywatch,它是用來統計文件系統訪問的次數。git
二、實現原理github
三、根據原理進行部署sql
①查看系統是否支持inotifymongodb
[root@nfs-nfs01 ~]# ll /proc/sys/fs/inotify/ -rw-r--r-- 1 root root 0 Aug 22 18:13 max_queued_events -rw-r--r-- 1 root root 0 Aug 28 14:30 max_user_instances -rw-r--r-- 1 root root 0 Aug 22 18:13 max_user_watches
②軟件安裝服務器
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo #安裝epel源才能夠yum安裝inotify yum install -y inotify-tools
③測試監控事件create、delete、close_write、moved_to、moved_from,定義inotify監控命令參數網絡
inotifywait -mrq -e create,delete,moved_to,close_write --format '%w%f' /data #/data爲監控的目錄
④編寫腳本讓rsync與inotify服務結合實現實時同步多線程
cat >>inotify.sh <<EOF #!/bin/sh /usr/bin/inotifywait -mrq --format 「%w%f」 -e moved_to,delete,create,close_write /data|while read line do rsync -az --delete /data/ rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password done EOF
⑤inotify優化併發
[root@nfs-nfs01 ~]# ll /proc/sys/fs/inotify/ -rw-r--r-- 1 root root 0 Aug 22 18:13 max_queued_events #設置監控服務實例能夠監控的事件的個數 -rw-r--r-- 1 root root 0 Aug 28 14:30 max_user_instances #設置用戶能夠開啓的服務進程數 -rw-r--r-- 1 root root 0 Aug 22 18:13 max_user_watches #能夠監控的最大文件數 優化參數調整: echo 「50000000」 >/proc/sys/fs/inotify/max_user_watches echo 「50000000」 >/proc/sys/fs/inotify/max_queued_events
⑥inotifywait命令參數
參數名稱 |
參數說明 |
-m,--monitor ***** |
始終保持事件監聽狀態 |
-r,--recursive ***** |
遞歸監控目錄數據信息變化 |
-q,-quiet ***** |
輸出信息少(只打印事件信息) |
--exclude |
排除文件或目錄時,不區分大小寫 |
--timefmt ***** |
指定時間輸出格式 |
--format ***** |
打印使用指定的輸出相似格式字符串,實際監控輸出的內容 |
-e ***** |
指定監聽的事件,若是省略,表示全部事件都進行監聽 |
⑦inotifywait events監控事件
事件名稱 |
事件說明 |
access |
文件或目錄內容被讀取 |
modify |
文件或目錄內容被寫入 |
attrib |
文件或目錄屬性改變 |
close_write ***** |
文件或目錄關閉,在寫入模式打開以後關閉 |
chose_nowrite |
文件或目錄關閉,在只讀模式打開以後關閉的 |
close |
文件或目錄關閉,無論讀或寫模式 |
open |
文件或目錄被打開 |
moved_to |
文件或目錄被移動到監控的目錄中 |
moved_from |
文件或目錄被移動從監控的目錄中 |
move ***** |
文件或目錄無論移動或是移動出監控目錄都觸發事件 |
create ***** |
文件或目錄建立在監控的目錄中 |
delete |
文件或目錄被刪除在監控的目錄中 |
2、sersync實時同步
一、介紹
數據同步就必然會想到rsync
,通常簡單的服務器數據傳輸會使用ftp/sftp
等方式,可是這樣的方式效率不高,不支持差別化增量同步也不支持實時傳輸。針對數據實時同步需求大多數人會選擇rsync+inotify-tools
的解決方案,可是這樣的方案也存在一些缺陷,sersync
是國人基於前二者開發的工具,不只保留了優勢同時還強化了實時監控,文件過濾,簡化配置等功能,幫助用戶提升運行效率,節省時間和網絡資源。https://github.com/wsgzao/sersync官方資料
二、sersync優勢
①sersync對linux系統文件系統產生的臨時文件和重複的文件操做進行過濾因此在結合rsync同步的時候,節省了運行時耗和網絡資源,所以更快。
②相比較inotify+rsync,sersync配置起來簡單,bin目錄下已經有基本上靜態編譯的2進制文件,配合bin目錄下的xml配置文件直接使用便可。
③另外sersync相比較其餘腳本開源軟件,使用多線程進行同步,尤爲在同步較大文件時,可以保證多個服務器實時保持同步狀態。
④sersync有出錯處理機制,經過失敗隊列對出錯的文件從新同步,若是仍舊失敗,則按設定時長對同步失敗的文件從新同步。
⑤自帶crontab功能,只需在xml配置文件中開啓,便可按要求,隔一段時間總體同步一次,無需再額外配置crontab功能。
⑥sersync有socket與http插件擴展,知足二次開發的須要
三、實現原理圖
四、sersync服務部署
①軟件下載安裝
https://github.com/wsgzao/sersync cd /server/tools/ unzip sersync_installdir_64bit.zip mv sersync_installdir_64bit /usr/local/sersync cd /usr/local/sersync/ mv sersync/* ./ rm sersync/ -rf chmod +x /usr/local/sersync/bin/sersync cp conf/confxml.xml conf/confxml.xml.bak
②修改配置文件
③啓動sersync服務
/usr/local/sersync/bin/sersync -dro /usr/local/sersync/conf/confxml.xml
五、高併發場景無分佈式存儲實時同步解決方案
①inotify(sersync)+rsync 系統文件級別
②drbd文件系統級別
③第三方軟件的同步功能 mysql同步,oracle,mongodb
④業務上,經過程序雙寫
⑤棄用nfs方案