说明蓝色=命令名称

      浅绿=命令参数

      浅蓝=选项

      紫色=目录

      系统环境:CentOS  5.8  x86_64

 

主机 ip
master 192.168.1.70
slave1 192.168.1.71
slave2 192.168.1.72

一、innotify安装

1、查看内核是否支持inotify2.6.13以上版本支持):

rsync + inotify 事实数据备份

如图所示表示支持inotify

2、安装inotify

下载源码包:

 wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

编译

 cd inotify-tools-3.14
 ./configure --prefix=/usr/local/inotify
 make && make install

检查

rsync + inotify 事实数据备份

如图所示安装成功。

做好链接方便使用:

ln -s /usr/local/inotify/bin/* /usr/local/bin

二、rsync配置

1、分别在三台主机上安装rsync(一般centos系统默认都安装了):

yum install rsync

2、slave配置

手动在slave节点 /etc 下添加 rsyncd.conf 内容如下:

uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[web]
path = /web/wwwroot/
comment = web file
ignore errors
read only = no
write only = no
hosts allow =  *
#hosts deny = *
list = false
uid = root
gid = root

将rsync添加到开机启动

echo "/usr/bin/rsync --daemon" >> /etc/rc.local

三、master同步检测

1、master检测脚本


  1. #!/bin/bash 
  2. SRC=/web/wwwroot/ 
  3. INWT=/usr/local/bin/inotifywait 
  4. host1=(192.168.1.71 192.168.1.72
  5. user=webuser 
  6. $INWT -mrq --timefmt '%Y/%m/%d %H:%M:%S' --format '%T %w%f%e' \ 
  7.   -e close_write,delete,create,attrib,move $SRC \ 
  8.         | while read files 
  9.                 do 
  10.                     for ((i=0;i<${#host1[@]};i++)) 
  11.                     do 
  12.                         /usr/bin/rsync -vzrtopg --delete --progress  $SRC [email protected]${host1[$i]}::web 
  13.                         echo "${files} was rsynced ${host1[$i]}" >>/tmp/rsync.log 2>&1 
  14.                     done 
  15.                 done 

 将上述脚本(内容根据自己实际情况修改)保存为 rs.sh,赋予执行权限,并加入到开机启动中,这里不再啰嗦

2、效果测试

在master上启动脚本

sh rs.sh

在master建立测试文件

rsync + inotify 事实数据备份

master上输出结果:

rsync + inotify 事实数据备份

查看slave结果:

rsync + inotify 事实数据备份

如图所示,测试ok了。

补充:(以下内容来自网络搜集)

Rsync的配置文件为/etc/rsyncd.conf,在安装完rsync时,默认没有这个文件,手动建立一个即可。Rsync文件由一个或多个模块结构组成,相应地,包括全局参数和模块参数,一个模块定义从方括弧中的模块名开始,直到下个模块的定义开始。配置内容如下:

===========================================================================

uid = nobody

gid = nobody

use chroot = no

max connections = 10

strict modes = yes

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

 

[web1]

path = /data

comment = web file

ignore errors

read only = no

write only = no

hosts allow = 192.168.130.54

host deny = *

list = false

uid = root

gid = root

auth users = webuser

secrets file = /etc/web.pass

 

Uid  : 此选项指定当该模块传输文件时守护进程应该具有的用户ID,默认值 是“nobody

Gid  : 此选项指定当该模块传输文件时守护进程应该具有的用户组ID,默认值 是“nobody

max connections :此选项指定模块的最大并发连接数量,以保护服务器。超过限制的连接请求将被暂时限制。默认值是0,即没有限制。

strict modes :此选项指定是否检查口令文件的权限,yes为检查口令文件权限,反之为no。如果设置为yes,密码文件的权限必须为root用户权限。

pid file :此选项用来指定rsync守护进程对应的PID文件路径。

lock file :指定支持max connections参数的锁文件,默认值是/var/run/rsyncd.lock

log file" log file" 指定rsync的日志文件,而不将日志发送给syslog

[web1] :表示定义一个模块的开始,web1就是对应的模块名称

Path :此选 项用来指定需要备份的文件或目录,是必须设置的项。这里指定的目录为/data

ignore errors :表示可以忽略一些无关的I/O错误

read only :设置为no表示客户端可以上传文件,设置为yes表示只读。

write only :设置为no表示客户端可以下载文件,设置为yes表示不能下载。

hosts allow :设置可以连接rsync服务器的主机,“*”表示允许连接的任何主机。

host deny :设置禁止连接rsync服务器的主机地址。

List :此选项用于设定当客户请求可以使用的模块列表时,该模块是否被列出。默认值是true,如果需要建立隐藏的模块,可以设置为false

auth users :此选项用来定义可以连接该模块的用户名,多个用户名以空格或逗号分隔开。需要注意的是,这里的用户和linux系统用户没有任何关系。这里指定的用户是webuser

secrets file :此选项用于指定一个包含“用户名:密码”格式的文件,用户名就是” auth users”选项定义的用户,密码可以随便指定,这里指定为web123,只要和客户端的secrets file对应。只有在auth users被定义时,该文件才起作用。系统默认没有这个文件,自己手动建立一个即可。secrets file的文件属性为600


inotify相关参数

inotify定义了一些接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内核参数,因此,可以根据应用需求,实时调节其大小。

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

##表示调用inotify_init时分配到inotify instance中可排队的event数的最大值,超过这个值得事件被丢弃,但会触发In_q_overflow事件。

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

##表示每一个real user ID可创建的inotify instances的数量上限。

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

##表示每一个inotify实例相关联的watchs的上限,也就是每一个inotify实例可监控的最大目录数。如果监控的文件数目巨大,需要根据实际情况适当增加此值得大小。例如:

[[email protected] ~]# echo 30000000> /proc/sys/fs/inotify/max_user_watches

5inotifywait相关参数:

inotifywait是一个监控等待事件,可以配合shell脚本使用它。

-m ,即“--monitor”,表示始终保持事件监听状态;

-r ,即“--recursive”,表示递归查询目录;

-q ,即“--quiet”,表示打印出监控事件;

-e ,即“--event”,通过此参数可以指定要监控的事件,常见的事件有modifydeletecreateattrib等。