1.1 inotify介绍

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

3.1 基本环境部署(这里为了避免不兼容的情况出现,采用统一版本的系统)

主机名 IP地址 系统版本 内核版本
inotify master 10.72.16.112 centos 6.8 2.6.32-642.el6.x86_64
inotify slave 10.72.16.59 centos 6.8 2.6.32-642.el6.x86_64

4.1 inotify-slave部署

这里就是部署rsync服务,rsync daemon工作模式。
4.1.1检查是否安装rsync
 rpm -qa  rsync
结果

4.1.2 新建rsync用户及模块目录并更改其用户组

useradd rsync -s /sbin/nologin  -M
mkdir /backup #创建rsync daemon工作模式的模块目录
chown rsync.rsync /backup/ #更改模块目录的用户组
ll -d /backup/

4.1.3 编写rsync daemon配置文件/etc/rsyncd.conf

#rsync_config_____start
#created by chensiqi : --
##blog:http://www.cnblogs.com/chensiqiqi/
##rsyncd.conf start## # 用户
uid = rsync
# 组
gid = rsync
# 程序安全设置
use chroot = no
# 客户端连接数
max connections =
# 超时时间
timeout =
# 进程号文件位置
pid file = /var/run/rsyncd.pid
# 进程锁
lock file = /var/run/rsync.lock
# 日志文件位置
log file = /var/log/rsyncd.log
##########################################
[backup]
# 使用目录
path = /backup/
# 有错误时忽略
ignore errors
# 可读可写(true或false)
read only = false
# 阻止远程列表(不让通过远程方式看服务端有啥)
list=false
# 允许IP
hosts allow = 192.168.197.0/
# 禁止IP 以下表示没有拒绝的链接。
hosts deny = 0.0.0.0/
# 虚拟用户
auth users = rsync_backup
# 存放用户和密码的文件
secrets file = /etc/rsync.password ##rsync_config______end##

4.1.4 配置虚拟用户的密码文件

echo "rsync_backup:123456" >/etc/rsync.password
#注:rsync_backup为虚拟用户,123456为这个虚拟用户的密码
chmod /etc/rsync.password #为密码文件提权,增加安全性

4.1.5 启动rsync 服务

rsync --daemon   #启动rsync服务
ps -ef |grep rsync
root : ? :: rsync --daemon
root : pts/ :: grep rsync
ss -tunl
tcp LISTEN ::: :::*
tcp LISTEN *: *:*

4.1.6 通过inotify-master测试推送

inotify-master配置密码文件,测试推送
echo "" >/etc/rsync.password
#注意:这里只要写密码即可,切记。
chmod /etc/rsync.password
echo "hello sjf">test.txt
rsync -avz test.txt rsync_backup@192.168.42.116::backup --password-file=/etc/rsync.password
sending incremental file list
test.txt sent bytes received bytes 42.40 bytes/sec
total size is speedup is 0.09
inotify-slave检查:
ll /backup/
total
-rw-r--r-- rsync rsync Oct : test.txt
cat /backup/test.txt
hello sjf

5.1 inotify-master部署

注:
inotify是rsync客户端安装和执行的
企业场景压力测试200-300个同步限制,受网卡,磁盘,带宽等的制约。
5.1.1 查看当前系统是否支持inotify
ll /proc/sys/fs/inotify/
total
-rw-r--r-- root root Oct : max_queued_events
-rw-r--r-- root root Oct : max_user_instances
-rw-r--r-- root root Oct : max_user_watches
#显示这三个文件则证明支持。
番外:
/proc/sys/fs/inotify/max_queued_evnets
表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
/proc/sys/fs/inotify/max_user_instances
表示每一个real user ID可创建的inotify instatnces的数量上限。
/proc/sys/fs/inotify/max_user_watches
表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。
例如: echo > /proc/sys/fs/inotify/max_user_watches 优化:
echo "50000000" >/proc/sys/fs/inotify/max_user_watches
echo "50000000" >/proc/sys/fs/inotify/max_queued_events
 

5.1.2 inotify的安装

inotify可以编译安装也可以直接yum安装
我这里采用的是yum安装的方式
yum -y install inotify-tools
当然我这里也给出编译安装的方法
wget http://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
tar zxf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13
./configure --prefix=/usr/local/inotify-3.13 #配置inotify,并指定安装路径为/usr/local/inotify-3.13
make && make install
注意这里安装完成后记得将命令所在路径引入环境变量
vi /etc/profile
PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:$JAVA_HOME/bin:/usr/local/inotify-3.13/bin
source /etc/profile
 

5.1.3 inotify之inotifywait命令常用参数详解

inotifywait --help
-r|--recursive Watch directories recursively. #递归查询目录
-q|--quiet Print less (only print events). #打印监控事件的信息
-m|--monitor Keep listening for events forever. Without this option, inotifywait
will exit after one event is received. #始终保持事件监听状态
--excludei <pattern> Like --exclude but case insensitive. #排除文件或目录时,不区分大小写。
--timefmt <fmt> strftime-compatible format string for use with %T in
--format string. #指定时间输出的格式
--format <fmt> Print using a specified printf-like format string; read the man page for more details.
#打印使用指定的输出类似格式字符串
-e|--event <event1> [ -e|--event <event2> ... ] Listen for specific event(s).
If omitted, all events are listened for.
#通过此参数可以指定需要监控的事件
如下所示:
Events:
access file or directory contents were read #文件或目录被读取。
modify file or directory contents were written #文件或目录内容被修改。
attrib file or directory attributes changed #文件或目录属性被改变。
close file or directory closed, regardless of read/write mode #文件或目录封闭,无论读/写模式。
open file or directory opened #文件或目录被打开。
moved_to file or directory moved to watched directory #文件或目录被移
动至另外一个目录。
move file or directory moved to or from watched directory #文件或目
录被移动另一个目录或从另一个目录移动至当前目录。
create file or directory created within watched directory #文件或目录被创建在当前目录
delete file or directory deleted within watched directory #文件或目录
被删除
unmount file system containing file or directory unmounted #文件系统被
卸载
 

测试create

在第一个窗口输入如下内容:
[root@backup ~]# ls /backup
[root@backup ~]# inotifywait -mrq --timefmt '%y %m %d %H %M' --format '%T %w%f' -e create /backup 在第二个窗口:输入如下内容
[root@backup ~]# cd /backup
[root@backup backup]# touch chensiqi 此时回到第一个窗口出现如下内容:
/backup/chensiqi #命令说明
inotifywait:ionotify的命令工具
-mrq:-q只输入简短信息 -r,递归监控整个目录包括子目录 -m进行不间断持续监听
--timefmt 指定输出的时间格式
--format:指定输出信息的格式
-e create:制定监控的时间类型,监控创建create事件。
 

5.1.4 编写监控脚本并加载到后台执行

#!/bin/bash
#sjf
host01=10.72.16.59 #inotify-slave的ip地址
src=/backup/ #本地监控的目录
dst=backup #inotify-slave的rsync服务的模块名
user=rsync_backup #inotify-slave的rsync服务的虚拟用户
rsync_passfile=/etc/rsync.password #本地调用rsync服务的密码文件
#inotify_home=/usr/share/doc/inotify-3.14 #inotify的安装目录
inotify_home=/usr/local/inotify-3.13 #这个是yum安装的软件的安装所在目录
#judge
if [ -z "$src" ] || [ -z "${rsync_passfile}" ] || [ -z "${inotify_home}/bin/inotifywait" ] || [ -z "/usr/bin/rsync" ]; then
echo "Check File and Folder"
exit
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
cd $src && rsync -aruz -R --delete ./ --timeout= $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null >&
done
exit
inotify-master操作:
cd /backup/
for i in `seq `;do touch $i ;done #创建200个文件
ls -l --time-style=full-iso
total
-rw-r--r-- root root -- ::16.183409656 +
-rw-r--r-- root root -- ::16.225409783 +
-rw-r--r-- root root -- ::16.526410667 +
-rw-r--r-- root root -- ::16.528410673 +
-rw-r--r-- root root -- ::16.530410679 +
-rw-r--r-- root root -- ::16.533410688 +
-rw-r--r-- root root -- ::16.535410694 +
-rw-r--r-- root root -- ::16.538410703 +
-rw-r--r-- root root -- ::16.539410707 +
-rw-r--r-- root root -- ::16.552410742 +
inotify-slave检查
ll  --time-style=full-iso
total
-rw-r--r-- rsync rsync -- ::16.000000000 +
-rw-r--r-- rsync rsync -- ::16.000000000 +
-rw-r--r-- rsync rsync -- ::16.000000000 +
-rw-r--r-- rsync rsync -- ::16.000000000 +
-rw-r--r-- rsync rsync -- ::16.000000000 +
-rw-r--r-- rsync rsync -- ::16.000000000 +
-rw-r--r-- rsync rsync -- ::16.000000000 +
-rw-r--r-- rsync rsync -- ::16.000000000 +
-rw-r--r-- rsync rsync -- ::16.000000000 +
-rw-r--r-- rsync rsync -- ::16.000000000 +
-rw-r--r-- rsync rsync -- ::16.000000000 +
这样我们结合inotify的测试就完成了,是不是很简单!

转自
作者:sjfbjs
链接:https://www.jianshu.com/p/28f9f7cbfd9c
参考:

inotify+rsync实现实时同步部署 - Williamer - 博客园 https://www.cnblogs.com/hackerer/p/5243639.html
真正的inotify+rsync实时同步 彻底告别同步慢 - 琴酒网络 - 博客园 https://www.cnblogs.com/ginvip/p/6430986.html
Linux实战教学笔记21:Rsync数据同步工具 - 陈思齐 - 博客园 https://www.cnblogs.com/chensiqiqi/p/6514315.html

Linux实战教学笔记23:Inotify事件监控工具 - 陈思齐 - 博客园 https://www.cnblogs.com/chensiqiqi/p/6542268.html
 

rsync+inotify实现实时同步案例【转】的更多相关文章

  1. rsync+inotify实现实时同步案例--转

    转自:http://chocolee.blog.51cto.com/8158455/1400596 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐 ...

  2. rsync+inotify实现实时同步案例

    转自:http://chocolee.blog.51cto.com/8158455/1400596 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐 ...

  3. linux rsync +inotify 实现 实时同步

    前言:     rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rs ...

  4. rsync + inotify 数据实时同步

    一.rsync介绍 rsync英文全称为Remote synchronization,从软件的名称就可以看出来,Rsync具有可是本地和远程两台主机之间的数据快速复制同步镜像.远程备份的功能,这个功能 ...

  5. Rsync+inotify实现实时同步

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

  6. rsync简介与rsync+inotify配置实时同步数据

    rsync简介 rsync是linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同步. rsync特性 rsync ...

  7. CentOS 7 rsync+inotify实现实时同步

    测试环境如下: inotify-slave IP : 172.16.0.222 inotify-master IP : 172.16.0.233 对两台机的要求: 安装依赖包gcc: yum inst ...

  8. centos 配置rsync+inotify数据实时同步2

    一.Rsync服务简介 1. 什么是Rsync 它是一个远程数据同步工具,它在同步文件的同时,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的“rsync算法”来使本地和远程两个主机 ...

  9. centos 配置rsync+inotify数据实时同步

    何为rsync? 定义: rsync是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,非常适用于异地备份 何为源端和发起端? 在远程同步过程中,负责发起rs ...

随机推荐

  1. R语言模块安装

    一.ggplot2 install.pacakges("ggplot2")

  2. MySQL数据库优化_limit_2

    limit豫union一起使用时的优化 cp_order_exit数据行数:142951 cp_order_exit_led数据行数:20876 查询:这条 查询将会把 cp_order_exit中的 ...

  3. python 模块二(os,json,pickle)

    #################################总结##################### os常用 os.makedirs('baby/安哥拉/特斯拉/黄晓明') os.mkd ...

  4. 谈一谈Elasticsearch的集群部署

      Elasticsearch天生就支持分布式部署,通过集群部署可以提高系统的可用性.本文重点谈一谈Elasticsearch的集群节点相关问题,搞清楚这些是进行Elasticsearch集群部署和拓 ...

  5. BZOJ - 3676 回文串 (回文树)

    https://vjudge.net/problem/HYSBZ-3676 题意 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s ...

  6. IO流之FileUtils工具类的使用

    IO流之FileUtils工具类的使用: 使用apache的commons-io包下的FileUtils,我筛选了一些常用方法:

  7. 02-Unity深入浅出(二)

    一. Unity声明周期 Unity容器为我们提供了6种生命周期,便于我们根据项目需求来选择使用. (1). 瞬时.默认省略即为瞬时,无论单线程还是多线程,每次都重新创建对象.new Transien ...

  8. npm与nrm

    npm npm是Node.js 平台的默认包(模块依赖)管理工具 Node Package Manager nrm 一个npm的源管理器(管理工具) 允许快速的在 npm 源间切换 两者关系 npm是 ...

  9. 产线nginx路径跳转问题

    问题描述 应用在客户产线环境部署时,要求只需要输入域名就可以直接访问到应用,而不用输入完整的应用访问路径. 项目架构 前端使用nginx作为反向代理和负载均衡,后端部署多个tomcat实例. Web应 ...

  10. 关于REST API设计的文章整理

    1. rest api uri设计的7个准则(1)uri末尾不需要出现斜杠/(2)在uri中使用斜杠/表达层级关系(3)在uri中可以使用连接符-提升可读性(4)在uri中不允许出现下划线字符_(5) ...