Inotify+rsync同步两主机之间数据

 

rysnc简介

rsyncremote sync,UNIX类系统文件同步和数据传输工具,能实现客户端和远程服务器端的文件同步,它采用的是rsync算法,它比较传输源文件和目标文件有变更的部分进行传送。

 

rsync特性

    1>增量数据同步,传输效率搞

    2>镜像保存整个目录树和文件系统

    3>保留文件属性,时间戳等。

    4>支持加密传输

 

inotify是一种高效率、细粒度、异步的文件系统监控机制。它监控文件系统,并且及时向第三方软件(如rsync)发出相关的删、读、写操作等。linux内核2.6.13版本开始支持inotify。利用这个内核接口,第三方软件如inotify-tools可以监控文件系统下文件的变化情况。

 

应用场景:

1.  远程容灾备份场景

为保证数据安全,搭建一个远程容灾系统,当数据发生改变时,立即将其同步到远程灾备服务器上。

2.   搭建实时同步系统

无存储共享设备,web集群中的代码均存放在本地,最终导致web节点之间的数据无法一致采用rsync+inotify,实现多台web数据动态同步

案例演示:

监控192.168.1.7/var/www/html目录,当目录内容有变化,立即将其内容同步到192.168.1.8/var/www/html目录。

 

主机:192.168.1.8

系统默认已安装rsync,不需手动安装。但没有提供配置文件,需手动建立。

编辑/etc/rsyncd.conf

uid=nobody  #指定该模块传输文件时守护进程的用户ID
gid=nobody  #
指定该模块传输文件时守护进程的用户组ID
use chroot = no
max connections =10  #
最大并发连接数量,保护服务器。默认是0,没有限制
strict modes = yes  #
是否坚持口令文件权限,密码文件权限必须为root
pid file = /var/run/rsyncd.pid  #rsync
守护进程的pid
lock file = /var/run/rsync.lock #rsync
守护进程的锁文件
log file = /var/log/rsyncd.log  #
日志路径
 
[xiaoming]                   #
定义一个模块的开始, xiaoming为对应的模块名称
path = /var/www/html/      #
指定需要备份的文件或目录
comment = xiaoming file
ignore errors               #
可忽略一些无关的I/O错误
read only = no            #
为no表示客户端可上传文件,为yes表示只读
write only = no           #
为no表示客户端可下载文件,为yes表示不能下载
host allow = 192.168.1.7  #
可以连接rsync服务器的主机
host deny = *             #
拒绝连接rsync服务器的主机
list = false               #
设定当客户请求可以使用的模块列表,模块是否被列出,默认true
uid = root
gid = root
auth user = xiaobai              #
认证的用户
secrets file = /etc/server.pass  #
认证的密码

# useradd xiaobai
# echo 123456 | passwd xiaobai --stdin

 

启动rsync守护进程

# rysnc --daemon

 

主机:192.168.1.7

安装inotify-tools

# yum install inotify-tools

查看生成了那些文件

# rpm -ql inotify-tools
/usr/bin/inotifywait
/usr/bin/inotifywatch
/usr/lib64/libinotifytools.so.0
/usr/lib64/libinotifytools.so.0.4.1
/usr/share/doc/inotify-tools-3.14
......

inotifywait使用内核inotify接口等待文件的变化,时候使用shell脚本来实现。

    -m,--monitor始终保持事件的坚听,默认是在一个事件发生后退出。

    -r,--recursive 递归监控目录

    -q,--quiet在屏幕显示监控事件

    -e--event 制定要监控的事件,如modifydeletecreateaccessattrib

 inotifywatch收集被监控的文件系统统计数据。

 

编辑同步脚本/root/rsync.sh

#!/bin/bash

#
host=192.168.1.8
src=/var/www/html/
user=xiaobai
dst=xiaoming
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files
       do
       /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user@$host::$dst
       echo "${files} was rsynced" >> /tmp/rsync.log2>&1
       done

编辑/etc/server.pass
123456
# chmod 600 /etc/server.pass

 

放入后台执行

# bash rsync.sh &

此时,在192.168.1.7主机/var/www/html目录变更文件,192.168.1.8会立即同步。

 

查看同步文件日志:

# tail/tmp/rsync.log2

11/07/15 09:05/var/www/html/bCREATE was rsynced

11/07/15 09:05/var/www/html/bATTRIB was rsynced

11/07/15 09:06/var/www/html/cCREATE was rsynced

11/07/15 09:06/var/www/html/cATTRIB was rsynced

11/07/15 09:07/var/www/html/aDELETE was rsynced

11/07/15 09:08/var/www/html/fstabCREATE was rsynced

11/07/15 09:08/var/www/html/fstabMODIFY was rsynced


你可能感兴趣的:(同步,rsync,inotify)