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

 

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
[root@58server1 ~]# cat /etc/rsyncd.conf
 
#Rsync server
 
#created by oldboy 15:01 2009-6-5
 
##rsyncd.conf start##
 
uid = root
 
gid = root
 
use chroot = no
 
max connections = 2000
 
timeout = 600
 
pid file = /var/run/rsyncd.pid
 
lock file = /var/run/rsync.lock
 
log file = /var/log/rsyncd.log
 
ignore errors
 
read only = false
 
list = false
 
hosts allow = 192.168.1.1/24
 
hosts deny = 0.0.0.0/32
 
auth users = rsync_backup
 
secrets file = /etc/rsync.password
 
#####################################
 
[dingjian]
 
comment = bbs by dingjian 14:18 2012-1-13
 
path = /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
[root@58client ~]# uname -r
 
2.6.18-308.el5
 
[root@58client ~]# ls -l /proc/sys/fs/inotify/
 
total 0
 
-rw-r--r-- 1 root root 0 May  4 22:33 max_queued_events
 
-rw-r--r-- 1 root root 0 May  4 22:33 max_user_instances
 
-rw-r--r-- 1 root root 0 May  4 22:33 max_user_watches
 
#显示这三个文件则证明支持

2)下载inotify源码包

 
1
2
3
4
5
[root@58client ~]# mkdir /home/Mr.Xing/tools/ -p
 
[root@58client ~]# cd /home/Mr.Xing/tools/
 
[root@58client 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
[root@58client tools]# ls
 
inotify-tools-3.14.tar.gz
 
[root@58client tools]# tar zxf inotify-tools-3.14.tar.gz
 
[root@58client tools]# cd inotify-tools-3.14
 
[root@58client inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14
 
[root@58client inotify-tools-3.14]# make
 
[root@58client inotify-tools-3.14]# make install
 
[root@58client inotify-tools-3.14]# cd ..
 
[root@58client tools]# ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotfiy
 
[root@58client tools]# ls -l /usr/local/|grep inotify
 
lrwxrwxrwx 1 root root   30 May  4 22:42 inotfiy -> /usr/local/inotify-tools-3.14/
 
drwxr-xr-x 6 root root 4096 May  4 22:41 inotify-tools-3.14

参数:

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

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

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

建立一个软链接

进入安装inotify的目录

 
1
2
3
4
5
6
7
8
9
10
11
[root@58client tools]# ls -l /usr/local/inotify-tools-3.14/
 
total 16
 
drwxr-xr-x 2 root root 4096 May  4 22:41 bin            #inotfiy执行命令(二进制)
 
drwxr-xr-x 3 root root 4096 May  4 22:41 include        #inotfiy程序所需用的头文件
 
drwxr-xr-x 2 root root 4096 May  4 22:41 lib            #动态链接的库文件
 
drwxr-xr-x 4 root root 4096 May  4 22:41 share         #帮助文件

查看是否编译成功,

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

只关注下面两个文件

bin

|-- inotifywait

`-- inotifywatch

./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
[root@58client inotify]# mkdir /server/scripts/ -p
 
[root@58client inotify]# cd /server/scripts/
 
[root@58client scripts]# vi inotify.sh
 
[root@58client scripts]# cat inotify.sh
 
#!/bin/bash
 
#para
 
host01=192.168.1.111
 
src=/dingjian
 
dst=dingjian
 
user=rsync_backup
 
rsync_passfile=/etc/rsync.password
 
inotify_home=/usr/local/inotify-tools-3.14/
 
 
 
#judge
 
if [ ! -e "$src" ] \
 
|| [ ! -e "${rsync_passfile}" ] \
 
|| [ ! -e "${inotify_home}/bin/inotifywait" ] \
 
|| [ ! -e "/usr/bin/rsync" ];
 
then
 
echo "Check File and Folder"
 
exit 9
 
fi
 
 
 
 
 
${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \
 
| while read file
 
do
 
#  rsync -avzP --delete --timeout=100 --password-file=${rsync_passfile} $src $user@$host01::$dst >/dev/null 2>&1
 
cd $src && rsync -aruz -R --delete ./  --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
 
done
 
exit 0

host rsync服务器地址

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

user 用户

rsync_passfile密码文件

inotify_home  inotify定义inotifywait的目录

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

 
1
${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \

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

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

 
1
cd $src && rsync -aruz -R --delete ./  --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&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
[root@58client scripts]# dos2unix inotify.sh
 
dos2unix: converting file inotify.sh to UNIX format ...

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实时数据同步单目录实战的更多相关文章

  1. rsync+inotify实时数据同步多目录实战

    rsync+inotify实时数据同步多目录实战       inotify配置是建立在rsync服务基础上的配置过程 操作系统 主机名 网卡eth0 默认网关 用途 root@58server1 1 ...

  2. Rsync+inotify 实时数据同步 inotify master 端的配置

    强大的,细致的,异步的文件系统事件监控机制.Linux 内科从 2.6.13 起支持 inotify Inotify 实现的几款软件:Inotify,sersync,lsyncd ※Inotify 实 ...

  3. Linux学习系列之Inotify+Rsync实现实时数据同步

    Inotify简介 inotify介绍 inotify是一种强大的.异步的文件系统监控机制,linux内核从2.6.13起,加入了inotify的支持,通过inotify可以监控文件系统中添加.删除. ...

  4. Inotify+rsync实现实时数据同步

    使用rsync可以实现数据同步,但是即使使用crontab定时任务最小执行间隔为1分钟,在数据实时性要求比较高场合需使用inotify+rsync实现实时同步 下载inotify wget https ...

  5. centos7部署inotify与rsync实现实时数据同步

    实验环境:CentOS Linux release 7.6.1810 node1:192.168.216.130 客户端(向服务端发起数据同步) node2:192.168.216.132 服务端(接 ...

  6. rsync+inotify实时数据同步

    没有实际的用过,先mark一下,后面实践. https://www.osyunwei.com/archives/7447.html 一.为什么要用Rsync+sersync架构? 1.sersync是 ...

  7. rsync+inotify 实时双向同步

    前言 在遇到需要 nginx 负载均衡,承受较高并发的情况,同时会有双机相同目录内容须保持一致的需求 rsync+inotify 是一个不错的解决方案,相较于 rsync+sersync 在处理大量文 ...

  8. 我的一次rsync+inotify本地数据同步示例

    环境: web工作目录:/var/www/mydafuhao git仓库目录: /var/www/mydafuhao.git/mydafuhao 需求:inotify监控git仓库目录,发现有版本更新 ...

  9. Centos rsync+inotify 实现数据同步备份

    最近公司做了一

随机推荐

  1. 四十五:数据库之SQLAlchemy之subquery实现复杂查询

    子查询让多个查询变成一个查询,只需要查找一次数据库,性能相对来讲更高效,不用写多个SQL语句就可以实现一些复杂的查询,在SQLAlchemy中要实现一个子查询,应该使用以下步骤:1.将子查询按照传统方 ...

  2. 四十一:数据库之SQLAlchemy之limlt、、slice、offset及切片

    一:limit:限制每次查询的时候查询数据的条数二:slice:查一个区间的数据,slice(起,止)三:offset:限制查找数据的时候过滤掉前面多少条四:切片:对query对象切实获取想要的数据 ...

  3. getApplication()和getApplicationContext()区别

    二者使用结果相同,我们写个代码分别打印二者返回结果,发现两个方法获取的是同一个对象. public class MainActivity extends Activity { @Override pr ...

  4. 卸载openssl后yum无法使用,ssh无法连接的解决办法

    一,安装nginx时,提示openssl版本问题,用yum update openssl 发现还是不行,于是rpm -e 卸载了openssl 此时,才发现yum不能用了,然后想上传个tar包时又出现 ...

  5. 1 Java基础知识

    1)面向对象的特性有哪些? 答:封装.继承和多态. 2)Java 中覆盖(Override)和重载(Overload)是什么意思? 答:覆盖是指子类对父类方法的一种重写,只能比父类抛出更少的异常,访问 ...

  6. XCode8.3真机调试设置

    本文使用XCode8.3.3 首先XCode->Preferncs,进入下面的界面 点击左下角“+”号,并输入账号,然后点击Manage Certificates,左下角添加IOS develo ...

  7. [转帖]教你如何修改运行中的docker容器的端口映射

    教你如何修改运行中的docker容器的端口映射   在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当dock ...

  8. 【转帖】如何看待 HTTP/3 ?

    如何看待 HTTP/3 ? https://mp.weixin.qq.com/s/fC10Cyj6xjjwOCnqxX-Dvg 车小胖的公众号 转帖学习一下. 原创: 车小胖谈网络 车小胖谈网络 20 ...

  9. 实例学习——爬取豆瓣音乐TOP250数据

    开发环境:(Windows)eclipse+pydev+MongoDB 豆瓣TOP网址:传送门 一.连接数据库   打开MongoDBx下载路径,新建名为data的文件夹,在此新建名为db的文件夹,d ...

  10. python3 enum模块的应用

    python枚举模块的学习 ps:小编刚开始学习没多久,部分资源来源于其他网友,如有出错,麻烦联系修改哈,互帮互助,共同进步 一.枚举与字典类型 字典类型的缺点:1.值可变 2.没有防止相同标签的功能 ...