實(shí)時(shí)復(fù)制實(shí)踐:
前提:backup rsync服務(wù)端部署好。
1)部署NFS客戶端
[root@nfs01 ~]# echo 'export RSYNC_PASSWORD=oldboy' >>/etc/bashrc
[root@nfs01 ~]# source /etc/bashrc
[root@nfs01 ~]# echo $RSYNC_PASSWORD
oldboy
測(cè)試推送
[root@nfs01 ~]# rsync -avz /data rsync_backup@172.16.1.41::backup/
sending incremental file list
sent 164 bytes received 25 bytes 126.00 bytes/sec
total size is 0 speedup is 0.00
2)查看inotify支持情況
[root@nfs01 ~]# uname -r
3.10.0-957.5.1.el7.x86_64
[root@nfs01 ~]# ls -l /proc/sys/fs/inotify/
總用量 0
-rw-r--r-- 1 root root 0 4月 19 09:45 max_queued_events
-rw-r--r-- 1 root root 0 4月 19 09:45 max_user_instances
-rw-r--r-- 1 root root 0 4月 19 09:45 max_user_watches
3)安裝inotify-tools
yum install inotify-tools -y
yum install epel-release -y
[root@nfs01 ~]# rpm -ql inotify-tools|head -2
/usr/bin/inotifywait
/usr/bin/inotifywatch
[root@nfs01 ~]# rpm -qa inotify-tools
inotify-tools-3.14-8.el7.x86_64
inotify機(jī)制簡(jiǎn)介:(了解即可)
Inotify是一種異步的件系統(tǒng)事件監(jiān)控機(jī)制, Linux內(nèi)核從2.6.13起,加入了Inotify支持,通過(guò)Inotify可以監(jiān)控文件系統(tǒng)中添加袁波、刪除,修改亏栈、移動(dòng)等各種事件,
利用這個(gè)內(nèi)核接口,第三方軟件就可以監(jiān)控文件系統(tǒng)下文件的各種變化情況,而inotify-tools正是實(shí)施這樣監(jiān)控的軟件豁状。
實(shí)際上inotify-tools是一個(gè)監(jiān)控指定目錄數(shù)據(jù)實(shí)時(shí)變化的軟件程序衩辟。
Inotify程序原理是一種事件驅(qū)動(dòng)機(jī)制,它為應(yīng)用程序監(jiān)控文件系統(tǒng)事件提供了實(shí)時(shí)響應(yīng)事件的機(jī)制,可以做到對(duì)事件處理的實(shí)時(shí)響應(yīng)粮彤。
inotify的實(shí)現(xiàn)有幾款軟件: inotify-tools, sersync.Irsyncd.
inotify優(yōu)點(diǎn):
inotify機(jī)制優(yōu)點(diǎn)監(jiān)控文件系統(tǒng)事件變化,通過(guò)復(fù)制工具實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)復(fù)制谬俄。支持多線程實(shí)時(shí)復(fù)制
inotify缺點(diǎn):
inotify機(jī)制缺點(diǎn)實(shí)測(cè)并發(fā)如果大于200個(gè)文件(10-100k) ,復(fù)制會(huì)有延遲汤功。
利用man proc方式可以獲取到以上inotify目錄以及下面三個(gè)文件的說(shuō)明信息,
根據(jù)說(shuō)明信息,我們可以得知三個(gè)文件作用的詳細(xì)說(shuō)明:通過(guò)man proc獲取內(nèi)核中inotify信息說(shuō)明:
/proc/sys/fs/inotify/目錄包含了三個(gè)文件max_queued_events, max_user_instances, and max_user_watches
可以用來(lái)限制通過(guò)inotify接口消耗內(nèi)核內(nèi)存的數(shù)量;
更詳細(xì)信息參見(jiàn)man手冊(cè)7級(jí)別inotify說(shuō)明上述三個(gè)文件的說(shuō)明如下:
max_user_watches:設(shè)置inotifywait或inotifywatch命令可以監(jiān)視的文件數(shù)量(單進(jìn)程)
max_user_instances: 設(shè)置每個(gè)用戶可以運(yùn)行的inotifywait或inotifywatch命令的進(jìn)程數(shù)
max_queued_events: 設(shè)置inotify實(shí)例事件(event)隊(duì)列可容納的事件數(shù)量
說(shuō)明:實(shí)例概念就是,多個(gè)相同服務(wù),啟動(dòng)運(yùn)行多個(gè)進(jìn)程
inotify工具命令介紹:
inotify-tools工具主要命令
在inotify-tools軟件部署完畢后,主要應(yīng)用兩個(gè)命令實(shí)現(xiàn)數(shù)據(jù)信息的監(jiān)控,
一個(gè)利用inotifywait命令實(shí)現(xiàn)對(duì)數(shù)據(jù)變化事件的監(jiān)控,
另一個(gè)利用inotifywatch命令實(shí)現(xiàn)對(duì)數(shù)據(jù)事件信息統(tǒng)計(jì)物邑。
這個(gè)兩個(gè)命令是能夠應(yīng)用好 inotify-tools軟件的關(guān)鍵,下面對(duì)這兩個(gè)軟件說(shuō)明如下:
inotifywait:在被監(jiān)控的目錄等待特定文件系統(tǒng)事件(open, close,delete等)發(fā)生,
執(zhí)行后處于阻塞狀態(tài),適合在Shell腳本中使用,此命令是重點(diǎn)。
inotifywatch:收集被監(jiān)控的文件系統(tǒng)使用的統(tǒng)計(jì)數(shù)據(jù),指文件系統(tǒng)事件發(fā)生的次數(shù)統(tǒng)計(jì)滔金。
4)命令參數(shù)和事件知識(shí)
-m|--monitor | 始終保持事件監(jiān)聽(tīng)狀態(tài)(重要參數(shù)) |
-r | 遞歸監(jiān)控目錄數(shù)據(jù)信息變化(重要參數(shù)) |
-q|--quiet | 輸出信息少(只打印事件信息) |
--excludei<pattern> | 排除文件或目錄時(shí),不區(qū)分大小寫 |
-e | 指定監(jiān)聽(tīng)指定的事件,如果省略,表示所有事件都進(jìn)行監(jiān)聽(tīng)色解。(重要參數(shù)) |
access | 文件或目錄內(nèi)容被讀取 |
modify | 文件或目錄內(nèi)容被寫入 |
attrib | 文件或目錄屬性改變 |
close_write | 文件或目錄關(guān)閉,在寫入模式打開(kāi)之后關(guān)閉的。(重要參數(shù)) |
close_nowrite | 文件或目錄關(guān)閉,在只讀模式打開(kāi)之后關(guān)閉的 |
close | 文件或目錄關(guān)閉,不管讀或是寫模式 |
open | 文件或目錄被打開(kāi) |
moved_to | 文件或目錄被移動(dòng)到監(jiān)控的目錄中 |
moved_from | 文件或目錄被移動(dòng)從監(jiān)控的目錄中 |
move | 文件或目錄不管移動(dòng)到或是移動(dòng)出監(jiān)控目錄都觸發(fā)事件 |
create | 文件或目錄創(chuàng)建在監(jiān)控的目錄中(重要參數(shù)) |
delete | 文件或目錄被刪除在監(jiān)控的目錄中(重要參數(shù)) |
delete_self | 文件或目錄被刪除 |
unmount | 文件系統(tǒng)包含的文件或目錄不能卸載 |
5)測(cè)試實(shí)踐:刪除 創(chuàng)建 修改
[root@nfs01 ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,delete /data
6)思考:實(shí)現(xiàn)數(shù)據(jù)復(fù)制
[root@nfs01 ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,delete /data
7)編寫腳本:
mkdir /server/scripts -p
rsync -az --delete /data/ rsync_backup@172.16.1.41::backup
[root@nfs01 /server/scripts]# /bin/sh /server/scripts/monitor1.sh &
[2] 9199
[root@nfs01 /server/scripts]# tail -2 /etc/rc.local
########################
/bin/sh /server/scripts/monitor1.sh &
方法1:
[root@nfs01 /server/scripts]# cat monitor1.sh
#!/bin/sh
cmd="/usr/bin/inotifywait"
$cmd -mrq --format '%w%f' -e close_write,delete /data|\
while read line
do
cd /data&&\
rsync -az --delete ./ rsync_backup@172.16.1.41::backup
done
[root@nfs01 /server/scripts]# sh -x monitor.sh #-------監(jiān)控餐茵,在nfs創(chuàng)建科阎,backup下看,監(jiān)控顯示忿族。
方法2:【不常用】
[root@nfs01 /server/scripts]# cat monitor.sh
#!/bin/sh
cmd="/usr/bin/inotifywait"
$cmd -mrq --format '%w%f' -e close_write,delete /data|\
while read line
do
#刪除事件發(fā)生
[ ! -e "$line" ] && cd /data &&\
rsync -az --delete ./ rsync_backup@172.16.1.41::backup && continue
#處理增改事件
rsync -az --delete $line rsync_backup@172.16.1.41::backup
done
sersync實(shí)踐:
1)客戶端推送成功
rsync -az /data rsync_backup@172.16.1.41::backup
2)部署sersync服務(wù)(NFS)
wget https://github.com/wsgzao/sersync/blob/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
sersync_oldboy_64bit_20160928.tar.gz
[root@nfs01 /server/tools]# mkdir /application -p
[root@nfs01 /server/tools]# mv application/sersync /application/
[root@nfs01 /server/tools]# tree /application/
/application/
下載安裝包:直接拽進(jìn)來(lái)
[root@nfs01 /server/tools]# ls
sersync_oldboy_64bit_實(shí)時(shí)復(fù)制軟件下載到虛擬機(jī).tar
[root@nfs01 /server/tools]# ll
total 712
-rw-r--r-- 1 root root 728419 Apr 19 11:50 sersync_oldboy_64bit_實(shí)時(shí)復(fù)制軟件下載到虛擬機(jī).tar
[root@nfs01 /server/tools]# tar -xf sersync_oldboy_64bit_實(shí)時(shí)復(fù)制軟件下載到虛擬機(jī).tar
[root@nfs01 /server/tools]# ls
application sersync_oldboy_64bit_實(shí)時(shí)復(fù)制軟件下載到虛擬機(jī).tar
[root@nfs01 /server/tools]# cd application/
[root@nfs01 /server/tools/application]# ls
sersync
[root@nfs01 /server/tools/application]# cd sersync/
[root@nfs01 /server/tools/application/sersync]# ls
bin conf logs readme.txt
[root@nfs01 /server/tools/application/sersync]# cd conf/
[root@nfs01 /server/tools/application/sersync/conf]# ls
confxml.xml confxml.xml.ori
[root@nfs01 /server/tools/application/sersync/conf]# ll
total 8
-rw-r--r-- 1 root root 2266 Sep 28 2016 confxml.xml
-rw-r--r-- 1 root root 2214 Sep 28 2016 confxml.xml.ori
[root@nfs01 /server/tools/application/sersync/conf]# vim confxml.xml
3)sersync配置文件:完成兩項(xiàng)任務(wù)
a.完成監(jiān)控配置:
inotifywait -mrq --format '%w%f' -e createFolder,close_write,delete,moveFrom,moveTo /data
b.完整命令拼接:
rsync -az /data --timeout=100 rsync_backup@172.16.1.41::backup
4)啟動(dòng)服務(wù)
[root@nfs01 /application/sersync/conf]# ../bin/sersync -h
[root@nfs01 /application/sersync/conf]# /application/sersync/bin/sersync -d -n 10 -o /application/sersync/conf/confxml.xml
最終
/application/sersync/bin/sersync -d
pkill sersync
二進(jìn)制程序锣笨,不是yum安裝的,所以不能systemctl start sersync
[root@nfs01 /data]# tail -1 /etc/rc.local
/application/sersync/bin/sersync -d
[root@nfs01 /data]# cat /etc/rc.d/init.d/sersync
#!/bin/bash
# chkconfig: 2345 21 81
# description: rsync service start and stop scripts
# Author: oldboy
# Organization: www.oldboyedu.com
start(){
/application/sersync/bin/sersync -d -o /application/sersync/conf/confxml.xml &>/dev/null
}
stop(){
killall sersync 2>/dev/null
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 2
start
;;
*)
echo $"Usage:$0 {start|stop|restart}"
exit 1
esac
chmod +x /etc/rc.d/init.d/sersync
[root@nfs01 /data]# cat /usr/lib/systemd/system/sersync.service
[Unit]
Description=sersyncd service
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/sersync start
ExecReload=/etc/rc.d/init.d/sersync restart
ExecStop=/etc/rc.d/init.d/sersync stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod +x /usr/lib/systemd/system/sersync.service
[root@nfs01 /data]# systemctl enable sersync.service
Created symlink from /etc/systemd/system/multi-user.target.wants/sersync.service to /usr/lib/systemd/system/sersync.service.
[root@nfs01 /data]# systemctl status sersync.service
● sersync.service - sersyncd service
Loaded: loaded (/usr/lib/systemd/system/sersync.service; enabled; vendor preset: disabled)
Active: inactive (dead)
[root@nfs01 /data]# systemctl stop sersync
[root@nfs01 /data]# ps -ef|grep sersync|grep -v grep