實時備份工具之inotify+rsync

 1.inotify簡介

  inotify 是一個從 2.6.13 內核開始,對 Linux 文件系統進行高效率、細粒度、異步地監控機制, 用于通知用戶空間程序的文件系統變化。可利用它對用戶空間進行安全、性能、以及其他方面的監控。Inotify 反應靈敏,用法非常簡單,并且比 cron 任務的繁忙輪詢高效得多。如果內核版本不低于 2.6.13,系統就支持 inotify。 如果存在
/usr/include/sys/inotify.h 文件, 表明內核支持 inotify。

[root@localhost ~]#  ls -l /proc/sys/fs/inotify/     #列出文件目錄,出現下面的內容,說明服務器內核支持inotify
total 0
-rw-r--r-- 1 root root 0 Oct 13 05:39 max_queued_events
-rw-r--r-- 1 root root 0 Oct 13 05:39 max_user_instances
-rw-r--r-- 1 root root 0 Oct 13 05:39 max_user_watches

? ? ? ?2.inotify的作用

  inotify 可以監控文件,也可以監控目錄。當監控目錄時,它可以同時監控目錄及目錄中的各子目錄及文件的。此外, inotify 使用文件描述符作為接口,因而可以使用通常的文件 I/O 操作 select、 poll 和 epoll 來監視文件系統的變化。

  

  3.inotify實現數據實時同步原理

  無論是手動執行 rsync 還是把 rsync 客戶端發出的數據同步請求命令做成周期性任務計劃, 每隔一段時間不管有沒有數據變化都發出一次數據同步請求命令, 同步一次數據。 服務端和客戶端都有時間差。所以, 使用內核提供的 inotify 機制,當數據發生改變時(刪除、修改等)就觸發 rsync 客戶端發出數據 同步請求。 從而實現數據的實時傳輸。
rsync + inotify 機制實現的兩臺服務器數據同步如下圖如示:

  4.inotify的安裝與使用

[root@localhost ~]# yum install -y inotify-tools
[root@localhost ~]# inotifywait -mrq --timefmt '%d%m%Y %H:%M' --format '%T %w%f' -e create /backup  #創建對目錄/backup的監控
17102017 00:02 /backup/1.txt
17102017 00:02 /backup/2.txt
17102017 00:02 /backup/3.txt
17102017 00:02 /backup/4.txt
17102017 00:02 /backup/5.txt

  5.inotify之inotifywait命令詳解

參數詳解:
-r:遞歸查詢目錄
-q:打印監控時間信息
-m:始終保持時間監聽狀態
--excludei: 排除文件或目錄時,不區分大小寫。
--timefmt: 指定時間輸出的格式
--format: 打印使用指定的輸出類似格式字符串
a、 %w:顯示被監控文件的文件名;
b、 %f:如果發生某事件的對象是目錄,則顯示被監控目錄的名字;默認顯示為空串;
c、 %T:使用--timefmt 選項中自定義的時間格式;
d、 %e 表示發生的事件
e、 %Xe 事件以“X”分隔
-e:指定需要監控的事件
access: 文件或目錄被讀取
modify: 文件或目錄內容被修改
attrib: 文件或目錄屬性被改變
close: 文件或目錄封閉,無論讀/寫模式
open:文件或目錄被打開
move_to:文件或目錄被移動到另外一個目錄
move:文件或目錄被移動另一個目錄或從另一個目錄移動到當前目錄
create:文件或目錄被創建在當前目錄
delete:文件或目錄被刪除
unmount:文件系統被卸載
常用組合:close_write,modify,delete,create,attrib 

  6.編寫監控腳本

[root@nfs scripts]# vim inotify.sh
#!/bin/bash
/usr/bin/inotifywait -mrq '%w%f' -e close_write,modify,delete,create /backup \
| while read line
do
cd /backup && rsync -azP ./ rsync_bakup@192.168.0.175::backup/ --password-file=/etc/rsync.password >/dev/null 2>&1
done
exit 0
[root@nfs scripts]# sh inotify.sh &             #<==運行腳本監控/backup
[root@nfs scripts]# touch /backup/{1..10}.log           #<==NFS上創建文件進行測試    
[root@backup backup]# ll                    #<==備份服務上查看是否備份成功   
total 4
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 10.log
drwxr-xr-x 2 rsync rsync 4096 Oct 12 21:43 192.168.0.165
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 1.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 2.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 3.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 4.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 5.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 6.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 7.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 8.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 9.log
[root@nfs scripts]# echo "/bin/bash /server/scripts/inotify.sh &" >> /etc/rc.local  #<==設置開機啟動

  7.修改inotify默認參數(inotify默認內核參數值太小)

查看系統默認參數值
sysctl -a | grep max_queued_events
結果是:fs.inotify.max_queued_events = 16384
sysctl -a | grep max_user_watches
結果是:fs.inotify.max_user_watches = 8192
sysctl -a | grep max_user_instances
結果是:fs.inotify.max_user_instances = 128
修改參數:
sysctl -w fs.inotify.max_queued_events="99999999"
sysctl -w fs.inotify.max_user_watches="99999999"
sysctl -w fs.inotify.max_user_instances="65535"
vim /etc/sysctl.conf #添加以下代碼
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
:wq! #保存退出參數說明:
max_queued_events:
inotify隊列最大長度,如果值太小,會出現"** Event Queue Overflow **"錯誤,導致監控文件不準確
max_user_watches:
設置inotifywait或inotifywatch命令可以監視的文件數量(單進程)
max_user_instances:
每個用戶創建inotify實例最大值
【inotify在實際生產環境中,對于50-200KB的文件,inotify的最發并發量為200-300,如果客戶端寫入速度大于這個量,將會造成短暫的延遲】

  8.總結

1 rysnc+inotify實時備份流程:
2 a.實現從NFS客戶端到rsync服務端的rsync的部署
3 b.實現從NFS客戶端對NFS目錄文件系統時間的實時監控
4 c.當監控到NFS目錄文件系統事件變化后,觸發rsync推送變化的文件

1 高并發數據實時同步方案:
2 (1)inotify(sersync)+rsync,是文件級別
3 (2)drbd文件系統級別,基于block塊文件
4 (3)第三方軟件的同步功能:
5 mysql同步,oracle,mongodb
6 (4)程序雙寫,直接寫入兩臺服務器
7 (5)業務邏輯解決(讀寫分離,備讀不到,讀主)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535370.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nginx proxy_cache緩存詳解

目錄 1. 關于緩沖區指令 1.1 proxy_buffer_size1.2 proxy_buffering1.3 proxy_buffers1.4 proxy_busy_buffers_size1.5 proxy_max_temp_file_size1.6 proxy_temp_file_write_size1.7 緩沖區配置實例2. 常用配置項 2.1 proxy_cache_path2.2 proxy_temp_path2.3 proxy_cache2.4 …

mysql主從延遲

在實際的生產環境中&#xff0c;由單臺MySQL作為獨立的數據庫是完全不能滿足實際需求的&#xff0c;無論是在安全性&#xff0c;高可用性以及高并發等各個方面 因此&#xff0c;一般來說都是通過集群主從復制&#xff08;Master-Slave&#xff09;的方式來同步數據&#xff0c…

16張圖帶你吃透高性能 Redis 集群

現如今 Redis 變得越來越流行&#xff0c;幾乎在很多項目中都要被用到&#xff0c;不知道你在使用 Redis 時&#xff0c;有沒有思考過&#xff0c;Redis 到底是如何穩定、高性能地提供服務的&#xff1f; 你也可以嘗試回答一下以下這些問題&#xff1a; 我使用 Redis 的場景很…

Redis與MySQL雙寫一致性如何保證

談談一致性 一致性就是數據保持一致&#xff0c;在分布式系統中&#xff0c;可以理解為多個節點中數據的值是一致的。 強一致性&#xff1a;這種一致性級別是最符合用戶直覺的&#xff0c;它要求系統寫入什么&#xff0c;讀出來的也會是什么&#xff0c;用戶體驗好&#xff0c;…

weblogic忘記console密碼

進入 cd /sotware/oracle_ldap/Middleware/user_projects/domains/base_domain/security/ 目錄 執行 java -classpath /sotware/oracle_ldap/Middleware/wlserver_10.3/server/lib/weblogic.jar weblogic.security.utils.AdminAccount weblogic(賬號) weblogic123(密碼) . …

Mysql高性能優化技能總結

數據庫命令規范 所有數據庫對象名稱必須使用小寫字母并用下劃線分割 所有數據庫對象名稱禁止使用mysql保留關鍵字&#xff08;如果表名中包含關鍵字查詢時&#xff0c;需要將其用單引號括起來&#xff09; 數據庫對象的命名要能做到見名識意&#xff0c;并且最后不要超過32個…

Redis的AOF日志

如果 Redis 每執行一條寫操作命令&#xff0c;就把該命令以追加的方式寫入到一個文件里&#xff0c;然后重啟 Redis 的時候&#xff0c;先去讀取這個文件里的命令&#xff0c;并且執行它&#xff0c;這不就相當于恢復了緩存數據了嗎&#xff1f; 這種保存寫操作命令到日志的持久…

Redis 核心技術與實戰

目錄 開篇詞 | 這樣學 Redis&#xff0c;才能技高一籌 01 | 基本架構&#xff1a;一個鍵值數據庫包含什么&#xff1f; 02 | 數據結構&#xff1a;快速的Redis有哪些慢操作&#xff1f; 鍵和值用什么結構組織&#xff1f; 為什么哈希表操作變慢了&#xff1f; 有哪些底層數…

redis核心技術與實戰(二)緩存應用篇

1.《旁路緩存&#xff1a;redis 在緩存中工作原理》 1.緩存的兩個特征 1.什么是緩存&#xff0c;有什么特征&#xff1f; 磁盤->內存->cpu 之間讀寫速度差異巨大&#xff0c;為了平衡他們之間的差異&#xff0c;操作系統默認使用了兩種緩存&#xff1b; CPU 里面的末級…

redis核心技術與實戰(三) 性能篇

影響redis性能主要有以下部分&#xff1a; Redis 內部的阻塞式操作&#xff1b; CPU核和NUMA架構 Redis關鍵系統配置 Redis內存碎片 Redis緩沖區 下面一個個來介紹這些地方 1.《redis 有哪些阻塞點&#xff1f;》 redis實例主要交互的對象有以下幾點&#xff0c;我們依據下面這…

redis核心與實戰(一)數據結構篇

1.《redis數據結構概覽》 1.數據結構概覽 數據模型&#xff1a;一共5種&#xff0c;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Hash&#xff08;哈希&#xff09;、Set&#xff08;集合&#xff09;和 Sorted Set&#xff08;有序集合&#xf…

redis核心技術與實戰(四)高可用高擴展篇

1.《redis架構組成》 1.redis學習維度 2.一個基本的鍵值型數據庫包括什么&#xff1f; 1.訪問框架 redis通過網絡框架進行訪問&#xff0c;使得 Redis 可以作為一個基礎性的網絡服務進行訪問&#xff0c;擴大了redis應用范圍&#xff1b; 過程&#xff1a;如果客戶端發送“pu…

tomcat監控腳本

#!/bin/sh# func:自動監控tomcat腳本并且執行重啟操作# 獲取tomcat進程ID&#xff08;其中[grep -w .....]中的.....需要替換為實際部署的tomcat文件夾名&#xff0c;如下&#xff09; TomcatID$(ps -ef |grep tomcat |grep -w /usr/local/tomcat/apache-tomcat-8.5.31|grep -v…

weblogic命令行操作

啟動和停止子節點&#xff1a; [rootoud bin]# cd /sotware/oracle_ldap/Middleware/user_projects/domains/base_domain/bin/ [rootoud bin]# ./startManagedWebLogic.sh Server-0 http://192.168.63.129:7001 -Dweblogic.management.usernameweblogic -Dweblogic.management…

Ansible系列--Copy模塊

copy模塊 copy模塊在ansible里的角色就是把ansible執行機器上的文件拷貝到遠程節點上。 與fetch模塊相反的操作 常用參數 參數名是否必須默認值選項說明srcno 用于定位ansible執行的機器上的文件&#xff0c;需要絕對路徑。如果拷貝的是文件夾&#xff0c;那么文件夾會整體…

ANSIBLE--handlers的概念

handlers可以理解成另一種tasks&#xff0c;handlers是另一種’任務列表’&#xff0c;handlers中的任務會被tasks中的任務進行”調用”&#xff0c;但是&#xff0c;被”調用”并不意味著一定會執行&#xff0c;只有當tasks中的任務”真正執行”以后&#xff08;真正的進行實際…

ansible--- tags

tags可以幫助我們對任務進行’打標簽’的操作&#xff0c;當任務存在標簽以后&#xff0c;我們就可以在執行playbook時&#xff0c;借助標簽&#xff0c;指定執行哪些任務&#xff0c;或者指定不執行哪些任務。在實際的使用中&#xff0c;我們應該讓tags的值能夠見名知義。 當…

ANSIBLE---變量

注冊變量 ansible的模塊在運行之后&#xff0c;其實都會返回一些”返回值”&#xff0c;只是默認情況下&#xff0c;這些”返回值”并不會顯示而已&#xff0c;我們可以把這些返回值寫入到某個變量中&#xff0c;這樣我們就能夠通過引用對應的變量從而獲取到這些返回值了&…

inux中限制用戶進程CPU和內存占用率

#!/bin/sh PIDStop -bn 1 | grep "^ *[1-9]" | awk { if($9 > 50 || $10 > 25 && id -u $2 > 500) print $1} echo $PIDS for PID in $PIDS dorenice 10 $PIDecho "renice 10 $PID" done

按月拆分數據庫表--oracle

生產有一張日志表&#xff0c;數據量很大&#xff0c;需要按月進行存儲&#xff0c;存儲過程如下&#xff1a; CREATE OR REPLACE PROCEDURE NEWLOG4_SUB_TABLE IStable_name1 VARCHAR2(50);create_table_sql VARCHAR2(4000);insert_data_sql VARC…