NFS存储(Inotify)实时备份原理及项目实战

一、实现从rsync服务端的rsync服务到nfs客户端部署:

1.服务器端配置:

[[email protected] backup]# vim /etc/rsyncd.conf   ##添加以下三行内容

[nfsbackup]

path = /nfsbackup

read only = false

[[email protected] backup]# pkill rsync   ##关闭rsync    

[[email protected] backup]# rsync --daemon   ##启动rsync

[[email protected] backup]# lsof -i tcp:873   ##查看是否运行   

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

rsync   1122 root    4u  IPv4  10751      0t0  TCP *:rsync (LISTEN)

rsync   1122 root    5u  IPv6  10752      0t0  TCP *:rsync (LISTEN)

[[email protected] backup]# mkdir -p /nfsbackup  ##创建共享目录

[[email protected] backup]# chown -R rsync.rsync /nfsbackup/   ##更改用户和属组

[[email protected] backup]# ls -ld /nfsbackup/ ##查看

drwxr-xr-x 2 rsync rsync 4096 6月   9 09:30 /nfsbackup/

 

2.客户端测试:

[[email protected] backup]# rsync -avz /data/ [email protected]::nfsbackup/ --password-file=/etc/rsync.password

 二、监控软件

NFS存储(Inotify)实时备份原理及项目实战

1.inotify:Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具。

Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。

2.sersync:是基于Inotify开发的,类似于Inotify-tools的工具。sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录。

 

NFS客户端安装:

    [[email protected] backup]# uname -r   #查看是否支持安装

2.6.32-431.el6.x86_64

[[email protected] backup]# ls -l /proc/sys/fs/inotify/  #查看是否有这个目录

总用量 0

-rw-r--r-- 1 root root 0 6月   8 19:14 max_queued_events

-rw-r--r-- 1 root root 0 6月   8 19:14 max_user_instances

-rw-r--r-- 1 root root 0 6月   8 19:14 max_user_watches

[[email protected] ~]# rpm -aq inotify-tools  #查看是否安装

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

[[email protected] ~]# yum install -y inotify-tools  #安装

[[email protected] ~]# rpm -aq inotify-tools       

inotify-tools-3.14-1.el6.x86_64

工具介绍:

一共2个工具(命令):inotifywait和inotifywatch

inotifywait:在被监控的文件或目录上等待特定文件系统事件(open、close、delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用。

inotifwatch:收集被监视的文件系统使用度统计数据,指文件系统事件发生的次数统计。

NFS客户端对NFS目录文件系统事件的实时监控:

[[email protected] ~]#  inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,delete /backup

08/06/18 23:25 /backup/b

[[email protected] ~]#  inotifywait -mrq --format '%w%f' -e close_write /backup

/backup/a

监控到NFS目录文件系统事件变化后,触发rsync推送变化的文件

   编写脚本:

#!/bin/bash

Path=/data

Ip=172.16.1.41

/usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete $Path \

|while read file

do

        cd $Path &&\

        rsync -az ./ --delete [email protected]$Ip::nfsbackup \

        --password-file=/etc/rsync.password

done

然后执行脚本,在服务器端查看:

 

 

在/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制

max_user_watches #设置inotifuwait或inotifywatch可以监视的文件数量(单进程)

max_queued_events #设置inotify实例事件(event)队列可容纳的事件数量

max_user_instances #设置每个用户可以运行的inotifywait和inotifywatch的进程数

[[email protected] data]# cat /proc/sys/fs/inotify/max_user_watches 

8192

[[email protected] data]# cat /proc/sys/fs/inotify/max_queued_events

16384

[[email protected] data]# cat /proc/sys/fs/inotify/max_user_instances

128

调整可以用echo:

echo 11003 >/proc/sys/fs/inotify/max_user_watches #重启会失效

vi /etc/rc.local->注释->添加/proc/sys/fs/inotify/max_user_watches