0基礎(chǔ)自學(xué)linux運(yùn)維-2.8-centos6配置rsync及與inotify和sersync的配合

一征冷、rsync相關(guān)知識(shí)

1.1.什么是rsync

官方網(wǎng)址:http://sersync.sourceforge.net/

rsync是一款開(kāi)源骄噪,快速洛史,多功能的可實(shí)現(xiàn)增量的本地或遠(yuǎn)程的數(shù)據(jù)鏡像同步備份的優(yōu)秀工具。適用于多個(gè)平臺(tái)锌半。從軟件名稱(chēng)可以看出來(lái)是遠(yuǎn)程同步的意思(remote sync)俗慈『Я剑可使本地主機(jī)不同分區(qū)或目錄之間及本地和遠(yuǎn)程兩臺(tái)主機(jī)之間的數(shù)據(jù)快速同步鏡像,遠(yuǎn)程備份等功能姜盈。

? ?在同步備份時(shí)际看,默認(rèn)情況下秕豫,rsync通過(guò)其獨(dú)特的“quick check”算法誉帅,僅同步大小或者最后修改時(shí)間發(fā)生變化的文件或目錄(也可根據(jù)權(quán)限陋葡,屬主等變化同步,需要制定參數(shù))救拉。甚至是只同步一個(gè)文件里變化的內(nèi)容部分难审,所以可以實(shí)現(xiàn)快速的同步數(shù)據(jù)的功能。

提示:傳統(tǒng)的cp亿絮,scp工具拷貝每次均為完整拷貝告喊,而rsync除了完整拷貝,還具備增量拷貝的功能派昧,因此從此性能及效率上更勝一籌黔姜。

1.2.rsync的特性

Rsync的特性如下:

支持拷貝特殊文件如鏈接,設(shè)備等

可以有排除指定文件或目錄同步的功能蒂萎,相當(dāng)于打包命令tar

可以保持原來(lái)文件或目錄的權(quán)限秆吵,時(shí)間,軟硬鏈接等所有屬性均不改變五慈。

可實(shí)現(xiàn)增量同步纳寂,即只同步發(fā)生變化的數(shù)據(jù),因此數(shù)據(jù)傳輸效率更高

可以使用rcp泻拦,rsh毙芜,ssh等方式來(lái)配合傳輸文件,也可以通過(guò)直接的socker鏈接

支持匿名的或認(rèn)證的進(jìn)程模式傳輸争拐,方便進(jìn)行數(shù)據(jù)備份及鏡像腋粥。


1.3.rsync核心算法介紹

假定在名為α和β的兩臺(tái)計(jì)算機(jī)之間同步相似的文件?A?與?B?,其中α對(duì)文件?A?擁有訪(fǎng)問(wèn)權(quán)陆错,β對(duì)文件?B?擁有訪(fǎng)問(wèn)權(quán)灯抛。并且假定主機(jī)α與β之間的網(wǎng)絡(luò)帶寬很小。那么?rsync?算法將通過(guò)下面的五個(gè)步驟來(lái)完成:

1.β將文件?B?分割成一組不重疊的固定大小為?S?字節(jié)的數(shù)據(jù)塊音瓷。最后一塊可能會(huì)比?S?小对嚼。

2. [endif]β對(duì)每一個(gè)分割好的數(shù)據(jù)塊執(zhí)行兩種校驗(yàn):一種是?32?位的滾動(dòng)弱校驗(yàn),另一種是?128?位的?MD4?強(qiáng)校驗(yàn)绳慎。

3. [endif]β將這些校驗(yàn)結(jié)果發(fā)給α纵竖。

4. [endif]α通過(guò)搜索文件?A?的所有大小為?S?的數(shù)據(jù)塊?(?偏移量可以任選,不一定非要是?S?的倍數(shù)?)?杏愤,來(lái)尋找與文件?B的某一塊有著相同的弱校驗(yàn)碼和強(qiáng)校驗(yàn)碼的數(shù)據(jù)塊靡砌。這項(xiàng)工作可以借助滾動(dòng)校驗(yàn)的特性很快完成。

5. [endif]α發(fā)給β一串指令來(lái)生成文件?A?在β上的備份珊楼。這里的每一條指令要么是對(duì)文件?B?經(jīng)擁有某一個(gè)數(shù)據(jù)塊而不須重傳的證明通殃,要么是一個(gè)數(shù)據(jù)塊,這個(gè)數(shù)據(jù)塊肯定是沒(méi)有與文件?B?的任何一個(gè)數(shù)據(jù)塊匹配上的厕宗。

-------------------------------------小結(jié)------------------------------------------------

rsync就是會(huì)同步我們指定的兩端目錄之間的數(shù)據(jù)画舌,這個(gè)數(shù)據(jù)可以是特殊的數(shù)據(jù)堕担。同步之前就先進(jìn)行兩端的數(shù)據(jù)的比對(duì),只會(huì)同步兩者之間不同的部分曲聂,并保留文件原本的屬性霹购。并且支持匿名的方式進(jìn)行同步傳輸。所以rsync在備份朋腋,同步上就會(huì)較為快速齐疙。

-----------------------------------------------------------------------------------------


1.4.rsync拉和取只能在客戶(hù)端操作(重要)

在有rsync配置文件的情況下,拉和取都只能在客戶(hù)端操作旭咽,如

web(rsync client) àbackup(rsync master)

web(rsync client) ?backup(rsync master)

以上命令行的推送和拉取操作都是在web上進(jìn)行的贞奋。

為什么呢?

很簡(jiǎn)單轻专,如果推送和接取都在rsync客戶(hù)端操作的話(huà),試想一下请垛,如果有一組web要備份到備份服務(wù)器中催训,那么所有的web服務(wù)器都要配置rsync服務(wù)端,為成了“1客戶(hù)端多服務(wù)端”

會(huì)不會(huì)感覺(jué)很怪宗收?漫拭!

再說(shuō)每臺(tái)web配置rsync服務(wù)端,還是在1臺(tái)備份服務(wù)器配置一次rsync服務(wù)端混稽,那種效率高采驻?!當(dāng)然是在備份服務(wù)器只配置一次啦匈勋!

再?gòu)馁Y源占用上rsync客戶(hù)端相對(duì)服務(wù)器端占用少礼旅,從安全角度還不會(huì)像服務(wù)端開(kāi)放端口


如果是使用rsync命令直接同步,沒(méi)有接配置文件的洽洁,在哪端執(zhí)行都行痘系。

如:rsync-ar root@192.168.3.76:/disk1/tools/* /disk1/tools/


1.5.rsync認(rèn)證方式

rsync有兩種常用的認(rèn)證方式,一種是rsync-daemon方式饿自,另外一種是ssh方式汰翠。在平時(shí)使用過(guò)程,我們使用最多的是rsync-daemon方式昭雌。

注意:在使用rsync時(shí)复唤,服務(wù)器和客戶(hù)端都必須安裝rsync程序

#1.rsync-daemon認(rèn)證

rsync在rsync-daemon認(rèn)證方式下烛卧,默認(rèn)監(jiān)聽(tīng)TCP的873端口佛纫。

rsync-daemon認(rèn)證方式是rsync的主要認(rèn)證方式,這個(gè)也是我們經(jīng)常使用的認(rèn)證方式。并且也只有在此種模式下呈宇,rsync才可以把密碼寫(xiě)入到一個(gè)文件中跟磨。

注意:rsync-daemon認(rèn)證方式,需要服務(wù)器和客戶(hù)端都安裝rsync服務(wù)攒盈,并且只需要rsync服務(wù)器端啟動(dòng)rsync,同時(shí)配置rsync配置文件哎榴⌒突恚客戶(hù)端啟動(dòng)不啟動(dòng)rsync服務(wù),都不影響同步的正常進(jìn)行尚蝌。

#2.ssh認(rèn)證

rsync在ssh認(rèn)證方式下迎变,可通過(guò)系統(tǒng)用戶(hù)進(jìn)行認(rèn)證,即在rsync上通過(guò)ssh隧道進(jìn)行傳輸飘言,類(lèi)似于scp工具衣形。此時(shí)同步操作不在局限于rsync中定義的同步文件夾。

注意:ssh認(rèn)證方式姿鸿,不需要服務(wù)器和客戶(hù)端配置rsync配置文件谆吴,只需要雙方都安裝rsync服務(wù),并且也不需要雙方啟動(dòng)rsync苛预。

若rsync服務(wù)端SSH為標(biāo)準(zhǔn)端口句狼,此時(shí)rsync使用方式如下:

rsync -avz /root/test root@192.168.3.75:/root/


1.6. rsync命令同步參數(shù)選項(xiàng)

常用參數(shù)選項(xiàng)說(shuō)明:

參數(shù)完整參數(shù)說(shuō)明

-v--verbose詳細(xì)模式輸出,傳輸時(shí)的進(jìn)度信息

-z--compress傳輸時(shí)進(jìn)行壓縮以提高傳輸效率热某, --compress-level=NUM可按級(jí)別壓縮

-a--archive歸檔模式腻菇,表示以遞歸方式傳輸文件,并保持所有文件屬性昔馋,等于-rtopgDl

-r--recursive對(duì)子目錄以遞歸模式筹吐,即目錄下的所有目錄都同樣傳輸,注意是小寫(xiě)r

-t--times保持文件時(shí)間信息

-o--owner保持文件屬主信息

-p--perms保持文件權(quán)限

-g--group保持文件屬組信息

-P--progress顯示同步的過(guò)程及傳輸時(shí)的進(jìn)度等信息

-D--devices保持設(shè)備文件信息

-l--links保持軟鏈接

-e--rsh=COMMAND使用的信道協(xié)議秘遏,指定替代rsh的shell程序丘薛,例如ssh

--exclude=PATTERN指定排除不需要傳輸?shù)奈募J?/p>

--exclude-from=FILE從文件中讀取指定排除不需要傳輸?shù)奈募J?/p>

保持同步目錄及文件屬性:

???????? 這里的-avz --progress相當(dāng)于-vzrtopgDl --progress(還多了個(gè)Dl功能),生產(chǎn)環(huán)境常用的參數(shù)選項(xiàng)為-avz --progress或-vzrtopg --progress 如果放入腳本中垄提,也可以把-v和--progress(-P)去掉榔袋。

二、實(shí)驗(yàn)環(huán)境

2.1.實(shí)驗(yàn)環(huán)境

拓?fù)鋱D:


2.2.centos6.5環(huán)境設(shè)置

#1.關(guān)閉iptables及selinux

setenforce off

sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config

grep '^SELINUX=' /etc/selinux/config

/etc/init.d/iptables stop

chkconfig iptables off

#2.設(shè)置時(shí)間同步

yum install ntp -y

/usr/sbin/ntpdate pool.ntp.org

echo '#time sync by hua'>>/var/spool/cron/root

echo '*/5 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1'>>/var/spool/cron/root

crontab -l

#3.其它

#1)修改主機(jī)名

vi /etc/sysconfig/network

#設(shè)置HOSTNAME=有機(jī)名

#rsync服務(wù)端所在主機(jī)铡俐,主機(jī)名修改為backup

sed -i "/HOSTNAME/s/`hostname`/backup/" /etc/sysconfig/network

grep 'HOSTNAME' /etc/sysconfig/network

#rsync客戶(hù)端所在主機(jī)是跑web服務(wù)器凰兑,故主機(jī)名改為web

sed -i "/HOSTNAME/s/`hostname`/web/" /etc/sysconfig/network

grep 'HOSTNAME' /etc/sysconfig/network

#重啟

shutdown -r now

#2)安裝epel源(安裝inotify)

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm


、rsync服務(wù)端安裝及配置(備份服務(wù)器上操作)

3.1.rsync安裝(yum)

#1.安裝rsync

##rsync是靠xinetd管理的审丘,也可以直接用“rsync

--daemon”后臺(tái)運(yùn)行

#xintetd為rsync 守護(hù)進(jìn)程管理工具

yum install -y rsync xinetd

#2.查看安裝目錄

#從下面的目錄中看吏够,除了前兩個(gè)其它的都不重要,一個(gè)是rsync配置,一個(gè)是rsync命令

#rsync是靠xinetd管理的

[root@backup ~]# rpm -ql rsync

/etc/xinetd.d/rsync

/usr/bin/rsync

/usr/share/doc/rsync-3.0.6

/usr/share/doc/rsync-3.0.6/tech_report.tex

/usr/share/man/man1/rsync.1.gz

/usr/share/man/man5/rsyncd.conf.5.gz


#3.創(chuàng)建rsync用戶(hù)及密碼

useradd -s /sbin/nologin -M rsync id rsync

3.2.創(chuàng)建rsync配置文件

rsync服務(wù)器端需要兩個(gè)配置文件:rsyncd.conf锅知、rsyncd.password播急。其中rsyncd.conf默認(rèn)存放在/etc/目錄下,同時(shí)它也是rsync服務(wù)器的主配置文件售睹。該文件配置了rsync服務(wù)器的控制認(rèn)證桩警、訪(fǎng)問(wèn)、日志記錄等等昌妹。而rsyncd.password主要用于存儲(chǔ)rsync用戶(hù)名和密碼捶枢。但是在rsync安裝完畢后后是不會(huì)生成以上這兩個(gè)配置文件的,需要我們手工進(jìn)行創(chuàng)建飞崖。

#1.創(chuàng)建主配置文件rsyncd.conf

配置幫助:man rsyncd.conf烂叔,也可以看文章的“附一”

#在創(chuàng)建配置文件的時(shí)間,值得注意的是不要在參數(shù)同行后面加“#”號(hào)注解固歪,這時(shí)會(huì)被

#認(rèn)為是“#”是符號(hào)而非注解蒜鸡!

例如:authusers = test? #虛擬用戶(hù),將會(huì)認(rèn)為密碼是“test? #虛擬用戶(hù)”而非test,會(huì)報(bào)

#“@ERROR: auth failed on module tools”,排得你頭都大@紊选逢防!

cat>>/etc/rsyncd.conf<<EOF

#rsync_config______________________start

#created by oldboy

##rsyncd.conf start##

# 用戶(hù)遠(yuǎn)端的命令使用rsync訪(fǎng)問(wèn)共享目錄

uid = rsync

# 用戶(hù)組

gid = rsync

# 安全相關(guān)

use chroot = no

# 最大連接數(shù)

max connections = 200

# 超時(shí)時(shí)間

timeout = 300

# 進(jìn)程對(duì)應(yīng)的進(jìn)程號(hào)文件

pid file = /var/run/rsyncd.pid

# 鎖文件

lock file =

/var/run/rsyncd.lock

# 日志文件

log file = /var/log/rsyncd.log

# 忽略錯(cuò)誤

ignore errors

# 可寫(xiě)

read only = false

# 不能列表

list = false

# 允許連接的服務(wù)器

hosts allow = 192.168.3.0/24

# 后勤組連接的服務(wù)器

hosts deny = 0.0.0.0/32

# 虛擬用戶(hù),可以不存在

auth users = test

# 虛擬用戶(hù)對(duì)應(yīng)的用戶(hù)和密碼文件

secrets file =

/etc/rsync.password


# 模塊名稱(chēng)

[web76_tools]

# 服務(wù)端提供訪(fǎng)問(wèn)的目錄

path = /disk1/backup/76/disk1_tools


#rsync_config______________________end

EOF

cat /etc/rsyncd.conf

#修改目錄權(quán)限贰健,使它能讀寫(xiě)操作

mkdir -p /disk1/backup/76/disk1_tools

chown rsync.rsync -R /disk1/backup/76/disk1_tools


#2.創(chuàng)建密碼文件rsync.password

???????? 配置密碼文件的格式為“用戶(hù)名:密碼”胞四,密碼文件權(quán)限必須為600

echo 'test:123456'

>/etc/rsync.password

cat /etc/rsync.password

chmod 600 /etc/rsync.password

3.啟動(dòng)rsync服務(wù)

#1.啟動(dòng)rsync服務(wù)

rsync --daemon

#拓展:rsync的進(jìn)程參數(shù)選項(xiàng)

--daemon? ???? 表示以守護(hù)進(jìn)程的方式啟動(dòng)rsync服務(wù)

--address ? ???? 綁定指定的IP地址提供服務(wù)

--config=FILE??? 更改配置文件路徑,而不是默認(rèn)的/etc/rsyncd.conf

--port=PORT???? 更改其它端口提供服務(wù)伶椿,而不是缺少的873端口

提示:以上幾個(gè)選項(xiàng)為了解內(nèi)容辜伟,生產(chǎn)場(chǎng)景使用不多

ps -ef |grep rsync

netstat -antlp|grep rsync

#2.設(shè)置rsync服務(wù)開(kāi)機(jī)啟動(dòng)

方法一:

echo '/usr/bin/rsync --daemon'

>>/etc/rc.local

tail -1 /etc/rc.local

#重啟rsync組合命令

pkill rsync

pkill rsync

sleep 2

ps -ef |grep rsync


rsync --daemon

ps -ef |grep rsync

netstat -antlp|grep rsync


方法二:

#也可以使用xinetd啟動(dòng),進(jìn)行會(huì)顯示為xinetd而非rsync

cd /etc/xinetd.d/

cp rsync rsync.orig

vim rsync

#修改如下:只需“disable = no”其它不變脊另,user不要改為rsync否則手工測(cè)試會(huì)報(bào)

# “@ERROR: failed toopen lock file”錯(cuò)誤

/etc/init.d/xinetd start

netstat -ntlp|grep 873

#注意导狡,此處的進(jìn)程是xinetd,并非是rsync

ps -ef |grep xinetd

#xinetd默認(rèn)是開(kāi)機(jī)啟動(dòng)的偎痛,所以不用chkconfig

xinetd on設(shè)置

chkconfig --list xinetd

四旱捧、rsync客戶(hù)端安裝及配置(web服務(wù)器上操作)

4.1.rsync安裝(yum)

#1.安裝rsync

##rsync是靠xinetd管理的,也可以直接用“rsync

--daemon”后臺(tái)運(yùn)行

yum install -y rsync xinetd

#2.創(chuàng)建rsync用戶(hù)及密碼

useradd -s /sbin/nologin -M rsync id rsync


4.22.創(chuàng)建密碼文件rsync.password

客戶(hù)端不需要用到/etc/rsyncd.conf配置文件踩麦,故不用生成枚赡。

#注意客戶(hù)端的rsync.password只有密碼,是不是“用戶(hù)名:密碼”N角贫橙!

echo '123456' >/etc/rsync.password

cat /etc/rsync.password

#權(quán)限一定要為600

chmod 600 /etc/rsync.password

ll /etc/rsync.password


4.3.手工測(cè)試

登陸客戶(hù)端,測(cè)試一下拉取命令

#建立測(cè)試目錄反粥,建立一個(gè)t1.txt文件卢肃,建立hua目錄疲迂,建立一個(gè)軟鏈接

mkdir -p /disk1/tools

cd /disk1/tools

echo "76? /disk1/tools/t1.txt"> t1.txt

echo 'web /disk1/tools/hua/1.txt' >hua/1.txt

echo 'web /disk1/tools/hua/2.txt' >hua/2.txt

ln -s /etc/nginx nginx

#手工測(cè)試rsync,記住要在客戶(hù)端上操作

#rsync接模塊用“用戶(hù)@IP::模塊”方式

rsync -avP /disk1/tools/* test@192.168.3.75::web76_tools--password-file=/etc/rsync.password

#從上面的圖來(lái)看是推送成功了莫湘,去備份服務(wù)器查看一下尤蒿,如圖說(shuō)明rsync支持軟鏈接

ll /disk1/backup/76/disk1_tools/

cd /disk1/backup/76/disk1_tools

cat t1.txt

cat hua/1.txt

cat hua/2.txt



、inotify+rsync實(shí)時(shí)同步

5.1.rsync的優(yōu)點(diǎn)與不足

rsync在Linux/Unix下是一個(gè)比較重要和實(shí)用的服務(wù)幅垮,大家應(yīng)該已經(jīng)知道rsync具有安全性高腰池、備份迅速、支持增量備份等優(yōu)點(diǎn)忙芒。

通過(guò)rsync可以解決對(duì)實(shí)時(shí)性要求不高的數(shù)據(jù)備份需求巩螃,例如:定期備份文件服務(wù)器數(shù)據(jù)到遠(yuǎn)端服務(wù)器,對(duì)本地磁盤(pán)定期做數(shù)據(jù)鏡像等匕争。

隨著應(yīng)用系統(tǒng)規(guī)模的不斷擴(kuò)大,對(duì)數(shù)據(jù)安全性和可靠性也提出了更高的要求爷耀,rsync在高端業(yè)務(wù)系統(tǒng)中也逐漸暴露出它的不足甘桑。

[if !supportLists]l? [endif]首先,rsync在進(jìn)行同步數(shù)據(jù)時(shí)歹叮,需要先掃描所有文件后進(jìn)行比對(duì)跑杭,然后再進(jìn)行差量傳輸。如果文件數(shù)量達(dá)到百萬(wàn)甚至千萬(wàn)級(jí)咆耿,掃描所以文件將是非常耗時(shí)的德谅。而且發(fā)生變化的往往是其中很少的一部分文件,這是非常低效的方式萨螺。

[if !supportLists]l? [endif]其次窄做,rsync不能實(shí)時(shí)地去監(jiān)測(cè)、同步數(shù)據(jù)慰技。雖然它可以通過(guò)Linux守護(hù)進(jìn)程的方式觸發(fā)同步椭盏,但是兩次觸發(fā)動(dòng)作之間一定會(huì)有時(shí)間差。這樣就可能會(huì)導(dǎo)致服務(wù)端和客戶(hù)端數(shù)據(jù)出現(xiàn)不一致的情況吻商,無(wú)法在應(yīng)用出現(xiàn)故障時(shí)完全恢復(fù)數(shù)據(jù)掏颊。

基于以上原因,所以就考慮采用rsync與inotify集成的方式來(lái)解決這些問(wèn)題艾帐。

5.2.innotify介紹

#1.inotify是什么

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

Linux內(nèi)核從2.6.13(2005年8月)起准浴,加入了對(duì)inotify的支持,通過(guò)inotify可以監(jiān)控文件系統(tǒng)中的添加揍鸟、刪除兄裂、修改句旱、移動(dòng)等各種細(xì)微事件。利用這個(gè)內(nèi)核接口晰奖,第三方軟件就可以監(jiān)控文件系統(tǒng)下文件的各種變化情況谈撒,而inotify-tools就是這樣一個(gè)第三方軟件。

在上面章節(jié)中匾南,我們講到啃匿,rsync可以實(shí)現(xiàn)觸發(fā)式的文件同步。它是通過(guò)crontab守護(hù)進(jìn)程方式觸發(fā)蛆楞,同步的數(shù)據(jù)和實(shí)際數(shù)據(jù)會(huì)有差異溯乒,而inotify可以監(jiān)控文件系統(tǒng)的各種變化,當(dāng)文件有任何變化時(shí)豹爹,就觸發(fā)rsync同步裆悄,這就剛好解決了數(shù)據(jù)同步實(shí)時(shí)性的問(wèn)題。


#2.inotify相關(guān)參數(shù)詳解

inotify定義了三個(gè)接口參數(shù)臂聋,可以用來(lái)限制inotify消耗kernel

memory的大小光稼。由于這些參數(shù)都是內(nèi)存參數(shù),因此孩等,可以根據(jù)應(yīng)用需求實(shí)時(shí)的調(diào)節(jié)其大小艾君。下面分別做簡(jiǎn)單介紹:

/proc/sys/fs/inotify/max_queued_evnets

表示請(qǐng)求events數(shù)的最大值,超出這個(gè)值的事件將被丟棄肄方。該值默認(rèn)為16384冰垄。

注意:max_queued_events是inotify管理的隊(duì)列的最大長(zhǎng)度,文件系統(tǒng)變化越頻繁权她,這個(gè)值就應(yīng)該越大虹茶。

如果你在日志中看到Event Queue

Overflow,說(shuō)明max_queued_events太小需要調(diào)整參數(shù)后再次使用隅要。

/proc/sys/fs/inotify/max_user_instances

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

/proc/sys/fs/inotify/max_user_watches

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

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

echo30000000>/proc/sys/fs/inotify/max_user_watches

#安裝inotify暂衡,“yum install inotify-tools”后就可以查看

#3.inotify監(jiān)控的文件事件類(lèi)型

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

IN_ACCESS:文件被訪(fǎng)問(wèn)崖瞭。

IN_MODIFY:文件被write狂巢。

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

IN_CLOSE_WRITE:可寫(xiě)文件被close藻雌。

IN_CLOSE_NOWRITE:不可寫(xiě)文件被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:自刪除,即一個(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)。

注意:上面所說(shuō)的文件也包括目錄灭贷。


#4.inotify-tools是什么

inotify僅僅是一個(gè)API温学,需要通過(guò)開(kāi)發(fā)應(yīng)用程序進(jìn)行調(diào)用。inotify-tools就是這樣的一個(gè)inotify軟件甚疟,它是一套組件,包括一個(gè)C庫(kù)和幾個(gè)命令行工具仗岖。這些命令行工具可用于通過(guò)命令行或腳本對(duì)某些文件系統(tǒng)的事件進(jìn)行監(jiān)控。

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

notify不需要對(duì)被監(jiān)視的目標(biāo)打開(kāi)文件描述符檩电,而且如果被監(jiān)視目標(biāo)在可移動(dòng)介質(zhì)上,那么在umount該介質(zhì)上的文件系統(tǒng)后府树,被監(jiān)視目標(biāo)對(duì)應(yīng)的watch將被自動(dòng)刪除俐末,并且會(huì)產(chǎn)生一個(gè)umount事件。

inotify既可以監(jiān)視文件奄侠,又可以監(jiān)視目錄卓箫。

4) [endif]inotify使用系統(tǒng)調(diào)用而非SIGIO信號(hào)來(lái)通知文件系統(tǒng)事件。

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

#5.inotify-tools與rsync集成

inotify-tools與rsync的集成主要是通過(guò)inotifywait命令與rsync命令集成來(lái)實(shí)現(xiàn)的闷盔,并且該集成主要是體現(xiàn)的rsync客戶(hù)端,而rsync服務(wù)器端正需要按照正常的配置進(jìn)行即可旅急。

注意:該集成的主要目的是把rsync客戶(hù)端需要備份的文件實(shí)時(shí)推送到rsync服務(wù)器上逢勾。


5.3.實(shí)驗(yàn)拓?fù)?/h2>

???????? 在文章第一至第三章中,如果要實(shí)現(xiàn)rsync同步坠非,需要添加定時(shí)任務(wù)才可以完成敏沉,每次還要rsync對(duì)比一下,這樣的效率低下且實(shí)時(shí)性差炎码,有沒(méi)有更好的方法呢盟迟,當(dāng)然有!可以使用與inotify結(jié)合使用潦闲。實(shí)驗(yàn)的拓?fù)淙缦拢?/p>

#3.inotify監(jiān)控的文件事件類(lèi)型

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

IN_ACCESS:文件被訪(fǎng)問(wèn)。

IN_MODIFY:文件被write歉闰。

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

IN_CLOSE_WRITE:可寫(xiě)文件被close凹炸。

IN_CLOSE_NOWRITE:不可寫(xiě)文件被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:自刪除,即一個(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)搂漠。

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


#4.inotify-tools是什么

inotify僅僅是一個(gè)API某弦,需要通過(guò)開(kāi)發(fā)應(yīng)用程序進(jìn)行調(diào)用桐汤。inotify-tools就是這樣的一個(gè)inotify軟件而克,它是一套組件,包括一個(gè)C庫(kù)和幾個(gè)命令行工具。這些命令行工具可用于通過(guò)命令行或腳本對(duì)某些文件系統(tǒng)的事件進(jìn)行監(jiān)控怔毛。

[if !supportLists]1) [endif]inotify是為替代dnotify而設(shè)計(jì)的员萍,它克服了dnotify的缺陷,提供了更好用的拣度,更簡(jiǎn)潔而強(qiáng)大的文件變化通知機(jī)制碎绎。

[if !supportLists]2) [endif]inotify不需要對(duì)被監(jiān)視的目標(biāo)打開(kāi)文件描述符,而且如果被監(jiān)視目標(biāo)在可移動(dòng)介質(zhì)上抗果,那么在umount該介質(zhì)上的文件系統(tǒng)后筋帖,被監(jiān)視目標(biāo)對(duì)應(yīng)的watch將被自動(dòng)刪除,并且會(huì)產(chǎn)生一個(gè)umount事件冤馏。

[if !supportLists]3) [endif]inotify既可以監(jiān)視文件日麸,又可以監(jiān)視目錄。

[if !supportLists]4) [endif]inotify使用系統(tǒng)調(diào)用而非SIGIO信號(hào)來(lái)通知文件系統(tǒng)事件逮光。

[if !supportLists]5) [endif]inotify使用文件描述符作為接口代箭,因而可以使用通常的文件I/O操作select和poll來(lái)監(jiān)視文件系統(tǒng)的變化。

#5.inotify-tools與rsync集成

inotify-tools與rsync的集成主要是通過(guò)inotifywait命令與rsync命令集成來(lái)實(shí)現(xiàn)的涕刚,并且該集成主要是體現(xiàn)的rsync客戶(hù)端嗡综,而rsync服務(wù)器端正需要按照正常的配置進(jìn)行即可。

注意:該集成的主要目的是把rsync客戶(hù)端需要備份的文件實(shí)時(shí)推送到rsync服務(wù)器上杜漠。


5.3.實(shí)驗(yàn)拓?fù)?/p>

???????? 在文章第一至第三章中极景,如果要實(shí)現(xiàn)rsync同步,需要添加定時(shí)任務(wù)才可以完成碑幅,每次還要rsync對(duì)比一下,這樣的效率低下且實(shí)時(shí)性差塞绿,有沒(méi)有更好的方法呢沟涨,當(dāng)然有!可以使用與inotify結(jié)合使用异吻。實(shí)驗(yàn)的拓?fù)淙缦拢?/p>

從上面拓?fù)渲拦埃?dāng)要監(jiān)控的目錄發(fā)生變化的時(shí)候,就會(huì)觸發(fā)innotify調(diào)用rsync同步诀浪。

5.4.inotify安裝及配置(rsync客戶(hù)端上操作)

#1.inotify安裝

yum install -y inotify-tools

#查看安裝目錄棋返,從目錄看出這個(gè)工具很小,就2個(gè)命令其它的都沒(méi)用雷猪!

[root@web inotify]# rpm -ql

inotify-tools

/usr/bin/inotifywait

/usr/bin/inotifywatch

/usr/lib64/libinotifytools.so.0

/usr/lib64/libinotifytools.so.0.4.1

/usr/share/doc/inotify-tools-3.14

/usr/share/doc/inotify-tools-3.14/AUTHORS

/usr/share/doc/inotify-tools-3.14/COPYING

/usr/share/doc/inotify-tools-3.14/ChangeLog

/usr/share/doc/inotify-tools-3.14/NEWS

/usr/share/doc/inotify-tools-3.14/README

/usr/share/man/man1/inotifywait.1.gz

/usr/share/man/man1/inotifywatch.1.gz

注意:inotify-tools主要是通過(guò)inotifywait和inotifywatch睛竣,這兩個(gè)命令進(jìn)行工作。特別是inotifywait命令求摇,是我們生產(chǎn)環(huán)境中使用最多的命令射沟。

inotifywait和inotifywatch命令及測(cè)試具體用法請(qǐng)看文檔最后的“附錄二”


#2.設(shè)置同步腳本

???????? inotify是用來(lái)監(jiān)視文件系統(tǒng)事件的機(jī)制殊者,在Linux 2.6.13內(nèi)核中引入。該機(jī)制可以用來(lái)監(jiān)視文件和目錄验夯,當(dāng)文件或目錄發(fā)生變化時(shí)猖吴,內(nèi)核會(huì)將文件或目錄的變化發(fā)送給inotify文件描述符,在應(yīng)用層只需調(diào)用read()就可以讀取這些事件挥转,非常的方便海蔽。也可以用使用select(),poll(),epoll()以及由信號(hào)驅(qū)動(dòng)的I/O來(lái)監(jiān)控inotify文件描述符钱烟,這里不做詳解五辽,需要了解的可以搜索相關(guān)文章耘纱。

我們現(xiàn)在需要編寫(xiě)一個(gè)腳本卡骂,主要是用inotifywai監(jiān)控指定文件或目錄吴汪,當(dāng)文件的變化時(shí)產(chǎn)生相應(yīng)的事件糊探,我們?cè)儆胷ead()去讀到需要的事件缔刹,然后調(diào)用rsync命令實(shí)時(shí)同步愉粤,這樣就做到了實(shí)時(shí)同步的目的暇务,命令如下:

mkdir /disk1/sh

cd /disk1/sh

cat>>inotify.sh<<EOF

#!/bin/bash

# 需要同步的源路徑

src=/disk1/tools/

#rsync服務(wù)端模塊名

des=web76_tools

#

rsync驗(yàn)證的密碼文件

rsync_passwd_file=/etc/rsync.password

# 目標(biāo)服務(wù)器泼掠,我這里只有一臺(tái)所以只用IP1

ip1=192.168.3.75

#ip2=192.168.3.74

#

rsync服務(wù)端定義的驗(yàn)證用戶(hù)名

user=test

# 此方法中,由于rsync同步的特性垦细,這里必須要先cd到源目錄择镇,inotify再監(jiān)聽(tīng)./

#才能rsync同步后目錄結(jié)構(gòu)一致,有興趣的同學(xué)可以進(jìn)行各種嘗試觀看其效果

cd \${src}

# 把監(jiān)控到有發(fā)生更改的"文件路徑列表"循環(huán)

# inotifywait命令產(chǎn)生3個(gè)返回值括改,這3個(gè)返回值會(huì)做為參數(shù)傳給read

/usr/bin/inotifywait-mrq --format? '%Xe %w%f' -emodify,create,delete,attrib,close_write,move ./ | while read file

do

#把inotify輸出切割 把事件類(lèi)型部分賦值給INO_EVENT

INO_EVENT=\$(echo \$file | awk '{print \$1}')

#把inotify輸出切割 把文件路徑部分賦值給INO_FILE

INO_FILE=\$(echo \$file | awk '{print \$2}')

echo "-------------------------------\$(date)------------------------------------"

echo \$file

#增加腻豌、修改、寫(xiě)入完成嘱能、移動(dòng)進(jìn)事件

#增吝梅、改放在同一個(gè)判斷,因?yàn)樗麄兌伎隙ㄊ轻槍?duì)文件的操作惹骂,

#即使是新建目錄苏携,要同步的也只是一個(gè)空目錄,不會(huì)影響速度对粪。

# 判斷事件類(lèi)型

if [[ \$INO_EVENT =~ 'CREATE' ]] || [[ \$INO_EVENT =~ 'MODIFY' ]] || [[ \$INO_EVENT=~ 'CLOSE_WRITE' ]] || [[ \$INO_EVENT =~ 'MOVED_TO' ]]

then

echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'

# INO_FILE變量代表路徑哦? -c校驗(yàn)文件內(nèi)容

rsync -avzcR --password-file=\${rsync_passwd_file} \$(dirname\${INO_FILE}) \${user}@\${ip1}::\${des}

#rsync -avzcR --password-file=\${rsync_passwd_file}\$(dirname \${INO_FILE}) \${user}@\${ip1}::\${des} &&

#rsync -avzcR --password-file=\${rsync_passwd_file}\$(dirname \${INO_FILE}) \${user}@\${ip2}::\${des}

#仔細(xì)看 上面的rsync同步命令 源是用了\$(dirname

\${INO_FILE})變量 即每次只針對(duì)性的同步

#發(fā)生改變的文件的目錄(只同步目標(biāo)文件的方法在生產(chǎn)環(huán)境的某些極端環(huán)境下會(huì)漏文件 現(xiàn)在

#可以在不漏文件下也有不錯(cuò)的速度 做到平衡) 然后用-R參數(shù)把源的目錄結(jié)構(gòu)遞歸到目標(biāo)后面

#保證目錄結(jié)構(gòu)一致性

fi

#刪除右冻、移動(dòng)出事件

?????? ?if[[ \$INO_EVENT =~ 'DELETE' ]] || [[ \$INO_EVENT =~ 'MOVED_FROM' ]]

??????? then

echo 'DELETE or MOVED_FROM'

rsync -avzR --delete--password-file=\${rsync_passwd_file} \$(dirname \${INO_FILE}) \${user}@\${ip1}::\${des}

#rsync-avzR --delete --password-file=\${rsync_passwd_file} \$(dirname \${INO_FILE}) \${user}@\${ip1}::\${des}&&

#rsync-avzR --delete --password-file=\${rsync_passwd_file} \$(dirname \${INO_FILE}) \${user}@\${ip2}::\${des}

#看rsync命令 如果直接同步已刪除的路徑\${INO_FILE}會(huì)報(bào)no

such or directory錯(cuò)誤 所以這里同步的源

#是被刪文件或目錄的上一級(jí)路徑,并加上--delete來(lái)刪除目標(biāo)上有而源中沒(méi)有的文件著拭,這里不能做到指定

#文件刪除纱扭,如果刪除的路徑越靠近根,則同步的目錄月多儡遮,同步刪除的操作就越花時(shí)間乳蛾。

#這里有更好方法的同學(xué),歡迎交流。

?????? ?fi

??????? #修改屬性事件 指 touch chgrp chmod chown等操作

?????? ?if[[ \$INO_EVENT =~ 'ATTRIB' ]]

??????? then

??????????????? echo 'ATTRIB'

#如果修改屬性的是目錄 則不同步屡久,因?yàn)橥侥夸洉?huì)發(fā)生遞歸掃描忆首,等此目錄下的文件發(fā)生同步時(shí),rsync會(huì)順帶更新此目錄被环。

??????????????? if [ ! -d "\$INO_FILE"]

??????????????? then

rsync -avzcR --password-file=\${rsync_passwd_file} \$(dirname\${INO_FILE}) \${user}@\${ip1}::\${des}

#rsync -avzcR --password-file=\${rsync_passwd_file}\$(dirname \${INO_FILE}) \${user}@\${ip1}::\${des} &&

#rsync -avzcR --password-file=\${rsync_passwd_file}\$(dirname \${INO_FILE}) \${user}@\${ip2}::\${des}

??????????????? fi

??????? fi

done

EOF

網(wǎng)上很多的寫(xiě)法是全量同步的糙及,所以造成同步很慢。代碼如下:

#!/bin/bash

/usr/bin/inotifywait -mrq--format '%w%f'-e create,close_write,delete /backup |while read file

#把發(fā)生更改的文件列表都接收到file然后循環(huán)筛欢,但有什么鬼用呢浸锨?

#下面的命令都沒(méi)有引用這個(gè)$file下面做的是全量rsync

do

??? cd /disk1/tools && rsync -az--delete /disk1/tools rsync_backup@192.168.3.75::web76_tools --password-file=/etc/rsync.password

done

注意看上面的代碼中rsync 每次都是全量的同步(這就坑爹了),而且 file列表是循環(huán)形式觸發(fā)rsync 版姑,等于有10個(gè)文件發(fā)生更改柱搜,就觸發(fā)10次rsync全量同步(簡(jiǎn)直就是噩夢(mèng)),那還不如直接寫(xiě)個(gè)死循環(huán)的rsync全量同步得了剥险。

有很多人會(huì)說(shuō) 日志輸出那里明明只有差異文件的同步記錄聪蘸。其實(shí)這是rsync的功能,他本來(lái)就只會(huì)輸出有差異需要同步的文件信息表制。不信你直接拿這句rsync來(lái)跑試試健爬。

這種在需要同步的源目錄文件量很大的情況下,簡(jiǎn)直是不堪重負(fù)么介。不僅耗CPU還耗時(shí)娜遵,根本不可以做到實(shí)時(shí)同步。


5.5.測(cè)試

???????? 在rsync客戶(hù)端服務(wù)器打開(kāi)兩個(gè)ssh連接壤短,第1個(gè)ssh連接上運(yùn)行上面的腳本

#為了看到效果沒(méi)有用加“&”變成后臺(tái)運(yùn)行

/disk1/sh/inotify.sh

???????? 在第2個(gè)ssh連接中嘗試建立或自己文件

cd /disk1/tools/

echo '76 inotify

test'>inotify.txt

mkdir inotify

???????? 切換到第1個(gè)ssh連接查看結(jié)果如下:

[root@web ~]#/disk1/sh/inotify.sh

-------------------------------2017年 06月 29日星期四 14:02:59 CST---------------------------------

CREATE ./inotify.txt

CREATE or MODIFY or CLOSE_WRITE or MOVED_TO

sending incremental file list

./

inotify.txt

inotify/


sent 321 bytes? received 35 bytes? 33.90 bytes/sec

total size is 126? speedup is 0.35

-------------------------------2017年 06月 29日星期四 14:03:09 CST---------------------------------

MODIFY ./inotify.txt

CREATE or MODIFY or CLOSE_WRITE or MOVED_TO

sending incremental file list


sent 259 bytes? received 10 bytes? 538.00 bytes/sec

total size is 126? speedup is 0.47

-------------------------------2017年 06月 29日星期四 14:03:09 CST---------------------------------

CLOSE_WRITEXCLOSE ./inotify.txt

CREATE or MODIFY or CLOSE_WRITE or MOVED_TO

sending incremental file list


sent 259 bytes? received 10 bytes? 538.00 bytes/sec

total size is 126? speedup is 0.47

-------------------------------2017年 06月 29日星期四 14:03:09 CST---------------------------------

CREATEXISDIR ./inotify

CREATE or MODIFY or CLOSE_WRITE

or MOVED_TO

sending incremental file list


sent 259 bytes? received 10 bytes? 538.00 bytes/sec

total size is 126? speedup is 0.47

???????? 再去rsync master端(即備份服務(wù)器)上查看目錄是否多inotify.txt文件和inotify目錄,同理再執(zhí)行刪除操作设拟,看一下變化。

rm -f inotify.txt

rm -rf inotify

#inotify后臺(tái)執(zhí)行命令久脯,一定要加nohup纳胧,只加“&”是不行的

cd /disk1/sh/

nohup ./inotify.sh >>

inotify.log &

ps -ef |grep inotify

#關(guān)閉當(dāng)前的ssh連接再輸入下面命令查看inotify進(jìn)程是否存在

ps -ef |grep inotify


#停止inotify

pkill inotify

pkill inotify

ps -ef |grep inotify


、rsync+sersync文件實(shí)時(shí)同步

6.1.Sersync介紹

Sersync項(xiàng)目利用inotify與rsync技術(shù)實(shí)現(xiàn)對(duì)服務(wù)器數(shù)據(jù)實(shí)時(shí)同步的解決方案帘撰,其中inotify用于監(jiān)控sersync所在服務(wù)器上文件系統(tǒng)的事件變化跑慕,rsync是目前廣泛使用的本地及異地?cái)?shù)據(jù)同步工具,其優(yōu)點(diǎn)是只對(duì)變化的目錄數(shù)據(jù)操作骡和,甚至是一個(gè)文件不同的部分進(jìn)行同步相赁,所有其優(yōu)勢(shì)大大超過(guò)使用掛載文件系統(tǒng)或scp等方式進(jìn)行鏡像同步相寇。

???????? 相比上面兩個(gè)項(xiàng)目慰于,Sersync項(xiàng)目的優(yōu)點(diǎn)是:

1.使用c++編寫(xiě),而且對(duì)linux系統(tǒng)文件系統(tǒng)產(chǎn)生的臨時(shí)文件和重復(fù)的文件操作進(jìn)行過(guò)濾(我稍后會(huì)提到)唤衫,所以在結(jié)合rsync同步的時(shí)候婆赠,節(jié)省了運(yùn)行時(shí)耗和網(wǎng)絡(luò)資源。因此更快。

2.相比較上面兩個(gè)項(xiàng)目休里,sersync配置起來(lái)很簡(jiǎn)單:在http://code.google.com/p/sersync/downloads/list 處下載源碼(分為32版本蛆挫,與64位版本),其中bin目錄下已經(jīng)有我編譯好的2進(jìn)制文件妙黍,配合bin目錄下的xml文件直接使用即可悴侵。

3. 使用多線(xiàn)程進(jìn)行同步,尤其在同步較大文件時(shí)拭嫁,能夠保證多個(gè)服務(wù)器實(shí)時(shí)保持同步狀態(tài)可免。

4.? sersync自帶出錯(cuò)處理機(jī)制,通過(guò)失敗隊(duì)列對(duì)出錯(cuò)的文件重新出錯(cuò)做粤,如果仍舊失敗浇借,則每10個(gè)小時(shí)對(duì)同步失敗的文件重新同步。

5.? sersync自帶crontab功能怕品,只需在xml配置文件中開(kāi)啟妇垢,即可按您的要求,隔一段時(shí)間整體同步一次肉康。

]6.? sersync自帶socket與http協(xié)議擴(kuò)展闯估,可以滿(mǎn)足有特殊需求的公司二次開(kāi)發(fā)。

基本構(gòu)架


6.2.rsync+sersync實(shí)驗(yàn)

???????? 實(shí)驗(yàn)圖和rsync+inotify實(shí)驗(yàn)拓?fù)湟粯佑蓿徊贿^(guò)是把inotify改為sersync而已睬愤。

所以得把inotify進(jìn)行停止掉。

#停止inotify(rsync客戶(hù)端上操作纹安,只有客戶(hù)端上才安裝inotify)

pkill inotify

pkill inotify

ps -ef |grep inotify

6.3.sersync安裝及配置(rsync客戶(hù)端上操作)

打開(kāi)官方鏈接:http://sersync.sourceforge.net尤辱,點(diǎn)“Downloads

https://code.google.com/archive/p/sersync/downloads,

另一個(gè)下載地址:http://download.csdn.net/detail/colin20111/8822175

#1.下載及安裝

cd ~

#上傳sersync2.5.4_64bit_binary_stable_final.tar.gz工具

mkdir /usr/local/sersync

tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/sersync

cd /usr/local/sersync/GNU-Linux-x86/

#查看目錄

#sersync也非常簡(jiǎn)單厢岂,不需要編譯安裝光督。

#目錄中只有一個(gè)配置文件confxml.xml和一個(gè)可執(zhí)行文件sersync2

[root@web GNU-Linux-x86]# ll

總用量 1772

-rwxr-xr-x 1 root root??? 2214 10月 26 2011 confxml.xml

-rwxr-xr-x 1 root root 1810128 10月 26 2011 sersync2

#移動(dòng)一下文件

mv * ../

rm -rf GNU-Linux-x86

#建立命令軟鏈接

ln -s

/usr/local/sersync/sersync2 /usr/sbin/sersync2

ll /usr/sbin/sersync2

cd ..

rm -rf GNU-Linux-x86


#2.配置sersync

cp confxml.xml confxml.xml.orig

vim confxml.xml

#修改黑色粗體部分就行了


#也可能用命令方式直接修改,如下

#變成true"/>

sed -i '/modify/s/false/true/'

confxml.xml

grep modify confxml.xml

#變成/disk1/tools">

#搜索“l(fā)ocalpath”,結(jié)果有多個(gè)塔粒,只修改第一個(gè)

sed -i '0,/localpath/s#/opt/tongbu#/disk1/tools#' confxml.xml

grep localpath confxml.xml

#變成192.168.3.75" name="web76_tools"/>

sed -i '/127.0.0.1/s/tongbu1/web76_tools/' confxml.xml

sed -i '/127.0.0.1/s/127.0.0.1/192.168.3.75/' confxml.xml

egrep '[ ]+<remote'

confxml.xml

# 變成true" users="test" passwordfile="/etc/rsync.password"/>

sed -i '/auth/s/false/true/'

confxml.xml

sed -i '/auth/s/root/test/' confxml.xml

sed -i '/auth/s/rsync.pas/rsync.password/' confxml.xml

grep auth? confxml.xml


6.4.啟動(dòng)sersync

#查看sersync幫助命令

[root@web sersync]# sersync2 -h

set the system param

execute:echo

50000000 > /proc/sys/fs/inotify/max_user_watches

execute:echo 327679

> /proc/sys/fs/inotify/max_queued_events

parse the command param

_______________________________________________________

參數(shù)-d:啟用守護(hù)進(jìn)程模式

參數(shù)-r:在監(jiān)控前结借,將監(jiān)控目錄與遠(yuǎn)程主機(jī)用rsync命令推送一遍

c參數(shù)-n: 指定開(kāi)啟守護(hù)線(xiàn)程的數(shù)量,默認(rèn)為10個(gè)

參數(shù)-o:指定配置文件卒茬,默認(rèn)使用confxml.xml文件

參數(shù)-m:單獨(dú)啟用其他模塊船老,使用 -m refreshCDN 開(kāi)啟刷新CDN模塊

參數(shù)-m:單獨(dú)啟用其他模塊,使用 -m socket 開(kāi)啟socket模塊

參數(shù)-m:單獨(dú)啟用其他模塊圃酵,使用 -m http 開(kāi)啟http模塊

不加-m參數(shù)柳畔,則默認(rèn)執(zhí)行同步程序

________________________________________________________________


#啟動(dòng)sersync

[root@web sersync]# cd ~

[root@web ~]# sersync2 -o

/usr/local/sersync/confxml.xml -n 12 -d

set the system param

execute:echo50000000 > /proc/sys/fs/inotify/max_user_watches

execute:echo 327679> /proc/sys/fs/inotify/max_queued_events

parse the command param

option: -o????? config xml name:?/usr/local/sersync/confxml.xml

option: -n????? thread num is:? 12

option: -d????? run as adaemon

parse xml config file

host ip : localhost????????? host port: 8008

daemon start,sersync run

behind the console

use rsync password-file :

user is???? test

passwordfile is????? /etc/rsync.password

config xml parse success

please set /etc/rsyncd.conf max

connections=0 Manually

sersync working thread 14? = 1(primary thread) + 1(fail retry thread) +12(daemon sub threads)

Max threads numbers is: 26 =

14(Thread pool nums) + 12(Sub threads)

please according your cpu 郭赐,use -n param

to adjust the cpu rate

run the sersync:

watch path is:/disk1/tools

#從上面啟動(dòng)中看到薪韩,sersync比inotify配置簡(jiǎn)單,按照XML模塊的提示進(jìn)行修改就行了

#只有有些英文基礎(chǔ)的都能看懂每個(gè)XML標(biāo)簽的大概意思。

[root@web ~]# ps -ef |grep sersync|grep -v 'grep'

root? 32552?1? 0 16:50 ??00:00:00 sersync2 -o/usr/local/sersync/confxml.xml -n 12 -d


6.5.測(cè)試

???????? 這個(gè)測(cè)試和inotify測(cè)試一樣俘陷,打開(kāi)rsync客戶(hù)端

cd /disk1/tools/

echo 'this is 76 sersync.txt'>sersync.txt

#查看rsync服務(wù)端(即backup服務(wù)器)是否有sersync.txt文件生成

[root@backup ~]# ll /disk1/backup/76/disk1_tools|grep 'sersync'

-rw-r--r-- 1 rsync rsync?? 23 6月? 29 17:01 sersync.txt

同理:對(duì)文件進(jìn)行刪除操作罗捎,再查看一下rsync服務(wù)端是否也刪除了,對(duì)目錄也進(jìn)行建立拉盾,刪除操作


附錄一桨菜、rsync配置文件rsyncd.conf常用參數(shù)說(shuō)明

?rsync服務(wù)器的配置文件為/etc/rsyncd.conf,其控制認(rèn)證捉偏、訪(fǎng)問(wèn)雷激、日志記錄等等。該文件是由一個(gè)或多個(gè)模塊結(jié)構(gòu)組成告私。一個(gè)模塊定義以方括弧中的模塊名開(kāi)始屎暇,直到下一個(gè)模塊定義開(kāi)始或者文件結(jié)束,模塊中包含格式為name

= value的參數(shù)定義驻粟。

???????? 每個(gè)模塊其實(shí)就對(duì)應(yīng)需要備份的一個(gè)目錄樹(shù)根悼,比方說(shuō)在我們的實(shí)例環(huán)境中,有三個(gè)目錄樹(shù)需要備份:/www/蜀撑、 /home/web_user1/和/home/web_user2/挤巡,那么就需要在配置文件中定義三個(gè)模塊,分別對(duì)應(yīng)三個(gè)目錄樹(shù)酷麦。配置文件是行為單位的矿卑,也就是每個(gè)新行都表示一個(gè)新的注釋、模塊定義或者參數(shù)賦值沃饶。以#開(kāi)始的行表示注釋?zhuān)?\"結(jié)束的行表示下面一行是該行的繼續(xù)母廷。參數(shù)賦值中等號(hào)后可能是一個(gè)大小寫(xiě)不敏感的字符串、一個(gè)以trure/false或者yes/no表示的布爾值糊肤。

參數(shù)說(shuō)明:


附錄二琴昆、inotify相關(guān)命令使用詳解

1.inotifywait使用詳解

inotify-tools命令中,我們使用最多的就是inotifywait命令馆揉。

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

#1.inotifywait命令詳解

有關(guān)inotifywait的使用方法舷暮,我們可以通過(guò)它的幫助信息查看。如下:

inotifywait

-h

通過(guò)上圖噩茄,我們可以看到inotifywait參數(shù)很多下面。下面我們就介紹下一些經(jīng)常使用的參數(shù):

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

-r表示遞歸查詢(xún)目錄巢墅。

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

--excludei 排除文件或目錄時(shí),不區(qū)分大小寫(xiě)

-t,–timeout超時(shí)時(shí)間

-e通過(guò)此參數(shù)可以指定要監(jiān)控的事件君纫⊙庇觯可監(jiān)聽(tīng)的事件,如下:

access:訪(fǎng)問(wèn)蓄髓,讀取文件叉庐。

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

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

move:移動(dòng)肢执,對(duì)文件進(jìn)行移動(dòng)操作枉阵。以及重命名,對(duì)文件進(jìn)行重命名预茄。

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

open:打開(kāi),對(duì)文件進(jìn)行打開(kāi)操作耻陕。

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

delete:刪除诗宣,文件被刪除膘怕。

--timefmt是指定時(shí)間的輸出格式,用于--format選項(xiàng)中的%T格式召庞。

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

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

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

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

%T使用由--timefmt定義的時(shí)間格式

%Xe事件以“X”分隔

#2.inotifywait命令實(shí)例

上面我們講解了inotifywait命令的參數(shù),下面我們來(lái)實(shí)際使用下inotifywait命令篮灼。

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

inotifywait -mrq --timefmt '%y/%m/%d/%H:%M'--format '%T %w %f %e' -e modify,delete,create,attrib,move,open,close,access /disk1/tools

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

現(xiàn)在我們打開(kāi)另一個(gè)ssh窗口對(duì)/disk1/toolsw目錄進(jìn)行操作穿稳,如下:

cd /disk1/tools/

echo "this is test inotify">t_inotify.txt

mkdir inotify

現(xiàn)在我們來(lái)切換到剛剛執(zhí)行inotifywait命令的窗口存皂,如下:

通過(guò)上圖,我們可以很容易的看到inotifywait已經(jīng)監(jiān)控到我們前面創(chuàng)建的文件以及目錄逢艘。

2.inotifywatch使用詳解

除了inotifywatit命令之外旦袋,inotify-tools還有一個(gè)命令inotifywatch。

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


#1.inotifywatch命令詳解

inotifywatch使用可以查看其幫助信息,如下:

inotifywatch -h

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

-h:輸出幫助信息央拖。

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

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

–-fromfile:從文件讀取需要監(jiān)視的文件或排除的文件抹凳,一個(gè)文件一行,排除的文件以@開(kāi)頭伦腐。

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

–-exclude:正則匹配需要排除的文件柏蘑,大小寫(xiě)敏感幸冻。

–-excludei:正則匹配需要排除的文件,忽略大小寫(xiě)咳焚。

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

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

-e:只監(jiān)聽(tīng)指定的事件革半。該事件與inotifywait監(jiān)聽(tīng)的事件類(lèi)型一樣趁啸。

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

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

#2.inotifywatch命令實(shí)例

上面我們講解了inotifywatch命令的參數(shù)不傅,下面我們來(lái)實(shí)際使用下inotifywatch命令。

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

inotifywatch -v -e

modify,delete,create,attrib,move,open,close,access -e modify -t 35 -r

/disk1/tools

現(xiàn)在我們?cè)诹硪粋€(gè)ssh窗口對(duì)/disk1/toolsw目錄進(jìn)行操作访娶,如下:

cd /disk1/tools/

rm -f t_inotify.txt

rm -rf mkdir inotify

現(xiàn)在我們來(lái)切換到剛剛執(zhí)行inotifywatch命令的窗口,靜等35秒會(huì)自動(dòng)結(jié)束觉阅,結(jié)果如下:

通過(guò)上圖崖疤,我們可以很容易的看到inotifywatch已經(jīng)監(jiān)控到我們前面刪除的文件和重命名的目錄文件事件數(shù)量。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末典勇,一起剝皮案震驚了整個(gè)濱河市劫哼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌割笙,老刑警劉巖权烧,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伤溉,居然都是意外死亡般码,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)乱顾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)板祝,“玉大人,你說(shuō)我怎么就攤上這事走净∪保” “怎么了孤里?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)橘洞。 經(jīng)常有香客問(wèn)我捌袜,道長(zhǎng),這世上最難降的妖魔是什么震檩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮蜓堕,結(jié)果婚禮上抛虏,老公的妹妹穿的比我還像新娘。我一直安慰自己套才,他們只是感情好迂猴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著背伴,像睡著了一般沸毁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上傻寂,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天息尺,我揣著相機(jī)與錄音,去河邊找鬼疾掰。 笑死搂誉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的静檬。 我是一名探鬼主播炭懊,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拂檩!你這毒婦竟也來(lái)了侮腹?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤稻励,失蹤者是張志新(化名)和其女友劉穎父阻,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體望抽,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡至非,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糠聪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荒椭。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖舰蟆,靈堂內(nèi)的尸體忽然破棺而出趣惠,到底是詐尸還是另有隱情狸棍,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布味悄,位于F島的核電站草戈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏侍瑟。R本人自食惡果不足惜唐片,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涨颜。 院中可真熱鬧费韭,春花似錦、人聲如沸庭瑰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)弹灭。三九已至督暂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間穷吮,已是汗流浹背逻翁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捡鱼,地道東北人卢未。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像堰汉,于是被迫代替她去往敵國(guó)和親辽社。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容