成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

rsync+inotify實現(xiàn)實時同步-創(chuàng)新互聯(lián)

1、數(shù)據(jù)同步:

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了黃平免費(fèi)建站歡迎大家使用!

1.數(shù)據(jù)同步:

A服務(wù)器的一個目錄同步到B服務(wù)器上的一個目錄

方法是:可以在A服務(wù)器上把這個目錄共享(如ftp,http等),然后B服務(wù)器上寫shell腳本,用crontab做定時任務(wù)下載過來(數(shù)據(jù)同步不實時)

實時同步

方法是:rsync遠(yuǎn)程目錄實時同步

             drbd遠(yuǎn)程存儲實時同步(很老的方案)

            共享存儲,就是同一個磁盤設(shè)備同時被很多人用

            分布式存儲(云存儲)

2、同步、異步和遠(yuǎn)程同步

sync同步

async異步

rsync 遠(yuǎn)程同步

這里主要說rsync,在開始之前需要了解以下幾個問題:

rsync是什么;rsync的工作原理;rsync優(yōu)點(diǎn)不足;rsync認(rèn)證方式;安裝rsync;rsync命令參數(shù)詳解;配置rsync;rsync的啟動與關(guān)閉;rsync同步實例

2.1 rsync是什么

rsync(remote synchronize)是Liunx/Unix下的一個遠(yuǎn)程數(shù)據(jù)同步工具。它可通過LAN/WAN快速同步多臺主機(jī)間的文件和目錄,并適當(dāng)利用rsync算法(差分編碼)以減少數(shù)據(jù)的傳輸。

rsync第一次會全量傳輸,后續(xù)會對比兩個文件的不同,只傳輸文件更新的部分,傳輸速度比一般工具快。

rsync還可以拷貝、顯示目錄屬性及拷貝文件,并可選擇性的壓縮及遞歸拷貝。

2.2 rsync的工作原理

2.2.1 命令或者腳本運(yùn)行之后,同步端開始構(gòu)造FileList,F(xiàn)ileList就是被同步端需要同步的文件索引,name->id(每個文件都有一個id值,如MD5)

2.2.2 同步端構(gòu)造完成之后,將FileList發(fā)送到被同步端,被同步端rsync處理發(fā)送的FileList,然后開始同步。

2.2.3第二次同步時,因為兩邊的都有文件,同步端構(gòu)造發(fā)送這邊的FileList,被同步端rsync處理同步端發(fā)送的FileList,根據(jù)MD5值比較,刪除同步端已經(jīng)相同的文件信息,保留不存在和更新的文件,來構(gòu)建新的FileList。

2.2.4 同步端收到被同步端新的FileList,然后開始同步文件到同步端。

2.3 rsync有點(diǎn)

優(yōu)點(diǎn):

安全性高

備份迅速,使用同步算法,只比較變化

支持增量備份

保存源目錄整個目錄樹和文件系統(tǒng)

保持源文件的權(quán)限、時間、軟硬連接等

無需特使權(quán)限即可安裝

優(yōu)化流程和比較高的文件傳輸效率。

多樣方式來傳輸文件。

支持匿名運(yùn)行,方便網(wǎng)站鏡像。

與scp相比,rsync傳輸速度遠(yuǎn)在scp之上。(局域網(wǎng)測試,rsync是scp的20倍)

解決對實時性要求不高的數(shù)據(jù)備份需求

不足:

同步數(shù)據(jù),需要掃描所有文件進(jìn)行對比,才進(jìn)行差量傳輸。如果文件數(shù)量達(dá)到百萬甚至千萬級,掃描文件對比文件將非常耗時,降低了rsync效率。

rsync不能實時地區(qū)監(jiān)測、同步數(shù)據(jù)。雖然可以通過守護(hù)進(jìn)程方式觸發(fā)同步,但兩次動作間有時間差,導(dǎo)致數(shù)據(jù)不一致,無法應(yīng)對出現(xiàn)故障時完全恢復(fù)數(shù)據(jù)。

解決: rsync+inotify來彌補(bǔ)不足。

2.4 認(rèn)證方式

2.4.1 兩種方式

rsync-daemon

ssh

注意:在使用rsync時,同步端和被同步端都必須安裝rsync程序。

2.4.2 rsync-daemon認(rèn)證

在rsync-daemon認(rèn)證方式下,默認(rèn)監(jiān)聽毒tcp的873端口

在rsync-daemon認(rèn)證下,rsync可以把密碼寫入到一個文件中。

注意:被同步端的rsync必須啟動,配置文件。同步端可以不起動服務(wù),但必須有這個應(yīng)用。

2.4.3 ssh認(rèn)證

通過ssh隧道進(jìn)行傳輸,類似于scp工具,同步操作不在局限于rsync中定義的同步文件夾,并且雙方只要安裝rsync,也不要雙方啟動rsync。

如:rsync -avz /root/test root@192.168.19.248:/root/

若rsync服務(wù)端SSH為非標(biāo)準(zhǔn)端口,可通過rsync的-e參數(shù)進(jìn)行端口指定。使用方式如下:

rsync -avz /root/test -e ‘ssh -p1234’ root@192.168.19.248:/root/

2.5一般用到的工具跟實例

2.5.1 wget工具

wget http://10.1.1.9/linux_basic01.txt   --直接下載到當(dāng)前目錄 wget --no-check-certificate https://www.baidu.com/img/bd_logo1.png   # 有https連接的,下載時需要加--no-check-certificate參數(shù) wget http://10.1.1.9/linux_basic01.txt -O /test/123  #把文件下載下來改名為/test/123 wget -m -k -np http://10.1.1.9/shell/#只下載shell目錄,但注意shell后面一定要加/ wget -m  http://www.xxx.com#下載整個網(wǎng)站

2.5.2 轉(zhuǎn)化本地yum源:

如何下載一個epel的擴(kuò)展yum源,并轉(zhuǎn)化成本地的yum源

使用wget下載;使用reposync下載

reposync下載的做法步驟如下:

先在本地yum配置里寫上你要下載的yum源的路徑,如

# vim /etc/yum.repos.d/rhel-source.repo [epel] server=epel baseurl=http://xxx.xxx.xxx/--網(wǎng)絡(luò)路徑 gpgcheck=0 enabled=1 # yum repolist    --列出你現(xiàn)在所有配置的repo的名字 # reposync --repoid=epel--把epel路徑的所有軟件包下載到本地當(dāng)前目錄 下載到本機(jī)目錄后,cd進(jìn)去,使用createrepo  .命令創(chuàng)建軟件倉庫的貨物清單目錄repodata 把yum的寫法改成 # vim /etc/yum.repos.d/rhel-source.repo [epel] server=epel baseurl=file:///xxx/--寫上你的本地目錄路徑(也就是repodata的上級目錄地址) gpgcheck=0 enabled=1

3 安裝rsync

兩種方式:源碼安裝和rpm安裝

3.1源碼安裝

3.1.1 下載

先去官網(wǎng)下載源碼包

https://rsync.samba.org/ wget --no-check-certificate https://download.samba.org/pub/rsync/rsync-3.1.2.tar.gz

有https連接的,下載時需要加--no-check-certificate參數(shù)

3.1.2 安裝

[root@localhost rsync-3.1.2]# tar xf rsync-3.1.2.tar.gz  [root@localhost rsync-3.1.2]# cd rsync-3.1.2 [root@localhost rsync-3.1.2]# ./configure [root@localhost rsync-3.1.2]# make && make install 注意:需要gcc庫要提前安裝 默認(rèn)會安裝到/usr/local/下,通過./configure --help

rsync+inotify實現(xiàn)實時同步

安裝完成后,查看rsync幫助,需要切換到/usr/local/bin目錄下: /usr/local/bin rsync -h [root@localhost rsync-3.1.2]# cd /usr/local/bin [root@localhost bin]# ll total 1344 -rwxr-xr-x 1 root root 1373922 May 16 18:46 rsync [root@localhost bin]# pwd /usr/local/bin 源碼安裝的rsync,需要開機(jī)啟動,把啟動命令放在rc.local文件中,如下: echo “/usr/local/bin/rsync –daemon –config=/etc/rsyncd.conf”>>/etc/rc.local 也可以寫成: echo “/usr/local/bin/rsync –daemon”>>/etc/rc.local cat /etc/rc.local

3.2 RPM方式安裝

直接yum安裝:yum -y install rsync 查看rsync安裝位置,如下: [root@localhost bin]# rpm -ql rsync rsync安裝到了/usr/bin,并且生成一個/etc/xinetd.d/rsync文件。 查看安裝時產(chǎn)生的幫助文檔: [root@localhost bin]# more /usr/share/doc/rsync-3.0.6/README which rsync rsync --help

3.3 能否把rsync做成服務(wù)的形式,加上一些控制功能或日志記錄功能

3.3.1兩個知識點(diǎn):

xinetd

man rsyncd.conf

兩個一起共存,共同控制rsync

3.3.2 xinetd介紹

xinetd類似于一個托管服務(wù),托管其他一些其它小服務(wù),好處是可以使用xinetd強(qiáng)大的參數(shù)來控制這些服務(wù)

如:

/etc/xinetd.conf--主配置文件,一般不用配置,主要配置子配置文件 /etc/xinetd.d--子配置文件目錄 xinetd服務(wù)相當(dāng)于是所有被拖管服務(wù)的總開關(guān) # yum install  -y xinetd xinted需要配置文件: vi /etc/xinetd.d/rsync    --(man xinetd.conf參考幫助) service rsync { disable = no     --yes表示關(guān)閉,no表示開啟 (啟動rsync服務(wù),兩個條件:1,disable = no 2,xinetd服務(wù)要啟動) flags = IPv6 socket_type = stream wait = no        --并發(fā)連接 user = root      --跑守護(hù)進(jìn)程的用戶 server = /usr/bin/rsync  --啟動程序路徑 server_args = –daemon –config=/etc/rsyncd.conf --啟動參數(shù)(這三個參數(shù)合起來就是表示用root身份執(zhí)行/usr/bin/rsync --daemon來啟動rsync服務(wù)) log_on_failure += USERID  --控制日志格式,表示登錄服務(wù)失敗時,在日志原格式上加上記錄USERID } 配置完畢,還需要安裝xinted軟件包,否則無法啟動xinetd root@localhost bin]# yum install -y xinetd [root@localhost bin]# /etc/init.d/xinetd start Starting xinetd:                                           [  OK  ] [root@localhost bin]# /etc/init.d/xinetd start Starting xinetd:                                           [  OK  ] [root@localhost bin]# chkconfig xinetd on [root@localhost bin]# netstat -tlunp |grep 873 tcp        0      0 :::873                      :::*                        LISTEN      8831/xinetd

4 rsync命令參數(shù)詳解

查看參數(shù)最好的方法就是去查看幫助信息:

rsync --help

4.1 常用參數(shù)

-v, –verbose詳細(xì)模式輸出。

-a, –archive歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性不變。

-l 保留軟鏈接

-R 保留相對路徑

-H 保留硬鏈接

-p,-o,-g,-A  分別保留權(quán)限,屬主,屬組,acl等,但如果加了-a,這些就都包括了

-z, –compress對備份的文件在傳輸時進(jìn)行壓縮處理。

-D   等于--devices  --specials   表示支持b,c,s,p類型的文件

–delete:刪除那些DST中存在而在SRC中沒有的文件。

4.2 普通應(yīng)用

rsync -av  /home/    /backup/                           --本機(jī)上的同步,把/home目錄下的內(nèi)容同步到/backup目錄下(包括隱藏文件) rsync -av /home/ 192.168.19.248:/backup/                     --把本地的/home目錄內(nèi)容,同步到遠(yuǎn)端218的/backup目錄下,需要遠(yuǎn)程的192.168.19.248的密碼 rsync -av 192.168.19.248:/backup/ /backup/                   --把遠(yuǎn)端218的/backup目錄下的內(nèi)容同步到本地的/backup目錄,需要遠(yuǎn)程的192.168.19.248的密碼 rsync  -a /test/ '-e ssh -p 2222' 192.168.19.248:/test1/  --如果遠(yuǎn)程機(jī)192.168.19.248的ssh端口不為默認(rèn)的22,比如改成了2222,那么需要這樣寫

注意的問題:

同步時保留原路徑,也就是把/home同步到/backup會變成/backup/home/*再內(nèi)容

--原目錄后面加不加/也影響你的同步

下面這三個有區(qū)別:

rsync -av /home/ /backup/        --/home下的內(nèi)容直接同步到/backup下   rsync -av  /home    /backup/ rsync -aRv  /home/    /backup/ --這兩上是/home被同步成/backup/home/*   # rsync -av /share/20160516 /backup/ --被同步成/backup/20160516/*   # rsync -aRv /share/20160516  /backup/ --被同步成/backup/share/20160516/*   如果源目錄有文件被刪除了,那同步的目標(biāo)目錄是刪除還是不刪除,是否可以用參數(shù)來控制? --delete # rsync  -aHAX --delete /test/ /test1/        --比較完整的一個寫法 擴(kuò)展file extended attributes # lsattr /etc/shadow        --列出文件屬性 -------------e- /etc/shadow # chattr +i /etc/shadow        --對這個文件加一個i屬性(i屬性表示文件完全不可變,不可刪),會讓所有用戶不能修改密碼 # lsattr /etc/shadow ----i--------e- /etc/shadow # chattr -i /etc/shadow        --去掉i屬性

5 配置rsync

5.1rsync被同步端配置

兩個文件:rsyncd.conf rsyncd.password

字面上看,一個是主配置文件,一個是存放認(rèn)證用戶密碼的。安裝完成rsync時,不會生成這個兩個配置文件,需要手工創(chuàng)建。cat /etc/rsyncd.conf --此文件不存在,需要手動建立(man rsyncd.conf參考幫助),路徑必須是/etc/rsyncd.conf

motd file=/etc/rsyncd.welcome  --歡迎文件,路徑自定義 uid = root gid = root user chroot = no max connections = 200 timeout = 600 pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/run/rsyncd.log   [backup]       -共享給客戶端看到的名字,名字自定義 path = /backup/  --實際共享的服務(wù)器路徑,名字必須是你要共享的實際路徑 ignore errors read only = no list = no hosts allow = 192.168.19.0/255.255.255.0 auth users = test secrets file = /etc/rsyncd.password   [www] path = /www/ ignore errors read only = no list = no hosts allow = 192.168.19.0/255.255.255.0 auth users = apache secrets file = /etc/rsyncd.password vim /etc/rsyncd.welcome--手動建立自己定義的motd文件,并寫上自定義的歡迎信息 rsyncd.password的配置 echo “test:test”>>/etc/rsyncd.password echo “apache:apache”>>/etc/rsyncd.password cat /etc/rsyncd.password

注意:該密碼文件中的用戶和密碼可以進(jìn)行自定義,同時該用戶不一定要在服務(wù)器中的系統(tǒng)用戶存在。

密碼文件創(chuàng)建完畢后,要把其權(quán)限要設(shè)置為600,否則會在以后同步時提示驗證出錯。如下:

chmod 600 /etc/rsyncd.password

以上兩個文件創(chuàng)建完畢后,我們來創(chuàng)建其對應(yīng)的目錄并授權(quán),如下:

mkdir /{backup,www} chown root:root –R /backup/ chown root:root –R /www/

5.2同步端配置

不需要啟動rsync服務(wù),創(chuàng)建密碼文件即可。

echo “apache”>>/etc/rsyncd.password

chmod 600 /etc/rsyncd.password

注意:該密碼文件中只能存放一個用戶的密碼,并且該文件與rsync服務(wù)器端的密碼文件一樣也需要把其權(quán)限設(shè)置為600。

5.3 驗證

# rsync -a 10.1.1.9::--直接這樣可以查看10.1.1.9這個服務(wù)器共享了哪些         "hello today! @_@"--這就是你rsyncd.welcome里寫的歡迎內(nèi)容 notes                   --這就是共享的名字 # rsync -a 10.1.1.9::notes /notes/

--這樣同步,是不需要密碼的;注意notes為共享名,前面有兩個:: 后面/notes為本地目錄

--沒有密碼有好處也有壞處,好處是不需要密碼方便寫腳本做遠(yuǎn)程同步。如果要密碼寫腳本就要用到expect自動應(yīng)答。壞處就是不安全,但你可以使用iptables等來加強(qiáng)安全。

--如果你希望有密碼,也不用傳密碼的話,可以用rsyncd本身自帶的secrets file來做驗證的用戶

5.4 同步出現(xiàn)的問題

如果同步報permission denied這種,可能是服務(wù)端selinux沒有關(guān)閉

關(guān)閉selinux的方法:

# setenforce 0   --這是馬上把selinux由強(qiáng)制模式改成警告模式

# vim /etc/selinux/config

SELINUX=disabled--把這個改成disabled,然后需要重啟電腦才能生效

同步時間慢

解決方法:綁定對方主機(jī)名

5.5在上面的基礎(chǔ)上加上一些功能

要求:

把日志記錄到/var/log/rsyncd.log

共享模塊要求隱藏(也就是說客戶端查看不到這個模塊名)

并且同時只能1個客戶端連接進(jìn)行同步這個module

只能允許192.168.19.x(ip你自定義)同步這個module

只能早上9點(diǎn)到下午6點(diǎn)同步

實現(xiàn):

方法1:在/etc/xinetd.d/rsync 加上參數(shù)log_type file /var/log/rsyncd.log;

方法2:在/etc/xinetd.d/rsync 加上參數(shù)log_type syslog local5;

方法3:在/etc/rsyncd.conf加上參數(shù) log file=/var/log/rsyncd.log;

方法4:在/etc/rsyncd.conf加上參數(shù)syslog facility=local5;  --但這一句在rhel6.5經(jīng)測試,必須要放在global配置里,放到modules配置里不能產(chǎn)生日志

--方法2和4還需要在/etc/rsyslog.conf里加上local5.* /var/log/rsyncd.log

# vim /etc/rsyncd.conf motd file=/etc/rsyncd.welcome [notes] path=/share/20160516 list=false max connections=1 log file=/var/log/rsyncd.log hosts allow=192.168.19.x      # vim /etc/xinetd.d/rsync access_times = 9:00-18:00 # /etc/init.d/xinetd restart

6 rsync的啟動與關(guān)閉

6.1啟動服務(wù)

源碼包安裝的rsync,使用rsync-daemon來啟動rsync。

echo PATH=$PATH:/usr/local/bin/>>/etc/profile source /etc/profile rsync –daemon   #啟動命令 ps aux |grep rsync netstat -tunlp |grep 873

如果配置不在默認(rèn)位置需要手動加載 rsync –daemon –config=/etc/rsyncd.conf

如果加載可以查看幫助文檔: rsync –daemon –help

rpm的加入到xinetd中,直接啟動xinetd即可

6.2關(guān)閉服務(wù)

源碼 pkill rsync

rpm /etc/init.d/xinetd stop

實現(xiàn)實時同步(也就是源一變化,它就會觸發(fā)同步)

7 inotify

7.1 inotify是什么

inotify是一種強(qiáng)大的、細(xì)粒度的、異步的文件系統(tǒng)事件監(jiān)控機(jī)制。

 通過inotify可以監(jiān)控文件系統(tǒng)中的添加、刪除、修改、移 動等各種細(xì)微事件。利用這個內(nèi)核接口,第三方軟件就可以監(jiān)控文件系統(tǒng)下文件的各種變化情況,而inotify-tools就是這樣一個第三方軟件。rsync同步數(shù)據(jù)的實時性問題剛好有inotify得到彌補(bǔ)

7.2 inotify相關(guān)參數(shù)解析

inotify定義了三個接口參數(shù),可以用來限制inotify消耗kernel memory的大小。

這些參數(shù)是內(nèi)存參數(shù),可以根據(jù)需求實時調(diào)節(jié)大小

/proc/sys/fs/inotify/max_queued_evnets

表示請求events數(shù)的大值,超出這個值的事件將被丟棄。該值默認(rèn)為16384。

注意:max_queued_events是inotify管理的隊列的大長度,文件系統(tǒng)變化越頻繁,這個值就應(yīng)該越大。

如果你在日志中看到Event Queue Overflow,說明max_queued_events太小需要調(diào)整參數(shù)后再次使用。

/proc/sys/fs/inotify/max_user_instances

表示每個user可創(chuàng)建的instances數(shù)量上限。該值默認(rèn)為128。

/proc/sys/fs/inotify/max_user_watches

表示可監(jiān)控目錄的大數(shù)。該值默認(rèn)為8192。

要修改以上默認(rèn)值,我們可以使用以下類似手段修改。如下:

echo 30000000>/proc/sys/fs/inotify/max_user_watches

8 inotify監(jiān)控文件事件類型

inotify可監(jiān)控的文件系統(tǒng)事件類型,如下:

IN_ACCESS:文件被訪問。

IN_MODIFY:文件被write。

IN_ATTRIB:文件屬性被修改,如chmod、chown等。

IN_CLOSE_WRITE:可寫文件被close。

IN_CLOSE_NOWRITE:不可寫文件被close。

IN_OPEN:文件被open。

IN_MOVED_FROM:文件被移出被監(jiān)控目錄,如mv。

IN_MOVED_TO:文件被移入被監(jiān)控目錄,如mv、cp。

IN_CREATE:文件/文件夾被創(chuàng)建。

IN_DELETE:文件/文件夾被刪除,如rm。

IN_DELETE_SELF:自刪除,即一個可執(zhí)行文件在執(zhí)行時刪除自己。

IN_MOVE_SELF:自移動,即一個可執(zhí)行文件在執(zhí)行時移動自己。

IN_UNMOUNT:宿主文件系統(tǒng)被umount。

IN_CLOSE:文件被關(guān)閉,等同于(IN_CLOSE_WRITE|IN_CLOSE_NOWRITE)。

IN_MOVE:文件被移動,等同于(IN_MOVED_FROM|IN_MOVED_TO)。

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

9 inotify-tools是什么

inotify是一個API,需要通過開發(fā)應(yīng)用程序進(jìn)行調(diào)用。inotify-tools就是這樣的一個inotify軟件,它是一套組件,包括一個C庫和幾個命令行工具。

inotify是為替代dnotify而設(shè)計的,它克服了dnotify的缺陷,提供了更好用的,更簡潔而強(qiáng)大的文件變化通知機(jī)制。

1)inotify不需要對被監(jiān)視的目標(biāo)打開文件描述符,如果被監(jiān)視目標(biāo)在可移動介質(zhì)上,那么在umount該介質(zhì)上的文件系統(tǒng)后,被監(jiān)視目標(biāo)對應(yīng)的watch將被自動刪除,并且會產(chǎn)生一個umount事件。

2)inotify既可以監(jiān)視文件,又可以監(jiān)視目錄。

3)inotify使用系統(tǒng)調(diào)用而非SIGIO信號來通知文件系統(tǒng)事件。

4)inotify使用文件描述符作為接口,因而可以使用通常的文件I/O操作select和poll來監(jiān)視文件系統(tǒng)的變化。

10 安裝inotify-tools

兩種方式:源碼和rpm

注意:inotify-tools主要是通過inotifywait和inotifywatch,這兩個命令進(jìn)行工作。而inotifywait命令,是生產(chǎn)環(huán)境中使用最多的命令。

10.1 源碼包安裝

下載地址:https://github.com/rvoicilas/inotify-tools/wiki

注意:不建議使用wget下載inotify-tools,因為網(wǎng)站原因下載不成功,wget https://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

我們可以先通過瀏覽器下載本地,然后通過rz命令上傳到服務(wù)器。

要使用rz命令,我們需要安裝lrzsz軟件,如下:

yum -y install lrzsz tar -xf inotify-tools-3.14.tar.gz ./configure make&&make install ls /usr/local/bin/ # /usr/local/bin/inotifywait --help /usr/local/bin/inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot open shared object file: No such file or director  如果報錯,找不到那個庫,這個庫實際上是在/usr/local/lib下的 解決方法  # echo /usr/local/lib/  > /etc/ld.so.conf.d/abc.conf # ldconfig

10.2 rpm包安裝

配置yum源

我們可以去下面這個連接下載最新的yum源,如下:

http://dl.fedoraproject.org/pub/epel/6/x86_64/ 下載epel-release-6-8.noarch.rpm軟件包并安裝,如下: wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm  rpm -ivh epel-release-6-8.noarch.rpm yum –y install inotify-tools rpm -ql inotify-tools 安裝完成后,會產(chǎn)生下面兩個命令 [root@localhost test]# ls /usr/bin/inotify* /usr/bin/inotifywait  /usr/bin/inotifywatch

11.inotifywait使用詳解

inotifywait是一個監(jiān)控等待事件,它主要用于監(jiān)控文件或目錄的變化,并且可以遞歸地監(jiān)控整個目錄樹。

11.1 .inotifywait命令詳解

通過inotifywait -h來查看幫助信息

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

-r表示遞歸查詢目錄。

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

-e通過此參數(shù)可以指定要監(jiān)控的事件??杀O(jiān)聽的事件,如下:

access:訪問,讀取文件。

modify:修改,文件內(nèi)容被修改。

attrib:屬性,文件元數(shù)據(jù)被修改。

move:移動,對文件進(jìn)行移動操作。以及重命名,對文件進(jìn)行重命名。

create:創(chuàng)建,生成新文件

open:打開,對文件進(jìn)行打開操作。

close:關(guān)閉,對文件進(jìn)行關(guān)閉操作。

delete:刪除,文件被刪除。

–timefmt是指定時間的輸出格式,用于–format選項中的%T格式。

–format指定文件變化的詳細(xì)信息輸出格式。格式參數(shù)如下:

%w表示發(fā)生事件的目錄

%f表示發(fā)生事件的文件

%e表示發(fā)生的事件

%T使用由–timefmt定義的時間格式

%Xe事件以“X”分隔

11.2 inotifywait命令實例

我們要監(jiān)測/home目錄下所有文件及目錄的變化情況,命令如下:

inotifywait -mrq –timefmt ‘%y/%m/%d/%H:%M’ –format ‘%T %w %f %e’ -e modify,delete,create,attrib,move,open,close,access /home/

這條命令是對/home目錄下所有文件及目錄的操作進(jìn)行監(jiān)控。

打開一臺機(jī)的兩個窗口,一邊建文件,一邊查看狀態(tài)看看是否會有變化

12. inotifywatch使用詳解

inotifywatch主要用于收集被監(jiān)控的文件系統(tǒng)統(tǒng)計數(shù)據(jù),包括每個inotify事件發(fā)生多少次等信息。

12.1.inotifywatch命令詳解

inotifywatch -h 查看幫助信息

inotifywatch參數(shù)說明如下:

-h:輸出幫助信息。

-v:輸出詳細(xì)信息。

@:排除不需要監(jiān)視的文件,可以是相對路徑,也可以是絕對路徑。

–-fromfile:從文件讀取需要監(jiān)視的文件或排除的文件,一個文件一行,排除的文件以@開頭。

-z:輸出表格的行和列,即使元素為空。

–-exclude:正則匹配需要排除的文件,大小寫敏感。

–-excludei:正則匹配需要排除的文件,忽略大小寫。

-r:監(jiān)視一個目錄下的所有子目錄。

-t:設(shè)置超時時間。

-e:只監(jiān)聽指定的事件。該事件與inotifywait監(jiān)聽的事件類型一樣。

-a:以指定事件升序排列。

-d:以指定事件降序排列。

要求統(tǒng)計60秒內(nèi)/home目錄下文件系統(tǒng)的事件,使用如下命令:

inotifywatch -v -e modify,delete,create,attrib,move,open,close,access -e modify -t 60 -r /home

打開一臺機(jī)的兩個窗口,一邊建文件,一邊查看狀態(tài)看看是否會有變化

13 inotify-tools與rsync集成

inotify-tools與rsync的集成主要是通過inotifywait命令與rsync命令集成來實現(xiàn)的,并且該集成主要是體現(xiàn)的rsync被同步端,而rsync同步端不需要太多配置。

注意:該集成的主要目的是把rsync被同步端需要備份的文件實時推送到rsync同步端上。

通過下面的實例來說明

14 應(yīng)用實例

14.1 實現(xiàn)單向本地目錄實時同步

測試本機(jī)/test目錄里一有(增,刪,改,屬性改變),就會同步到/test1目錄

--使用下面的腳本來做

#vim /tmp/1.sh #!/bin/bash /usr/local/bin/inotifywait -mrq  -e modify,delete,create,attrib,move /test |while read events do                 rsync -a --delete /test/ /test1/                 echo "`date +'%F %T'`出現(xiàn)事件$events" >> /var/log/rsync.log 2>&1 done # nohup sh /tmp/1.sh  &

--使用nohup掛起到后臺執(zhí)行,終端關(guān)閉,這個進(jìn)程也不會被關(guān)閉

--如果你希望實現(xiàn)開機(jī)自動啟動,可以把此命令加到/etc/rc.local里,或者寫成shell服務(wù)腳本,讓其支持chkconfig開機(jī)自動啟動

再然后對/test進(jìn)行各種操作,驗證可以實時同步到/test1

14.2 實現(xiàn)雙向本地目錄的實時同步

也有相關(guān)的軟件(比如unison)可以專門來做雙向的實時同步

但我們就可以用inotify反向再做一次再寫一個腳本也一樣可以簡單去實現(xiàn),這里不再介紹

14.3 遠(yuǎn)程實時同步

方法一:inotify+rsync+nfs

這個方法的思路是:

把遠(yuǎn)程的目錄通過nfs服務(wù)掛載到本地,然后當(dāng)做本地目錄一樣來使用,這樣就避免了rsync同步遠(yuǎn)程時要輸密碼的問題

在rhel6.5測試為:使用innotify監(jiān)控遠(yuǎn)程nfs掛載的目錄再同步到本地目錄,無法成功;(在遠(yuǎn)程機(jī)器操作,不會同步到本地。但在掛到本地的目錄操作,也會同步到本地。原因:就是inotify只能監(jiān)控本機(jī)上的目錄,不能監(jiān)控另外一臺機(jī)器上的目錄)

但是反過來,使用innotify監(jiān)控本地目錄,再同步到遠(yuǎn)程nfs掛載的目錄,可以成功

實現(xiàn)把10.1.1.9上的/test目錄實時同步到192.168.19.248上的/test1目錄

   10.1.1.9 /test目錄     192.168.19.248  /test1目錄

在192.168.19.248上

# vim /etc/exports /test1  *(rw,no_root_squash) # /etc/init.d/rpcbind restart # /etc/init.d/nfs  restart 在10.1.1.9上 # mkdir /test1/ # mount -t nfs -o vers=3 192.168.19.248:/test1  /test1    --用nfs3版本掛載過來,那么/test1目錄就是192.168.19.248上的遠(yuǎn)程/test1目錄了 執(zhí)行上面講的兩個本地目錄同步一樣的腳本,測試就可以了 #vim /tmp/1.sh #!/bin/bash /usr/local/bin/inotifywait -mrq  -e modify,delete,create,attrib,move /test |while read events do                 rsync -a --delete /test/ /test1/                 echo "`date +'%F %T'`出現(xiàn)事件$events" >> /var/log/rsync.log 2>&1 done #nohup sh /tmp/1.sh  &

測試(過程省略)但注意在測試之前把前面例子運(yùn)行的腳本進(jìn)程通過ps找出來,并kill掉

--擴(kuò)展,如果把nfs換成samba服務(wù),通過mount -t cifs指令把遠(yuǎn)程samba共享目錄掛載到本地,是否可行?

方法二:使用ssh等效性(ssh密鑰登錄)讓遠(yuǎn)程機(jī)器連接不需要密碼,就很容易使用遠(yuǎn)程監(jiān)控或同步了

在10.1.1.9上產(chǎn)生一對密鑰

# ssh-keygen # scp /root/.ssh/id_rsa.pub 192.168.19.248:/root/.ssh/authorized_keys # ssh-add /root/.ssh/id_rsa 然后實現(xiàn)遠(yuǎn)程實時同步,只需要在原來的腳本基礎(chǔ)上把遠(yuǎn)程目錄前加上遠(yuǎn)程IP就可以了(因為做了ssh等效性,不需要密碼) #!/bin/bash /usr/local/bin/inotifywait -mrq  -e modify,delete,create,attrib,move /test |while read events do                 rsync -a --delete /test/ 192.168.19.248:/test1/                 echo "`date +'%F %T'`出現(xiàn)事件events" >> /var/log/rsync.log 2>&1 done

方法三:不做上面方法二的ssh密鑰,使用expect腳本來解決密碼問題

#!/bin/bash /usr/local/bin/inotifywait -mrq  -e modify,delete,create,move /test |while read events do sed -i '/^192.168.19.248/d' /root/.ssh/known_hosts expect <<EOF &> /dev/null spawn rsync -a --delete /test/ 192.168.19.248:/test1/ expect "no)?" send "yes\r" expect "password:" send "123456\r" expect eof EOF         echo "`date +'%F %T'`出現(xiàn)事件events" &>> /var/log/rsync.log done

測試:要先把上面執(zhí)行的腳本進(jìn)程都kill掉,再重新執(zhí)行這個腳本來驗證

方法四,使用rsync的secrets file的方法然后寫腳本

例:

       本地同步端 ----->遠(yuǎn)程被同步端

       10.1.1.9   192.168.19.248

我要實現(xiàn)把本地同步端10.1.1.9上的/test/目錄里的內(nèi)容實時同步到遠(yuǎn)程被同步端192.168.19.248的/test1/目錄

準(zhǔn)備:

關(guān)閉iptables和selinux

實現(xiàn)過程

在遠(yuǎn)程被同步端192.168.19.248上操作

# mkdir /test1/    --創(chuàng)建測試的被同步目錄 # vim /etc/rsyncd.conf uid=root        gid=root        --這里指定使用root身份同步到192.168.19.248,否則默認(rèn)使用nobody用戶(這樣你需要把/test1/目錄改成757的權(quán)限,才有權(quán)限寫) [testsource] path=/test1/ ignore errors read only=no        --服務(wù)級別給寫權(quán)限 auth users=test        --驗證的用戶取名為test(此用戶與系統(tǒng)用戶無關(guān)) secrets file=/etc/rsyncd.secrets    --驗證用戶test的用戶名和密碼的存放文件,此文件需要同步端和被同步端都要有(這樣我們就可以用這種方式來進(jìn)行驗證,而不需要遠(yuǎn)程的ssh密碼驗證了) hosts allow=10.1.1.9        --進(jìn)一步加強(qiáng)安全,只允許10.1.1.9同步 # vim /etc/rsyncd.secrets    --創(chuàng)建這個密碼文件,用戶名要與上面的auth users指定的一致,密碼隨意(我這里以321來測試) test:321 # chmod 600 /etc/rsyncd.secrets    --為了安全性,把權(quán)限改成600,只讓root讀寫(很多其它軟件的密碼文件也會要求你改成600權(quán)限) #  yum install xinetd -y # vim /etc/xinetd.d/rsync       disable = no        -- disable 后面值由yes改為no # /etc/init.d/xinetd restart    --重啟服務(wù) # netstat -ntlup |grep :873    --驗證873端口是否啟動 tcp        0      0 :::873                      :::*                        LISTEN      50438/xinetd   # chkconfig xinetd on    --設(shè)置開機(jī)自動啟動

在本地同步端10.1.1.9操作

先安裝inotify軟件,步驟參照上面過程,這里省略

# mkdir /test/    --創(chuàng)建測試的同步目錄 # vim /etc/rsyncd.secrets    --也要創(chuàng)建這個密碼文件,里面只寫密碼就可以了。用戶我們在后面的腳本里的命令里指定 321 # chmod 600 /etc/rsyncd.secrets  --也改成600的權(quán)限  # vim /tmp/rsync.sh    --腳本及其內(nèi)容(這里強(qiáng)調(diào)一下,這里是測試方便,所以才放到/tmp下,生產(chǎn)環(huán)境可以放到/bin這種目錄下做成一個命令)  #!/bin/bash /usr/local/bin/inotifywait -mrq  -e modify,delete,create,attrib,move /test |while read events do                             rsync -a --delete  --password-file=/etc/rsyncd.secrets /test/ test@192.168.19.248::testsource done  # chmod 755 /tmp/rsync.sh   --給執(zhí)行權(quán)限,方便執(zhí)行  # nohup sh /tmp/rsync.sh &   --后面掛起執(zhí)行  # vim /etc/rc.local        --加到rc.local里讓其開頭自動啟動 #nohup sh /tmp/rsync.sh &

測試過程省略

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站標(biāo)題:rsync+inotify實現(xiàn)實時同步-創(chuàng)新互聯(lián)
URL地址:http://jinyejixie.com/article22/depijc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、云服務(wù)器移動網(wǎng)站建設(shè)、小程序開發(fā)、網(wǎng)站排名全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
南投市| 米易县| 新邵县| 左权县| 南澳县| 闽清县| 澳门| 峡江县| 乃东县| 洪江市| 宜阳县| 洞头县| 尖扎县| 睢宁县| 水城县| 和林格尔县| 白山市| 刚察县| 长白| 哈尔滨市| 甘谷县| 沿河| SHOW| 安泽县| 江西省| 旌德县| 建阳市| 永安市| 徐州市| 漳平市| 海林市| 皮山县| 海原县| 获嘉县| 营口市| 称多县| 三门峡市| 宁化县| 马公市| 微山县| 太保市|