rsync+inotify实时数据同步单目录实战

 

inotify是一个强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起加入了inotify支持,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施监控的软件。

 

inotify配置是建立在rsync服务基础上的配置过程

操作系统

主机名 网卡eth0 默认网关 用途
root@58server1 192.168.1.111 192.168.1.1 Rsync服务端
root@58client 192.168.1.121 192.168.1.1 Rsync 节点

子网掩码均为255.255.255.0

 

具体需求:

要求在58server1上以rsync守护进程的方式部署rsync服务,使得root@58client的 rsync节点客户端主机,可以把本地数据通过rsync的方式备份到数据备份服务器58server1上,本例的客户端仅以58client为例

 

一、在配置inotify前己经把root@58server1 Rsync服务端的rsync服务部置好

现在在58client服务器中安装部置inotify监控服务

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# cat /etc/rsyncd.conf
 
#Rsync server
 
#created by oldboy 15:01 2009-6-5
 
##rsyncd.conf start##
 
root
 
root
 
no
 
2000
 
600
 
pid
 
lock
 
log
 
errors
 
false
 
false
 
24
 
32
 
rsync_backup
 
password
 
#####################################
 
]
 
13
 
dingjian

配置rsync服务略

 

 

二、开始安装inotify

在安装inotify-tools前请先确认你的linux内核是否达到了2.6.13,并且在编译时开启CONFIG_INOTIFY选项,

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

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# uname -r
 
308.el5
 
# ls -l /proc/sys/fs/inotify/
 
0
 
max_queued_events
 
max_user_instances
 
max_user_watches
 
#显示这三个文件则证明支持

 

 

2)下载inotify源码包

 
1
2
3
4
5
# mkdir /home/Mr.Xing/tools/ -p
 
# cd /home/Mr.Xing/tools/
 
# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

 

 

3)编译安装inotfiy

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# ls
 
3.14.tar.gz
 
# tar zxf inotify-tools-3.14.tar.gz
 
# cd inotify-tools-3.14
 
# ./configure --prefix=/usr/local/inotify-tools-3.14
 
# make
 
# make install
 
# cd ..
 
# ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotfiy
 
# ls -l /usr/local/|grep inotify
 
/
 
3.14

参数:

--prefix=PATH   指定编译安装的路径

提示:更多的编译参数可以使用./configure –h 查看,编译成功后会生成4个目录,

小软件一般规范安装到同一个目录,一般为/usr/local中

建立一个软链接

 

 

进入安装inotify的目录

 
1
2
3
4
5
6
7
8
9
10
11
# ls -l /usr/local/inotify-tools-3.14/
 
16
 
#inotfiy执行命令(二进制)
 
#inotfiy程序所需用的头文件
 
#动态链接的库文件
 
#帮助文件

查看是否编译成功,

使用echo $?  返回0表示成功

 

只关注下面两个文件

bin

|-- inotifywait

`-- inotifywatch

rsync+inotify实时数据同步单目录实战

 

./bin/inotifywait –help

 

 

 

 

4) 编写inotify实时监控脚本

 

事件相关参数大小:

默认:

[root@58client inotify]# cat /proc/sys/fs/inotify/max_user_watches

8192

[root@58client inotify]# cat /proc/sys/fs/inotify/max_queued_events

16384

[root@58client inotify]# cat /proc/sys/fs/inotify/max_user_instances

128

并发大时可以修改增大这些参数

 

开始编写inotify脚本

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# mkdir /server/scripts/ -p
 
# cd /server/scripts/
 
# vi inotify.sh
 
# cat inotify.sh
 
#!/bin/bash
 
#para
 
192.168.1.111
 
dingjian
 
dingjian
 
rsync_backup
 
password
 
/
 
 
 
#judge
 
\
 
\
 
\
 
;
 
then
 
 
9
 
fi
 
 
 
 
 
\
 
file
 
do
 
#  rsync -avzP --delete --timeout=100 --password-file=${rsync_passfile} $src $user@$host01::$dst >/dev/null 2>&1
 
1
 
done
 
0

host rsync服务器地址

src本地目录  dst模块  要和/etc/rsyncd.conf中的模块名对应

user 用户

rsync_passfile密码文件

inotify_home  inotify定义inotifywait的目录

 

#jude下面的内容是检查上面参数是否存在

 
1
\

判断$src目录的变化等参数

while reade file死循环,通过|管道实时读取上面事件的变化,一讲取到就循环执行以下命令进行推送

 
1
1

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

 

 

5) 测试rsync是否成功推送

[root@58server1 backup]# rsync -avz -P --delete /backup rsync_backup@192.168.1.111::backup/ --password-file=/etc/rsync.password

 

 

 

一般添加了脚本后要格式化一次脚本

 
1
2
3
# dos2unix inotify.sh
 
.

 

 

6) 在客户端运行脚本

sh -x inotify.sh

 

使脚本在后台运行

[root@58client scripts]# sh inotify.sh &

 

 

[root@58client dingjian]# for n in `seq 10000`;do /bin/cp /bin/cat /dingjian/cat$n;done

 

服务端

[root@58server1 dingjian]# ls -l /dingjian|wc -l

 

查看客户端58client后台运行的inotify脚本进程

[root@58client scripts]# ps -ef|grep inotify

 

 

rsync+inotify实时数据同步单目录实战

相关文章:

  • 2021-07-23
  • 2022-01-09
  • 2021-04-25
  • 2021-09-13
  • 2021-10-17
  • 2022-02-26
  • 2021-09-04
  • 2022-01-10
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-12-09
  • 2022-12-23
  • 2021-09-20
  • 2021-09-07
  • 2022-02-24
相关资源
相似解决方案