自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

rsync+inotify實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)同步更新

原創(chuàng)
系統(tǒng) Linux
rsync可以實(shí)現(xiàn)觸發(fā)式的文件同步,但是通過crontab守護(hù)進(jìn)程方式進(jìn)行觸發(fā),同步的數(shù)據(jù)和實(shí)際數(shù)據(jù)會(huì)有差異,而inotify可以監(jiān)控文件系統(tǒng)的各種變化,當(dāng)文件有任何變動(dòng)時(shí),就觸發(fā)rsync同步,這樣就可以解決同步數(shù)據(jù)的實(shí)時(shí)性問題。

【51CTO獨(dú)家特稿】rsync可以實(shí)現(xiàn)觸發(fā)式的文件同步,但是通過crontab守護(hù)進(jìn)程方式進(jìn)行觸發(fā),同步的數(shù)據(jù)和實(shí)際數(shù)據(jù)會(huì)有差異,而inotify可以監(jiān)控文件系統(tǒng)的各種變化,當(dāng)文件有任何變動(dòng)時(shí),就觸發(fā)rsync同步,這樣就可以解決同步數(shù)據(jù)的實(shí)時(shí)性問題。

 一、rsync的優(yōu)點(diǎn)與不足

rsync具有安全性高、備份迅速、支持增量備份等優(yōu)點(diǎn),通過rsync可以解決對(duì)實(shí)時(shí)性要求不高的數(shù)據(jù)備份需求,例如定期的備份文件服務(wù)器數(shù)據(jù)到遠(yuǎn)端服務(wù)器,對(duì)本地磁盤定期做數(shù)據(jù)鏡像等。

隨著應(yīng)用系統(tǒng)規(guī)模的不斷擴(kuò)大,對(duì)數(shù)據(jù)的安全性和可靠性也提出的更好的要求,rsync在高端業(yè)務(wù)系統(tǒng)中也逐漸暴露出了很多不足,首先,rsync同步數(shù)據(jù)時(shí),需要掃描所有文件后進(jìn)行比對(duì),進(jìn)行差量傳輸。如果文件數(shù)量達(dá)到了百萬甚至千萬量級(jí),掃描所有文件將是非常耗時(shí)的。而且正在發(fā)生變化的往往是其中很少的一部分,這是非常低效的方式。其次,rsync不能實(shí)時(shí)的去監(jiān)測(cè)、同步數(shù)據(jù),雖然它可以通過Linux守護(hù)進(jìn)程的方式進(jìn)行觸發(fā)同步,但是兩次觸發(fā)動(dòng)作一定會(huì)有時(shí)間差,這樣就導(dǎo)致了服務(wù)端和客戶端數(shù)據(jù)可能出現(xiàn)不一致,無法在應(yīng)用故障時(shí)完全的恢復(fù)數(shù)據(jù)?;谝陨显颍瑀sync+inotify可以解決這個(gè)問題。

二、 初識(shí)inotify

Inotify 是一種強(qiáng)大的、細(xì)粒度的、異步的文件系統(tǒng)事件監(jiān)控機(jī)制,linux內(nèi)核從2.6.13起,加入了Inotify支持,通過Inotify可以監(jiān)控文件系統(tǒng)中添加、刪除,修改、移動(dòng)等各種細(xì)微事件,利用這個(gè)內(nèi)核接口,第三方軟件就可以監(jiān)控文件系統(tǒng)下文件的各種變化情況,而inotify-tools就是這樣的一個(gè)第三方軟件。

我們?cè)v到,rsync可以實(shí)現(xiàn)觸發(fā)式的文件同步,但是通過crontab守護(hù)進(jìn)程方式進(jìn)行觸發(fā),同步的數(shù)據(jù)和實(shí)際數(shù)據(jù)會(huì)有差異,而inotify可以監(jiān)控文件系統(tǒng)的各種變化,當(dāng)文件有任何變動(dòng)時(shí),就觸發(fā)rsync同步,這樣剛好解決了同步數(shù)據(jù)的實(shí)時(shí)性問題。

三、 安裝inotify工具inotify-tools

由于inotify特性需要Linux內(nèi)核的支持,在安裝inotify-tools前要先確認(rèn)Linux系統(tǒng)內(nèi)核是否達(dá)到了 2.6.13以上,如果Linux內(nèi)核低于2.6.13版本,就需要重新編譯內(nèi)核加入inotify的支持,也可以用如下方法判斷,內(nèi)核是否支持 inotify(服務(wù)器系統(tǒng)為Centos5.5 x86_64):

uname -r

2.6.18-194.el5

ls -lsart /proc/sys/fs/inotify/

總計(jì) 0

0 dr-xr-xr-x 7 root root 0 06-16 00:02 ..
0 -rw-r--r-- 1 root root 0 06-21 11:15 max_user_watches
0 -rw-r--r-- 1 root root 0 06-21 11:15 max_user_instances
0 -rw-r--r-- 1 root root 0 06-21 11:15 max_queued_events
0 dr-xr-xr-x 2 root root 0 06-21 11:15 .

通過以上顯示我們明白,Centos5.5 x86_64是支持inotify的。

四、inotify的簡(jiǎn)單介紹

Inotify 是文件系統(tǒng)事件監(jiān)控機(jī)制,作為 dnotify 的有效替代。dnotify 是較早內(nèi)核支持的文件監(jiān)控機(jī)制。Inotify 是一種強(qiáng)大的、細(xì)粒度的、異步的機(jī)制,它滿足各種各樣的文件監(jiān)控需要,不僅限于安全和性能。

inotify 可以監(jiān)視的文件系統(tǒng)事件包括:

  • IN_ACCESS,即文件被訪問
  • IN_MODIFY,文件被 write
  • IN_ATTRIB,文件屬性被修改,如 chmod、chown、touch 等
  • IN_CLOSE_WRITE,可寫文件被 close
  • IN_CLOSE_NOWRITE,不可寫文件被 close
  • IN_OPEN,文件被 open
  • IN_MOVED_FROM,文件被移走,如 mv
  • IN_MOVED_TO,文件被移來,如 mv、cp
  • IN_CREATE,創(chuàng)建新文件
  • IN_DELETE,文件被刪除,如 rm
  • IN_DELETE_SELF,自刪除,即一個(gè)可執(zhí)行文件在執(zhí)行時(shí)刪除自己
  • IN_MOVE_SELF,自移動(dòng),即一個(gè)可執(zhí)行文件在執(zhí)行時(shí)移動(dòng)自己
  • IN_UNMOUNT,宿主文件系統(tǒng)被 umount
  • IN_CLOSE,文件被關(guān)閉,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
  • IN_MOVE,文件被移動(dòng),等同于(IN_MOVED_FROM | IN_MOVED_TO)

注:上面所說的文件也包括目錄。#p#

五、rsync+inotify企業(yè)應(yīng)用案例

我們的后端WEB是二臺(tái)部署了Nginx的WEB服務(wù)器,由于沒有共享存儲(chǔ),我們現(xiàn)在要實(shí)現(xiàn)的是對(duì)它們的根目錄/data/htdocs/www實(shí)現(xiàn)即時(shí)同步更新。

WebServer1:192.168.1.5,Centos5.5 x86_64
WebServer2:192.168.1.6,Centos5.5 x86_64

根目錄均為/data/htdocs/www,自動(dòng)同步順序?yàn)閃ebServer2à WebServer1,我們將WebServer1配置成rsync的服務(wù)器端即可

1.我們首先開始安裝inotify-tools

可以到http://inotify-tools.sourceforge.net/下載相應(yīng)的inotify-tools版本,然后開始編譯安裝:

cd /usr/local/src
tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure &&make && make install

2.WebServer1端

即192.168.1.5的rsync,我們配置好/etc/rsyncd.conf文件,如下:

[root@server ~0m]# vim /etc/rsyncd.conf
uid = nobody
gid = nobody
user chroot = no
max connections = 200
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[www]
path=/data/htdocs/
ignore errors
read only = no
list = no
hosts allow = 192.168.1.0/255.255.255.0
auth users = www
secrets file = /etc/rsyncd.password

然后重啟xinetd即可,如下所示:

/etc/init.d/xinetd restart

記得二臺(tái)WEB機(jī)器都要配置/etc/rsyncd.passwd文件,rsync的配置過程和原理請(qǐng)大家參考我在51cto.com的rsync配置相關(guān)文章,這里就不詳細(xì)說明了。

3.我們配置好WebServer2的inotify

讓其開機(jī)即啟動(dòng),腳本內(nèi)容如下:

vim /root/rsync.sh
#!/bin/bash
src=/data/htdocs/www/
des=www
ip=192.168.1.5
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | while read file
do
rsync -vzrtopg --delete --progress $src www@$ip::$des --password-file=/etc/rsyncd.password &&
echo "$src was rsynced"
done

腳本相關(guān)解釋如下:

  • timefmt:指定時(shí)間的輸出格式。
  • format:指定變化文件的詳細(xì)信息。

這個(gè)腳本的作用就是通過inotify監(jiān)控文件目錄的變化,進(jìn)而觸發(fā)rsync進(jìn)行同步操作,由于這個(gè)過程是一種主動(dòng)觸發(fā)操作,通過系統(tǒng)內(nèi)核完成的,所以,比起那些遍歷整個(gè)目錄的掃描方式,效率要高很多。

然后我們將此腳本放在/etc/rc.local,即在***一行添加,/etc/rc.local文件改動(dòng)后內(nèi)容如下:

[root@slave www0m]# cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/root/rsync.sh

4.驗(yàn)證就很容易了

我們可以在192.168.1.6的機(jī)器的/data/htdocs/www目錄下新建文件,更改文件內(nèi)容,我們很欣慰的發(fā)現(xiàn),192.168.1.5的機(jī)器上馬上也會(huì)發(fā)生相應(yīng)的改變,就像二臺(tái)機(jī)器是網(wǎng)絡(luò)Raid-1樣,非常方便。

總體說來,rsync+inofity比較適用于沒有存儲(chǔ)環(huán)境的小文件的即時(shí)同步更新,如果要更新的文件非常大而且同步的機(jī)器數(shù)量在10臺(tái)以上時(shí),我建議還是以共享存儲(chǔ)的方法來解決,如果沒有資金購(gòu)置昂貴的存儲(chǔ),大家不妨考慮下Heartbeat+DRBD+NFS方案來作為我們的文件服務(wù)器。 

參考文檔

http://ixdba.blog.51cto.com/2895551/580280

http://www.ibm.com/developerworks/cn/linux/l-ubuntu-inotify/index.html 

作者簡(jiǎn)介:余洪春(博客),網(wǎng)名撫琴煮酒,外企Linux/Unix系統(tǒng)管理員、項(xiàng)目實(shí)施工程師,曾擔(dān)任紅帽RHCE講師,擅長(zhǎng)負(fù)載均衡高可用和中小型證券類和電子商務(wù)網(wǎng)站架構(gòu),目前關(guān)注網(wǎng)站架構(gòu)研究及網(wǎng)絡(luò)安全方向。

【編輯推薦】

  1. 如何監(jiān)控Linux文件系統(tǒng)事件:inotify使用指南
  2. CentOS 5.5下rsync使用技巧與權(quán)限問題解讀
  3. inotify監(jiān)控Linux文件系統(tǒng)的必備利器
  4. FreeBSD 8上的Rsync同步簡(jiǎn)易教程
  5. Linux遠(yuǎn)程備份工具Rsync使用案例

 

責(zé)任編輯:黃丹 來源: 51CTO.com
相關(guān)推薦

2023-01-31 08:34:19

2025-04-28 08:10:00

Linuxinotifyrsync

2017-05-25 08:52:08

SQL Server數(shù)據(jù)庫

2024-07-03 08:02:19

MySQL數(shù)據(jù)搜索

2020-09-21 11:30:28

CanalMySQL數(shù)據(jù)庫

2023-05-03 08:58:46

數(shù)據(jù)庫開源

2022-07-20 23:15:11

Flink數(shù)據(jù)集CDC

2018-11-08 10:13:28

Rsync服務(wù)器備份

2025-01-10 10:44:52

2024-10-30 08:15:18

2024-10-18 11:39:55

MySQL數(shù)據(jù)檢索

2010-07-01 15:44:22

SQL Server數(shù)

2010-10-13 15:02:09

Rsync同步FreeBSDCentOS

2016-12-21 14:06:55

日志實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)抽取

2021-05-27 09:57:55

Inotify監(jiān)控系統(tǒng)

2009-03-09 20:57:28

linuxrsync文件同步備份

2025-04-01 08:38:41

2024-11-26 08:05:44

2022-05-31 07:40:44

LsyncdCentOS7

2009-11-30 10:05:28

Linuxrsync同步
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)