你的位置:首页 > 操作系统

[操作系统]inotify+rsync实现实时同步部署

1.1.架构规划

1.1.1架构规划准备

服务器系统角色IP
Centos6.7 x86_64NFS服务器端(NFS-server-inotify-tools)192.168.1.14
Centos6.7 x86_64rsync服务器端(rsync热备服务器)192.168.1.17

 

 

 

1.1.2架构图

 

2.1 部署前检查

2.1.1 检查rsync热备服务器daemon是否起来

1 [[email protected] data]# lsof -i:8732 COMMAND PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME3 rsync  3071 root  3u IPv4 18684   0t0 TCP *:rsync (LISTEN)4 rsync  3071 root  5u IPv6 18685   0t0 TCP *:rsync (LISTEN)5 [[email protected] data]# ps -ef|grep rsync|grep -v grep6 root   3071   1 0 Dec02 ?    00:00:00 rsync --daemon7 [[email protected] data]# 

2.1.2 NFS服务器相对于rsync服务器来说是客户端,所以要配置一个客户端密码

1 [[email protected] ~]# echo "zhurui" >>/etc/rsync.password2 [[email protected] ~]# cat /etc/rsync.password 3 zhurui4 [[email protected] ~]# chmod 600 /etc/rsync.password 5 [[email protected] ~]# ll /etc/rsync.password 6 -rw-------. 1 root root 7 Jan 31 00:49 /etc/rsync.password7 [[email protected] ~]# 

2.1.3 NFS客户端手动推/data/目录下数据到rsync热备服务器/backup目录下

 1 [[email protected] data]# showmount -e localhost ##检查共享目录 2 Export list for localhost: 3 /data 192.168.1.0/24 4 [[email protected] ~]# cd /data/ 5 [[email protected] data]# ll 6 total 12 7 -rw-r--r--. 1 nfsnobody nfsnobody  0 Jan 30 03:05 beautiful.txt 8 -rw-r--r--. 1 nfsnobody nfsnobody  9 Jan 30 04:33 f11.txt 9 -rw-r--r--. 1 root   root     0 Jan 30 04:41 fs.txt10 drwxr-xr-x. 2 nfsnobody nfsnobody 4096 Jan 30 03:05 huang11 -rw-r--r--. 1 nfsnobody nfsnobody  0 Jan 30 03:17 reew.txt12 -rw-r--r--. 1 root   root     0 Jan 30 02:51 test1.txt13 -rw-r--r--. 1 nfsnobody nfsnobody  0 Jan 30 04:41 wd.txt14 drwxr-xr-x. 2 nfsnobody nfsnobody 4096 Jan 30 02:57 zhurui15 -rw-r--r--. 1 nfsnobody nfsnobody  0 Jan 30 02:47 zhurui1.txt16 -rw-r--r--. 1 nfsnobody root     0 Jan 30 02:10 zhurui.txt17 [[email protected] /]# rsync -avz /data/ [email protected]::backup/ --password-file=/etc/rsync.password  ##推送数据命令18 sending incremental file list19 ./20 beautiful.txt21 f11.txt22 fs.txt23 reew.txt24 test1.txt25 wd.txt26 zhurui.txt27 zhurui1.txt28 huang/29 zhurui/30 31 sent 572 bytes received 171 bytes 114.31 bytes/sec32 total size is 9 speedup is 0.0133 [[email protected] /]# 

2.1.4  rsync服务器端检查/backup目录下数据

 

3.1 服务部署

3.1.1 NFS服务端安装inotify工具

inofity-tools下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

1)查看当前系统是否支持inotify

1 [[email protected] tools]# uname -r  ##内核版本,从kernel2.6.13开始支持2 2.6.32-573.el6.x86_64  3 [[email protected] tools]# ls -l /proc/sys/fs/inotify/ ##查看是否支持4 total 05 -rw-r--r-- 1 root root 0 Jan 31 01:34 max_queued_events6 -rw-r--r-- 1 root root 0 Jan 31 01:34 max_user_instances7 -rw-r--r-- 1 root root 0 Jan 31 01:34 max_user_watches8 ##显示当前三个文件表示支持

2)下载inotify源码包

1 [[email protected] tools]# ll2 total 3523 -rw-r--r--. 1 root root 358772 Mar 14 2010 inotify-tools-3.14.tar.gz

3)编译安装inotify

 

1 [[email protected] tools]# tar zxf inotify-tools-3.14.tar.gz 2 [[email protected] tools]# cd inotify-tools-3.143 [[email protected] inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.144 [[email protected] inotify-tools-3.14]# make&&make install
 1 [[email protected] inotify-tools-3.14]# ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools ##创建软链接 2 [[email protected] inotify-tools-3.14]# cd .. 3 [[email protected] local]# ll 4 total 44 5 drwxr-xr-x. 2 root root 4096 Sep 23 2011 bin 6 drwxr-xr-x. 2 root root 4096 Sep 23 2011 etc 7 drwxr-xr-x. 2 root root 4096 Sep 23 2011 games 8 drwxr-xr-x. 2 root root 4096 Sep 23 2011 include 9 lrwxrwxrwx. 1 root root  30 Jan 31 01:58 inotify-tools -> /usr/local/inotify-tools-3.14/10 drwxr-xr-x. 6 root root 4096 Jan 31 01:55 inotify-tools-3.1411 drwxr-xr-x. 2 root root 4096 Sep 23 2011 lib12 drwxr-xr-x. 2 root root 4096 Sep 23 2011 lib6413 drwxr-xr-x. 2 root root 4096 Sep 23 2011 libexec14 drwxr-xr-x. 2 root root 4096 Sep 23 2011 sbin15 drwxr-xr-x. 5 root root 4096 Nov 25 02:40 share16 drwxr-xr-x. 2 root root 4096 Sep 23 2011 src17 [[email protected] local]# cd inotify-tools18 [[email protected] inotify-tools]# ll19 total 16

提示编译成功后会生成4个目录,分别是:

 

1 [[email protected] /]# cd /usr/local/inotify-tools2 [[email protected] inotify-tools]# ll3 total 164 drwxr-xr-x. 2 root root 4096 Jan 31 01:55 bin  ##inotify执行命令(二进制)5 drwxr-xr-x. 3 root root 4096 Jan 31 01:55 include  ##inotify程序所需用的头文件6 drwxr-xr-x. 2 root root 4096 Jan 31 01:55 lib ##动态链接的库文件7 drwxr-xr-x. 4 root root 4096 Jan 31 01:55 share ##帮助文档

 

工具集合介绍:

一共安装了2个工具(命令),即inotifywait和inotifywatch

inotifywait:在被监控的文件或目录上等待特定文件系统事件(open、close、delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用。

inotifywatch:收集被监视的文件系统使用度统计数据,指定文件系统事件发生的次数统计。

4)inotify命令常用参数详解

 

 1 [[email protected] inotify-tools]# ./bin/inotifywait --help 2 inotifywait 3.14 3 Wait for a particular event on a file or set of files. 4 Usage: inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ] 5 Options: 6 -r|--recursive Watch directories recursively. ##递归查询目录 7 -q|--quiet   Print less (only print events)  ##打印很少的信息,仅仅打印监控相关的信息 8 -m|--monitor  Keep listening for events forever. Without 9             this option, inotifywait will exit after one10             event is received.  ##始终保持事件监听状态11 --excludei <pattern>12             Like --exclude but case insensitive.  ##排除文件或目录时,不区分大小写13 --timefmt <fmt> strftime-compatible format string for use with14             %T in --format string.  ##指定时间的输出格式

 


 

5)测试监控事件

开启两个窗口

1.测试create

 

 1 第一步: 2 [[email protected] inotify-tools]# /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create /data ##实行当前命令后,界面处于阻塞状态,只有在另外一个客户端测试时,才会显示监控状态 3 31/01/16 10:23 /data/ceshi.txt 4 31/01/16 10:24 /data/what 5 31/01/16 10:27 /data/a 6 31/01/16 10:27 /data/b 7 31/01/16 10:27 /data/c 8 31/01/16 10:27 /data/d 9 31/01/16 10:27 /data/e10 31/01/16 10:27 /data/f11 12 第二步:13 克隆一个NFS客户端切换到/data目录下,新建ceshi.txt、what文件,观察监控的变化14 [[email protected] data]# touch ceshi.txt15 [[email protected] data]# mkdir /who16 [[email protected] data]# touch what17 [[email protected] data]# 18 [[email protected] data]# touch {a..f}

 

2、测试delete

 

1 [[email protected] inotify-tools]# /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete /data  ##监控/data目录删除时间2 3 监控如下:4 5 31/01/16 10:31 /data/reew.txt6 31/01/16 10:31 /data/test1.txt7 8 [[email protected] data]# rm -f reew.txt test1.txt  ##删除这两个文件9 [[email protected] data]# 

 

3、同时测试create、delete

 1 第一步: 2 [[email protected] inotify-tools]# /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete,create /data 3 监控输出信息: 4 31/01/16 10:35 /data/hero.sh 5 31/01/16 10:35 /data/a 6 31/01/16 10:35 /data/f 7 31/01/16 10:36 /data/b 8 31/01/16 10:36 /data/c 9 31/01/16 10:36 /data/d10 31/01/16 10:36 /data/e11 第二步:12 [[email protected] data]# touch hero.sh13 [[email protected] data]# ll14 [[email protected] data]# rm -f [a..f]15 [[email protected] data]# rm -f {a..f}16 [[email protected] data]# 

一般工作中使用到:[[email protected] inotify-tools]# /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete,create,close_write /data

工作环境中通过脚本实时同步:

 

 1 #!/bin/bash 2 inotify=/usr/local/inotify-tools/bin/inotifywait 3 $inotify -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete,create,close_write /data 4  \ 5 |while read file 6 do 7  cd / && 8  rsync -az /data --delete [email protected]::backup \ 9  --password-file=/etc/rsync.password10 done

 

测试:

 

 1 脚本属于开启状态: 2 [[email protected] scripts]# sh -x inotify.sh  3 + inotify=/usr/local/inotify-tools/bin/inotifywait 4 + read file 5 + /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete,create,close_write /data 6 + cd / 7 + rsync -az /data --delete [email protected]::backup --password-file=/etc/rsync.password 8 + read file 9 + cd /10 + rsync -az /data --delete [email protected]::backup --password11 接着在NFS客户端/data目录下创建文件12 [[email protected] data]# touch {a..z}13 [[email protected] data]# echo i am best >a ##修改a中的内容,查看热备服务器是否同步14 15 rsync热备服务器端显示如下:16 [[email protected] //]# cd /backup/17 [[email protected] backup]# cd data/18 [[email protected] data]# ll19 total 020 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 a21 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 b22 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 c23 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 d24 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 e25 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 f26 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 g27 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 h28 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 i29 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 j30 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 k31 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 l32 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 m33 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 n34 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 o35 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 p36 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 q37 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 r38 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 s39 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 t40 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 u41 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 v42 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 w43 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 x44 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 y45 -rw-r--r--. 1 rsync rsync 0 Mar 4 2016 z46 [[email protected] data]# cat a47 i am best  ##显示已经实时同步过来48 [[email protected] data]# 

 

6)优化

1 [[email protected] scripts]# echo "50000000" >/proc/sys/fs/inotify/max_user_watches 2 [[email protected] scripts]# echo "50000000" >/proc/sys/fs/inotify/max_queued_events 

结论:经过测试,每秒200个文件并发,数据同步几乎无延迟(小于1秒)