您好,登錄后才能下訂單哦!
在實際生產環境當中,我們總會遇見需要把一些重要數據進行備份,且隨著應用系統規模的增大,對數據的安全性、可靠性、時效性要求還是比較高的,
因此我自己有在用rsync+inotify來實現數據實時同步備份,下面記錄下操作步驟,以防日后自己忘記。
實驗背景:
操作系統 IP 機器名 角色
CentOS 7.2 172.16.22.1 nginx01 數據源(服務器端)
CentOS 7.2 172.16.22.7 nginx02 備份地(客戶端)
一、rsync的安裝
在服務器端與客戶端都安裝rsync
[root@nginx01 ]# yum install -y rsync [root@nginx02 ]# yum install -y rsync
分別啟動服務器端和客戶端的rsync守護進程
[root@nginx01 ]# /usr/bin/rsync --daemon [root@nginx02 ]# /usr/bin/rsync --daemon
二、安裝inotify
因為inotify是一種強大的、細粒度的、異步文件系統事件監控機制,從Linux內核2.6.13版本起,加入了對inotify的支持。
inotify可以監控文件系統的各種變化,當文件出現任何變動時,就會觸發rsync同步,恰好解決了數據實時同步的問題。
inotify只需要安裝在服務器端即可。
[root@nginx01 ]# uname -r 3.10.0-327.el7.x86_64
[root@nginx01 ]# ll /proc/sys/fs/inotify total 0 -rw-r--r--. 1 root root 0 Jun 12 13:43 max_queued_events -rw-r--r--. 1 root root 0 Jun 12 13:43 max_user_instances -rw-r--r--. 1 root root 0 Jun 12 13:43 max_user_watches
如果出現了上面的3項內容,說明系統默認支持inotify,那么我們就可以安裝inotify-tools了。
我們可以到http://inotify-tools.sourceforge.net 下載相應版本的inotify-tools,我發現最新的也就是2010年出的inotify-tool-3.1.14
下載完畢后,進行安裝
先解壓
[root@nginx01 ]# tar -xf inotify-tools-3.14.tar.gz
進入解壓后的安裝包目錄里
[root@nginx01 ]# cd inotify-tools-3.14
進行檢查編譯,并制定安裝路徑
[root@nginx01 inotify-tools-3.14 ]# ./configure --prefix=/data0/inotify
進行make編譯安裝
[root@nginx01 inotify-tools-3.14 ]# make && make install
安裝完畢,查看是否生成了inotifywait、inotifywatch這兩個指令
[root@nginx01 ]# ll /data0/inotify/bin/inotifywa* -rwxr-xr-x. 1 root root 60892 Jun 12 13:45 /data0/inotify/bin/inotifywait -rwxr-xr-x. 1 root root 55183 Jun 12 13:45 /data0/inotify/bin/inotifywatch
注:inotifywait --用于等待文件或者文件集上的一個特定時間,可以監控任何文件和目錄設定,并且可遞歸監控整個目錄樹;inotifywatch--用于收集被監控的文件系統統計數據,包括每個inotify事件發生的次數等相關信息。關于它們的用法可以使用 /data0/inotify/bin/inotifywait --help、/data0/inotify/bin/inotifywatch --help的方式來了解
三、inotify的相關參數
inotify定義了一些接口參數,可以用來限制inotify消耗kernel memory的大小,所以我們要根據實際應用的需求,來調節其大小。
[root@nginx01 ]# ll /proc/sys/fs/inotify total 0 -rw-r--r--. 1 root root 0 Jun 12 13:43 max_queued_events -rw-r--r--. 1 root root 0 Jun 12 13:43 max_user_instances -rw-r--r--. 1 root root 0 Jun 12 13:43 max_user_watches
/proc/sys/fs/inotify/max_queued_events --表示調用inotify_init時分配至inotify instance中可以排隊的最大事件數,一旦超過這個值,事件就會被拋棄,但是會觸發IN_Q_OVERFLOW事件
/proc/sys/fs/inotify/max_user_instances --表示每一個real user ID 可創建的inotify instances數量的最大上限
/proc/sys/fs/inotify/max_user_watches --表示每個inotify實例相關聯的watches的上限,也就是每個inotify實例可監控的最大目錄數量,如果你所需要監控的數量巨大,可以適當增大它。
我就隨便增大了我的上述設定值
[root@nginx01 ]# echo 32768 > /proc/sys/fs/inotify/max_queued_events [root@nginx01 ]# echo 1024 > /proc/sys/fs/inotify/max_user_instances [root@nginx01 ]# echo 90000000 > /proc/sys/fs/inotify/max_user_watches
四、配置雙機ssh信任
使用rsync同步有兩種方式可以實現:
一:使用rsync用戶、密碼
二:使用機器上的用戶,無需輸密碼即可實現
我為了貪圖方便選擇后者
在數據源、備份機上創建RSA密鑰
以下操作在兩臺機器上都要執行,下列提供其中一臺的為例
1.使用root用戶登入機器
2.在root用戶的主目錄下創建.ssh目錄,并設置正確的權限
[root@nginx01 ]# mkdir ~/.ssh [root@nginx01 ]# chmod 700 ~/.ssh
3.使用ssh-keygen命令生成第2版的SSH協議的RSA密鑰
[root@nginx01 ]# ssh-keygen -t rsa
接下來的動作就是根據提示保存私鑰(key)和公鑰(public key)的位置時,使用默認值。如果需要私鑰密碼(passphrase), 則輸入一個私鑰密碼(如果使用私鑰密碼,在利用ssh執行遠程命令是需要輸入私鑰密碼)
我是為了方便,直接回車就好!
添加密鑰到授權的密鑰文件中
1.使用root用戶登入機器
2.在數據源機器上執行下列操作
[root@nginx01 ]# cd ~/.ssh [root@nginx01 ./ssh]# ssh 172.16.22.7 cat /root/.ssh/id_rsa.pub >> authorized_keys [root@nginx01 ./ssh]# ssh 172.16.22.1 cat /root/.ssh/id_rsa.pub >> authorized_keys [root@nginx01 ./ssh]# scp authorized_keys 172.16.22.7:/root/.ssh/ [root@nginx01 ./ssh]# chmod 600 /root/.ssh/authorized_keys
3.在備份機上執行
[root@nginx02 ]# chmod 600 /root/.ssh/authorized_keys
4.分別在兩臺機器上進行測試
[root@nginx01 ]# ssh 172.16.22.1 date Tue Jun 13 20:39:56 CST 2017 [root@nginx01 ]# ssh 172.16.22.7 date Tue Jun 13 20:39:57 CST 2017
[root@nginx02 ]# ssh 172.16.22.1 date Tue Jun 13 20:39:57 CST 2017 [root@nginx02 ]# ssh 172.16.22.7 date Tue Jun 13 20:39:58 CST 2017
在第一次執行的時候,可能會要輸入密碼信息,再次執行的時候,你會發現不需要輸入密碼信息就能夠顯示系統日期,這就說明ssh互相信任配置成功!
五、實現實時同步
因為inotifywait是一個監控等待事件,所以我們可以使用shell腳本來配合使用它。
常用的inotifywait參數:
-m --monitor 表示始終保持事件的監聽狀態
-r --recursive 表示遞歸查詢目錄
-q --quit 表示打印出監控事件
-e --event 通過此參數可以指定要監控的事件,常見的有modify、delete、create、attrib等等
下面是我的一個實時同步腳本,僅供參考:
[root@nginx01 ]# vim /data0/webscripts/inotify.sh #!/bin/bash SRC=/data0/nginx/res/home/ DST=root@172.16.22.7:/data0/nginx/res/home/ /data0/inotify/bin/inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read a b c do /usr/bin/rsync -ahqzt --delete $SRC $DST done
讓同步腳本具有可執行權限
[root@nginx01 ]# chmod +x /data0/webscripts/inotify.sh
在后臺執行實時備份的腳本操作
[root@nginx01 ]# sh /data0/webscripts/inotify.sh &
在備份的同時,你可以去到你的備份機上備份目錄里查看它是不是一直在變大,直到和數據源目錄一樣大呢
如果你的備份目錄比較大,從數字上可能不是那么好辨認的話,建議使用查看目錄文件數量的方式來比對確認
如在數據源目錄查看后,在去備份目錄看是否一致。
[root@nginx01 ]# find /data0/nginx/res/home -type f | wc -l 30777 [root@nginx02 ]# find /data0/nginx/res/home -type f | wc -l 30777
到這里配置完成,測試成功
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。