第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   设置inotifyinotifywatch命令可以监视的文件数量(单进程)默认8192

max_user_ instances  设置每个用户可以运行inotifywaitinotifywatch命令的进程数,默认进程数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实现实时同步必须要编写脚本