rsync + inotify 实时同步数据

linux系统管理 struggling 1619次浏览 0个评论
文章目录

一,inotify-tools 简介

inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux内核从2.6.13开始引入,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。

inotify-tools是为linux下inotify文件监控工具提供的一套C的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件。 inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其他。inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数。

rsync + inotify 用来实时同步数据,一般用于 NFS 的热备。

nfs+inotify

二,配置 rsync+ inotify

1,配置 rsync 服务端

# useradd rsync -r -s /sbin/nologin -M

# id rsync

# mkdir /backup   #创建备份目录

# chown -R rsync:rsync /backup/

下面是创建配置文件,如有不明确的,可以查看 使用rsync同步文件

[root@aliyun ~]# cat /etc/rsyncd.conf    
# Global Settings
# port = 873   端口号默认为873,可以不指定
uid = rsync  
gid = rsync  
use chroot = no  
max connections = 5  
timeout = 600
strict modes = yes
pid file = /var/run/rsyncd.pid  
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log  
secrets file = /etc/rsyncd.passwd
auth users = feiyu   

[backup]          
path = /backup  
ignore errors = yes   
read only = no  
write only = no  
hosts allow = 115.28.48.187
hosts deny = *   
list = false
uid = root 
gid = root       
auth users = feiyu   
secrets file = /etc/rsyncd.passwd
ignore errors = yes  

# echo "feiyu:123" > /etc/rsyncd.passwd  #创建密码文件

# chmod 600 /etc/rsyncd.passwd

# rsync --deamon

# echo "rsync --daemon" >> /etc/rc.local     #加入开机启动,放在/etc/rc.local 的目的是方便管理各服务

2,配置客户端

[root@sta2 ~]# echo "123"  >> /etc/rsyncd.passwd   #只需要密码,传送时已指定好了用户

[root@sta2 ~]# chmod 600 /etc/rsyncd.passwd

下载 inotify-tools ,此源码包放在 google code上,可以在我的ftp上下载,http://mirrors.tianfeiyu.com/inotify-tools/inotify-tools-3.14.tar.gz

# wget http://mirrors.tianfeiyu.com/inotify-tools/inotify-tools-3.14.tar.gz

# tar xf inotify-tools-3.14 -C /usr/local/inotify-tools-3.14/

# ln -s inotify-tools-3.14 inotify

# cd  /usr/local/inotify/bin/


inotifywait 用法示例:

inotifywait用于等待文件或文件集上的一个待定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树;

inotifywatch用于收集被监控的文件系统计数据,包括每个inotify事件发生多少次等信息

从上面可知inotifywait是一个监控事件,可以配合shell脚本使用它。与它相关的参数:

语法格式:inotifywait [-hcmrq][-e][-t][–format][-timefmt][…]

-m: 即“–monitor” 表示始终保持事件监听状态。

-r: 即“–recursive” 表示递归查询目录

-q: 即“–quiet” 表示打印出监控事件

-o: 即“–outfile” 输出事情到一个文件而不是标准输出

-s: 即“–syslog” 输入错误信息到系统日志

-e: 即“–event”, 通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、close_write、move、close、unmount和attrib等

-format: 指定输出格式;常用的格式符如:%w:表示发生事件的目录 %f:表示发生事件的文件 %e:表示发生的事件 %T:使用由-timefmt定义的时间格式

-timefmt:指定时间格式,用于-format选项中的%T格式

–exclude :指定要排出的文件,可以使用正则

–fromfile:从文件中读取需要监控的文件或排除的文件,一个文件一行,排除的文件以”@”开头,不支持正则

inotifywatch是收集数据的指令,它的相关参数:

语法格式:inotifywatch[-hvzrqf][-e][-t][-a][-d][…]

-fromfile:从文件中读取需要监控的文件或排除的文件,一个文件一行,排除的文件以”@”开头

-z: 即“-zero” 输出表格的行和列,即使元素为空

-r: 即“-recursive” 监视一个目录下的所有子目录

-t: 即“-timeout” 设置超时时间

-e: 即“-event” 只监听指定的事件


运行结果如下:

# ./inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,close_write,delete /tmp    #监控/tmp文件夹下文件的增删改操作

QQ图片20160419171834

3,自定义脚本使用 inotifywait 监控要同步的目录并使用 rsync 进行同步

#!/bin/bash

remote_user=feiyu
remote_ip=114.215.91.78   #rsync服务端
remote_module=backup    #rsync服务端模块,与rsync配置文件中的保持一致

inotify=/usr/local/inotify/bin/inotifywait
mon_dir_tianfeiyu=/usr/html/htdocs
rsync_passwd=/etc/rsyncd.passwd

#检查文件夹下若有文件改变则立即同步
$inotify -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e \
create,close_write,delete ${mon_dir_tianfeiyu} | while read file;do

	rsync -az --delete ${mon_dir_tianfeiyu}  $remote_user@$remote_ip::$remote_module \
	--password-file=${rsync_passwd}
done

然后让脚本运行在后台,就可以实时同步了:

# setsid sh tianfeiyu_inotify.sh &


DevOps-田飞雨 》》转载请注明源地址
喜欢 (5)or分享 (0)
发表我的评论
取消评论
*

表情 贴图 加粗 链接 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址