配置inotify + rsync 实现实时同步

简介: 配置inotify + rsync 实现实时同步

一、inotify概述



inotify: 用来监控文件系统的各种变化情况

如: 文件的存取、删除、移动、修改等,可以方便的实现文件异动告警、增量备份,并针对目录或者文件的变化及时做出响应


Linux内核的inotify机制:

(1)从版本2.6.13开始提供

(2)可以监控文件系统的变动情况,并且作出通知响应

(3)辅助软件:inotify-tools


二、为什么要实现实时同步


(1)定期备份的不足 (rsync+crond工具就是定期备份)



(2)解决方案: 实时同步


  • 只要源服务器一发生变化,立即启动同步
  • 源服务器无变化,则不进行同步备份
    依托:inotify


inotify+rsync结合: 实验触发式备份 (实时同步) ——只要原始位置的文档发生变化,立即启动增量备份,否则处于静默等待状态 (也就是什么也不做)


我的理解是:


定时同步,发起端相当于就是一个备份数据的角色,从同步源拿取数据,而实时同步,正好和定时同步反了过来,同步源承担了一个备份数据的角色,而发起端配置了inotify触发器,监控了想要同步的目录,向同步源发送数据,从而实现了实时同步


20201222094343182.png


三、案例、步骤


服务器名称 扮演角色 ip地址
rsync1 发起端 192.168.100.11
rsync2 同步源 192.168.100.12


要求: 只要rsync1服务器的数据一发生变化,立即同步到rsync2服务器上


(1)rsync1(192.168.100.11)的配置


******调整inotify内核参数:监控事件队列、最多监控实例数、每个实例最多监控文件数
默认的:
[root@rsync1 ~]# cat /proc/sys/fs/inotify/max_queued_events 
16384
[root@rsync1 ~]# cat /proc/sys/fs/inotify/max_user_instances 
128
[root@rsync1 ~]# cat /proc/sys/fs/inotify/max_user_watches 
8192
修改sysctl.conf文件:
[root@rsync1 ~]# cat <<a>> /etc/sysctl.conf  (/etc/sysctl.conf都是注释行所以可以直接追加内容)
> fs.inotify.max_queued_events = 16384
> fs.inotify.max_user_instances = 1024
> fs.inotify.max_user_watches = 1048576
> a
[root@rsync1 ~]# sysctl -p   (立即生效)
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
修改后再次查看:  (发现已经成功修改)
[root@rsync1 ~]# cat /proc/sys/fs/inotify/max_queued_events 
16384
[root@rsync1 ~]# cat /proc/sys/fs/inotify/max_user_instances 
1024
[root@rsync1 ~]# cat /proc/sys/fs/inotify/max_user_watches 
1048576
******安装inotify-tools软件,以便提供inotifywait、inotifywatch 辅助工具程序   
上传源码包
[root@rsync1 ~]# ll
总用量 356
-rw-------. 1 root root   1263 10月  8 17:22 anaconda-ks.cfg
-rw-r--r--  1 root root 358772 12月 22 17:58 inotify-tools-3.14.tar.gz
解压配置安装
[root@rsync1 ~]# tar zxvf inotify-tools-3.14.tar.gz 
[root@rsync1 inotify-tools-3.14]# ./configure && make && make install
[root@rsync1 inotify-tools-3.14]# cd
******测试,监控/var/www/html目录的变化 (因为要同步的目录是rsync2上的/var/www/html)
[root@rsync1 ~]# mkdir -p /var/www/html    (创建同步目录)
[root@rsync1 ~]# chmod 777 /var/www/html/
[root@rsync1 ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html/   
(监控/var/www/html 目录的修改、创建、移动、删除行为,ctrl+c退出)
·-m 表示持续监控   ·-r 表示递归整个目录   ·-q 简化输出消息    ·-e 指定监控哪些事件
·modify: 修改  ·create: 创建  ·move:移动  ·delete:删除  ·attrib : 属性变化
[root@rsync1 ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html/   & (放到后台)
[1] 3614
[root@rsync1 ~]# cd /var/www/html/  (切换到/var/www/html目录)
[root@rsync1 html]# touch aaa   (创建或者删除等操作会有相应提示)
/var/www/html/ CREATE aaa
[root@rsync1 html]# ll
总用量 0
-rw-r--r-- 1 root root 0 12月 23 04:46 aaa
[root@rsync1 html]# rm -rf aaa 
/var/www/html/ DELETE aaa
[root@rsync1 html]# ll
总用量 0
[root@rsync1 ~]# fg  (将后台进程放到前台)
inotifywait -mrq -e modify,create,move,delete /var/www/html/
^C  (ctrl+C退出)
******编写触发同步脚本
[root@rsync1 ~]# vim chufa.sh
#!/bin/bash
A="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html"
B="rsync -azH --delete --password-file=/root/pass /var/www/html AAA@192.168.100.12::aaa"
$A | while read DIRECTORY EVERT FILE 
do
$B
done
保存退出
————————————————————————————————————————————————————
·rsync -azH --delete --password-file=/root/pass /var/www/html ·AAA@192.168.100.12::aaa
·--password-file=/root/pass  (即指定查看密码的文件,不加的话得手动输入密码)
·/var/www/html  (要同步的目录,在这个目录中写入数据会进行同步)
·AAA@192.168.100.12::aaa  (AAA即用户名后面跟的是ip地址,aaa是共享模块名)
————————————————————————————————————————————————————
[root@rsync1 ~]# chmod +x chufa.sh 
******创建密码文件pass
[root@rsync1 ~]# echo "123.com" > pass  (新建一个文件写入密码)
[root@rsync1 ~]# chmod 600 pass   (降低权限)

(2)配置rsync2(192.168.100.12)同步源

******安装httpd,准备/var/www/html目录
[root@rsync2 ~]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@rsync2 ~]# yum -y install httpd 
。。。。。。
完毕!
******建立/etc/rsyncd.conf配置文件
[root@rsync2 ~]# cat <<a>> /etc/rsyncd.conf
> use chroot = yes
> address = 192.168.100.12
>   port = 873
>   log file = /var/log/rsyncd.log
>   pid file = /var/run/rsyncd.pid
>   hosts allow = 192.168.100.0/24
>   fake super = yes    (加这个可以解决报错问题)
> [aaa]
> path = /var/www/html
> comment = aaaaa
> read only = no       (设置成no才拥有写入权限,yes是只读)
> dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
> auth users = AAA
> secrets file = /etc/rsync_users.db
> a
[root@rsync2 ~]# chmod 777 /var/www/html/ (设置权限方便发起端能够往本机上同步)
******创建备份用户账户数据文件
[root@rsync2 ~]# echo "AAA:123.com" >/etc/rsync_users.db  (用户名AAA密码123.com)
[root@rsync2 ~]# chmod 600 /etc/rsync_users.db  (设置权限保护)
******启动rsync服务
[root@rsync2 ~]# rsync --daemon   (启动rsync)
[root@rsync2 ~]# netstat -anpt | grep rsync  (监听端口发现已经成功启动)
tcp        0      0 192.168.100.12:873      0.0.0.0:*               LISTEN      15981/rsync    
******做完后切换到rsync1(192.168.100.11)发起端上
[root@rsync1 ~]# echo "/root/chufa.sh" >> /etc/rc.local  (把脚本添加到自运行当中)
[root@rsync1 ~]# ./chufa.sh &  (后台运行该脚本)
******这时切换到/var/www/html同步目录下创建一个新的文件
[root@rsync1 ~]# cd /var/www/html/ 
[root@rsync1 html]# touch aaa
[root@rsync1 html]# ll
总用量 0
-rw-r--r-- 1 root root 0 12月 23 04:58 aaa
******切换到rsync2(192.168.100.12)同步源上,发现多了一个html目录,并且里面有一个文件aaa
[root@rsync2 html]# cd
[root@rsync2 ~]# cd /var/www/html/  (切换到实时同步的目录)
[root@rsync2 html]# ll   (发现有一个新的目录html)
总用量 0
drwxrwxrwx 2 nobody nobody 17 12月 23 04:58 html
[root@rsync2 html]# cd html/  (切换到新的目录中)
[root@rsync2 html]# ll   (发现多了一个aaa文件)
总用量 0
-rw-r--r-- 1 nobody nobody 0 12月 23 04:58 aaa
至此inotify+rsync实时同步配置完成


目录
相关文章
|
3月前
|
监控 安全 Unix
Rsync+Inotify实现数据实时同步
Rsync+Inotify实现数据实时同步
|
监控
inotify+rsync实现实时同步数据
inotify+rsync实现实时同步数据
100 0
|
10月前
|
监控 Linux
rsync+inotify实时同步
rsync+inotify实时同步
|
监控 安全 Shell
使用 inotify 和 rsync 实现文件实时同步
使用 inotify 和 rsync 实现文件实时同步
288 1
|
监控 测试技术 Linux
rsync+inotify实时同步案例
rsync+inotify实时同步案例 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。
1240 0
|
监控 安全 Shell
inotify+rsync实现实时同步
1.1 什么是实时同步:如何实现实时同步 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 发现目录中数据产生变化,就利用rsync服务推送到备份服务器上 1.2 实现实时同步的方法    inotify+rsync 方式实现数据同步    sersync 方式实现实时数据同步 详情参照:http://www.cnblogs.com/clsn/p/7707828.html 1.2.1 实时同步原理介绍   1.3 inotify+rsync 方式实现数据同步 1.3.1 Inotify简介   Inotify是一种强大的,细粒度的。
1839 0
|
Web App开发 监控 网络协议