溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

rsync+inotify實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)同步備份

發(fā)布時(shí)間:2020-06-06 05:22:07 來(lái)源:網(wǎng)絡(luò) 閱讀:1132 作者:翹楚秦歌 欄目:建站服務(wù)器

在實(shí)際生產(chǎn)環(huán)境當(dāng)中,我們總會(huì)遇見(jiàn)需要把一些重要數(shù)據(jù)進(jìn)行備份,且隨著應(yīng)用系統(tǒng)規(guī)模的增大,對(duì)數(shù)據(jù)的安全性、可靠性、時(shí)效性要求還是比較高的,

因此我自己有在用rsync+inotify來(lái)實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)同步備份,下面記錄下操作步驟,以防日后自己忘記。

實(shí)驗(yàn)背景:

操作系統(tǒng)          IP         機(jī)器名        角色

CentOS 7.2       172.16.22.1     nginx01        數(shù)據(jù)源(服務(wù)器端)

CentOS 7.2       172.16.22.7     nginx02        備份地(客戶端)


一、rsync的安裝

在服務(wù)器端與客戶端都安裝rsync

[root@nginx01 ]# yum install -y rsync
[root@nginx02 ]# yum install -y rsync


分別啟動(dòng)服務(wù)器端和客戶端的rsync守護(hù)進(jìn)程

[root@nginx01 ]# /usr/bin/rsync --daemon
[root@nginx02 ]# /usr/bin/rsync --daemon


二、安裝inotify

因?yàn)閕notify是一種強(qiáng)大的、細(xì)粒度的、異步文件系統(tǒng)事件監(jiān)控機(jī)制,從Linux內(nèi)核2.6.13版本起,加入了對(duì)inotify的支持。

inotify可以監(jiān)控文件系統(tǒng)的各種變化,當(dāng)文件出現(xiàn)任何變動(dòng)時(shí),就會(huì)觸發(fā)rsync同步,恰好解決了數(shù)據(jù)實(shí)時(shí)同步的問(wèn)題。

inotify只需要安裝在服務(wù)器端即可。

[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

如果出現(xiàn)了上面的3項(xiàng)內(nèi)容,說(shuō)明系統(tǒng)默認(rèn)支持inotify,那么我們就可以安裝inotify-tools了。


我們可以到http://inotify-tools.sourceforge.net 下載相應(yīng)版本的inotify-tools,我發(fā)現(xiàn)最新的也就是2010年出的inotify-tool-3.1.14

下載完畢后,進(jìn)行安裝

先解壓

[root@nginx01 ]# tar -xf inotify-tools-3.14.tar.gz

進(jìn)入解壓后的安裝包目錄里

[root@nginx01 ]# cd inotify-tools-3.14


進(jìn)行檢查編譯,并制定安裝路徑

[root@nginx01 inotify-tools-3.14 ]# ./configure --prefix=/data0/inotify


進(jìn)行make編譯安裝

[root@nginx01 inotify-tools-3.14 ]# make && make install


安裝完畢,查看是否生成了inotifywait、inotifywatch這兩個(gè)指令

[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 --用于等待文件或者文件集上的一個(gè)特定時(shí)間,可以監(jiān)控任何文件和目錄設(shè)定,并且可遞歸監(jiān)控整個(gè)目錄樹(shù);inotifywatch--用于收集被監(jiān)控的文件系統(tǒng)統(tǒng)計(jì)數(shù)據(jù),包括每個(gè)inotify事件發(fā)生的次數(shù)等相關(guān)信息。關(guān)于它們的用法可以使用 /data0/inotify/bin/inotifywait --help、/data0/inotify/bin/inotifywatch --help的方式來(lái)了解


三、inotify的相關(guān)參數(shù)

inotify定義了一些接口參數(shù),可以用來(lái)限制inotify消耗kernel memory的大小,所以我們要根據(jù)實(shí)際應(yīng)用的需求,來(lái)調(diào)節(jié)其大小。

[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 --表示調(diào)用inotify_init時(shí)分配至inotify instance中可以排隊(duì)的最大事件數(shù),一旦超過(guò)這個(gè)值,事件就會(huì)被拋棄,但是會(huì)觸發(fā)IN_Q_OVERFLOW事件

/proc/sys/fs/inotify/max_user_instances --表示每一個(gè)real user ID 可創(chuàng)建的inotify instances數(shù)量的最大上限

/proc/sys/fs/inotify/max_user_watches --表示每個(gè)inotify實(shí)例相關(guān)聯(lián)的watches的上限,也就是每個(gè)inotify實(shí)例可監(jiān)控的最大目錄數(shù)量,如果你所需要監(jiān)控的數(shù)量巨大,可以適當(dāng)增大它。


我就隨便增大了我的上述設(shè)定值

[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

四、配置雙機(jī)ssh信任

使用rsync同步有兩種方式可以實(shí)現(xiàn):

一:使用rsync用戶、密碼

二:使用機(jī)器上的用戶,無(wú)需輸密碼即可實(shí)現(xiàn)

我為了貪圖方便選擇后者


在數(shù)據(jù)源、備份機(jī)上創(chuàng)建RSA密鑰

以下操作在兩臺(tái)機(jī)器上都要執(zhí)行,下列提供其中一臺(tái)的為例

1.使用root用戶登入機(jī)器

2.在root用戶的主目錄下創(chuàng)建.ssh目錄,并設(shè)置正確的權(quán)限

[root@nginx01 ]# mkdir ~/.ssh
[root@nginx01 ]# chmod 700 ~/.ssh

3.使用ssh-keygen命令生成第2版的SSH協(xié)議的RSA密鑰

[root@nginx01 ]# ssh-keygen -t rsa

接下來(lái)的動(dòng)作就是根據(jù)提示保存私鑰(key)和公鑰(public key)的位置時(shí),使用默認(rèn)值。如果需要私鑰密碼(passphrase), 則輸入一個(gè)私鑰密碼(如果使用私鑰密碼,在利用ssh執(zhí)行遠(yuǎn)程命令是需要輸入私鑰密碼)

我是為了方便,直接回車就好!


添加密鑰到授權(quán)的密鑰文件中

1.使用root用戶登入機(jī)器

2.在數(shù)據(jù)源機(jī)器上執(zhí)行下列操作

[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.在備份機(jī)上執(zhí)行

[root@nginx02 ]# chmod 600 /root/.ssh/authorized_keys

4.分別在兩臺(tái)機(jī)器上進(jìn)行測(cè)試

[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

在第一次執(zhí)行的時(shí)候,可能會(huì)要輸入密碼信息,再次執(zhí)行的時(shí)候,你會(huì)發(fā)現(xiàn)不需要輸入密碼信息就能夠顯示系統(tǒng)日期,這就說(shuō)明ssh互相信任配置成功!


五、實(shí)現(xiàn)實(shí)時(shí)同步

因?yàn)閕notifywait是一個(gè)監(jiān)控等待事件,所以我們可以使用shell腳本來(lái)配合使用它。

常用的inotifywait參數(shù):

 -m --monitor 表示始終保持事件的監(jiān)聽(tīng)狀態(tài)

 -r --recursive 表示遞歸查詢目錄

 -q --quit 表示打印出監(jiān)控事件

 -e --event  通過(guò)此參數(shù)可以指定要監(jiān)控的事件,常見(jiàn)的有modify、delete、create、attrib等等

 

下面是我的一個(gè)實(shí)時(shí)同步腳本,僅供參考:

[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


讓同步腳本具有可執(zhí)行權(quán)限

[root@nginx01 ]# chmod +x /data0/webscripts/inotify.sh

在后臺(tái)執(zhí)行實(shí)時(shí)備份的腳本操作

[root@nginx01 ]# sh /data0/webscripts/inotify.sh &

在備份的同時(shí),你可以去到你的備份機(jī)上備份目錄里查看它是不是一直在變大,直到和數(shù)據(jù)源目錄一樣大呢

如果你的備份目錄比較大,從數(shù)字上可能不是那么好辨認(rèn)的話,建議使用查看目錄文件數(shù)量的方式來(lái)比對(duì)確認(rèn)


如在數(shù)據(jù)源目錄查看后,在去備份目錄看是否一致。

[root@nginx01 ]# find /data0/nginx/res/home -type f | wc -l
30777
[root@nginx02 ]# find /data0/nginx/res/home -type f | wc -l
30777

到這里配置完成,測(cè)試成功

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI