rsync + inotify 事实数据备份
说明:蓝色=命令名称
浅绿=命令参数
浅蓝=选项
紫色=目录
系统环境:CentOS 5.8 x86_64
主机 | ip |
master | 192.168.1.70 |
slave1 | 192.168.1.71 |
slave2 | 192.168.1.72 |
一、innotify安装
1、查看内核是否支持inotify(2.6.13以上版本支持):
如图所示表示支持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
检查
如图所示安装成功。
做好链接方便使用:
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检测脚本
- #!/bin/bash
- SRC=/web/wwwroot/
- INWT=/usr/local/bin/inotifywait
- host1=(192.168.1.71 192.168.1.72)
- user=webuser
- $INWT -mrq --timefmt '%Y/%m/%d %H:%M:%S' --format '%T %w%f%e' \
- -e close_write,delete,create,attrib,move $SRC \
- | while read files
- do
- for ((i=0;i<${#host1[@]};i++))
- do
- /usr/bin/rsync -vzrtopg --delete --progress $SRC [email protected]${host1[$i]}::web
- echo "${files} was rsynced ${host1[$i]}" >>/tmp/rsync.log 2>&1
- done
- done
将上述脚本(内容根据自己实际情况修改)保存为 rs.sh,赋予执行权限,并加入到开机启动中,这里不再啰嗦。
2、效果测试
在master上启动脚本
sh rs.sh
在master建立测试文件
master上输出结果:
查看slave结果:
如图所示,测试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
5:inotifywait相关参数:
inotifywait是一个监控等待事件,可以配合shell脚本使用它。
-m ,即“--monitor”,表示始终保持事件监听状态;
-r ,即“--recursive”,表示递归查询目录;
-q ,即“--quiet”,表示打印出监控事件;
-e ,即“--event”,通过此参数可以指定要监控的事件,常见的事件有modify,delete,create和attrib等。
转载于:https://blog.51cto.com/linux521/892564