第1章 企业实时同步备份服务部署-inotify
1.1 inotify是什么?
inotify是一种强大的,细粒度的.异步文件系统监控机制,通过inotify可以监控文件系统中添加/删除/修改/移动等各种事件,inotify-tools正是实施这样监控的软件
sersync就是在inotify基础上强化了一些功能,比如重试机制,过滤机制,提供接口做CDN
1.2 linux内核从2.16.13起才支持inotify
/proc/sys/fs/inotify 系统默认的目录下有三个文件,对inotify机制有一定的限制
max_user_watches 设置inotify或inotifywatch命令可以监视的文件数量(单进程)默认8192
max_user_ instances 设置每个用户可以运行inotifywait或inotifywatch命令的进程数,默认进程数128
max_queued_events 设置inotify实例事件(event)队列可容纳的事件数量
1.2.1 多实例的含义:
一个服务识别不同的配置文件,启动多个进程,开启不同的socket条目信息,生成多个不同端口信息,这样就实现了一个服务的多实例创建
1.3 实时备份原理过程:
1. 划分nfs存储与rsync备份服务器
2. 在存储服务器上部署监控服务,监控相应文件或目录中数据信息的变化
3. 将监控文件或目录,变化的数据信息进行推送,从而实现实时备份到rsync服务器中
1.4 inotify实现实时同步部署流程:
1. 部署rsync服务,守护进程模式要开启
2. 部署inotify软件,进行实时监控数据信息的变化
a) 默认没有inotify软件,需要进行yum安装
yum install -y inotify-tools
b) 检查事件目录监控命令执行是否正确
inotifywait -mrq /data
inotifywait -mrq --timefmt "%y/%m/%d %H:%M" --format "%T %w%f" /data
inotifywait -mrq --timefmt "%F" --format "%T %w%f 事件信息:%e" /data
inotifywait -mrq --timefmt "%F" --format "%T %w%f 事件信息:%:e" -e create /data
c) 脚本需要编写监控命令:
inotifywait -mrq --format "%w%f" -e create,close_write,delete,moved_to /data
3. 编写inotify+rsync的结合脚本
#!/bin/bash
inotifywait -mrq --format "%w%f" -e create,close_write,delete,moved_to /data|\
while read line
do
rsync -az /data/ --delete [email protected]::backup --password-file=/etc/rsync.password
done
1.5 inotify命令如何使用:
1.5.1 inotifywait 命令参数 开启实时监控服务,监控文件目录
-m 始终保持监控状态
-r 递归监控目录中的数据变化
-o 打印事件到文件中,相当于标准正确输出
-q 安静模式,输出信息少
--timefmt 指定事件格式
--format 指定输出格式
-s 输出错误信息
-e 指定监听的事件,比如只监听删除的事件或者 只监听添加的事件
1.5.2 inotify命令语法格式:
%T = 时间格式
%w = 监控的文件或目录名称
%f = 事件出现时,将显示监控目录下触发时间的文件或目录信息
%e = 显示发生的事件信息,不同的事件信息用逗号进行分割
1.5.3 inotify中事件都有什么?
access 数据内容被读取
modify 数据内容被写入
attrib 属性被改变
close_write 修改文件目录之后关闭
close_nowrite 没有修改文件或目录之后关闭
close 文件或目录被关闭
open 文件或目录被打开
move 文件或目录被移动
create 在目录中创建文件或目录
delete 在目录中删除文件或目录
在实际使用时,只要监控以下事件即可:
create---创建
delete---删除
move---移动
close_write---修改
1.5.4 对文件的监控信息:
命令为: [root@nfs01 ~]# inotifywait -mr --timefmt "%Y-%m-%d" --format '%T: %w %e' /data/
查看文件的逻辑过程:
2018-01-26: /data/ OPEN,ISDIR
2018-01-26: /data/ CLOSE_NOWRITE,CLOSE,ISDIR
创建文件的逻辑过程:
2018-01-26: /data/ CREATE
2018-01-26: /data/ OPEN
2018-01-26: /data/ ATTRIB
2018-01-26: /data/ CLOSE_WRITE,CLOSE
删除文件的逻辑过程:
2018-01-26: /data/ DELETE
移动文件的逻辑过程:
2018-01-26: /data/ MOVED_FROM
1.5.5 对目录的监控信息:
创建目录的逻辑过程:
2018-01-26 /data/ CREATE,ISDIR
2018-01-26 /data/ OPEN,ISDIR
2018-01-26 /data/ CLOSE_NOWRITE,CLOSE,ISDIR
删除目录的逻辑过程:
2018-01-26 /data/ OPEN,ISDIR
2018-01-26 /data/ CLOSE_NOWRITE,CLOSE,ISDIR
2018-01-26 /data/ OPEN,ISDIR
2018-01-26 /data/boyang/ OPEN,ISDIR
2018-01-26 /data/ DELETE,ISDIR
2018-01-26 /data/ CLOSE_NOWRITE,CLOSE,ISDIR
2018-01-26 /data/boyang/ CLOSE_NOWRITE,CLOSE,ISDIR
2018-01-26 /data/boyang/ DELETE_SELF
移动目录的逻辑过程:
2018-01-26 /data/ MOVED_FROM,ISDIR
2018-01-26 /data/jiang/ MOVE_SELF
Failed to remove watch on /data/jiang/: Unknown error 18446744073709551615
Error removing watch on /data/jiang/: Unknown error 18446744073709551615
2018-01-26 /data/ OPEN,ISDIR
2018-01-26 /data/ CLOSE_NOWRITE,CLOSE,ISDIR
1.6 shell循环方式:
1. for循环: 指定循环条件,循环条件不满足会停止循环
2. while循环: 指定循环条件,循环条件满足时,会无限循环=死循环
3. until(直到): 指定循环条件,循环不满足时,会无线循环
1.6.1 脚本在循环执行时:
利用ctrl+z 只是暂停脚本运行,进程还在
jobs命令将前台运行脚本命令,放入后台
利用kill将进程杀死
然后在将进程转到前台,
将进程暂停,然后直接用pkill+进程名字将其杀死
1.7 inotify服务优化:
根据/proc/目录下的机制文件,对自己的需求进行更改
inotify缺点:
并发大于200个文件时 ,同步就会有延迟
前面写的脚本,每次都是全部推送一次,单确实是泽尼昂的.也可以只同步变化的文件,不变化的不理会
监控到事件后,rsync同步是单线程的,serync是多线程同步
inotify实现实时同步必须要编写脚本