首页 软件

Inotify+rsync主机之间数据同步

2021-09-01 21:49

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

(1) 增量数据同步,传输效率搞;   

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

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

(4) 支持加密传输

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

实验案例:

主机:192.168.1.10 CentOS 6.8 x86_64

备份机:192.168.1.20 CentOS 6.8 x86_64

监控主机(192.168.1.10)的/data/web目录,当该目录内容有变化,立即将其内容同步到备份机(192.168.1.20)的/data/www目录。

注意:实验前请先关闭两台主机的SeLinux和iptables。

备份机:192.168.1.20

系统默认已安装rsync,不需手动安装,如果没有安装,请先进行rsync的安装。但没有提供配置文件,需手动建立。

# 查询主机是否安装rsync软件,若主机没有安装rsync软件,则使用yum进行安装。

[root@localhost ~]# rpm -qa | grep rsync

[root@localhost ~]# yum -y install rsync

# 编辑rsync的配置文件/etc/rsyncd.conf

[root@localhost ~]# vim /etc/rsyncd.conf

#/etc/rsyncd: configuration file for rsync daemon mode

#See rsyncd.conf man page for more options.

#configuration example:

uid = root

gid = root

port = 38000  # rsyncd服务监听端口,默认为873,防火墙需要放行

use chroot = yes

max connections =10

strict modes = yes

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

[www]

path = /data/www/

comment = rsync files

ignore errors

read only = no

write only = no

host allow = 192.168.1.10

host deny = *

list = false

uid = root

gid = root

auth user = rsync

secrets file = /etc/server.passwd

编辑好配置文件并保存后,添加文件同步用户和设置同步用户密码:

[root@localhost ~]# useradd -M -s /sbin/nologin rsync

[root@localhost ~]# echo 123456 | passwd rsync --stdin

# 创建密码文件(文件格式:user:password)

[root@localhost ~]# vim /etc/server.passwd

rsync:123456

# 修改密码文件权限

[root@localhost ~]# chmod 600 /etc/server.passwd

# 启动rsync守护进程

[root@localhost ~]# /usr/bin/rsync --daemon

#将rsync守护进程加入系统自启动文件

[root@localhost ~]# echo "/usr/local/bin/rsync --daemon" >> /etc/rc.local

主机:192.168.1.10

# 安装inotify-tools软件包

[root@localhost ~]# yum install inotify-tools -y

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

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

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

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

-e, --event 制定要监控的事件,如modify、delete、create、access、attrib等inotifywatch收集被监控的文件系统统计数据。

编写shell脚本来执行inotifywait命令内容同步监控

[root@localhost ~]# vim /usr/local/sbin/inotifyrsync.sh

#!/bin/bash

host=192.168.1.20

src=/data/web/

user=rsync

dst=www  # 此处的目标目录为目标备份机/etc/rsyncd.conf配置文件中定义的别名,对应的具体目录为path

logdir=/var/log/rsync

/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 -zrtopg --delete --progress --password-file=/etc/server.passwd $src $user@$host::$dst

echo "${files} was rsynced" >>$logdir/rsync_$(date +%F).log 2>&1

done

[ -d $logdir ] && find $logdir -type f -mtime +30 -delete

# 创建rsyncd服务同步日志目录

[root@localhost ~]# mkdir -p /var/log/rsync

#赋予inotifywait.sh监控脚本执行权限,然后放入后台运行

[root@localhost ~]# chmod 755 /usr/local/sbin/inotifyrsync.sh

[root@localhost ~]# /usr/local/sbin/inotifyrsync.sh &

将inotifywait.sh监控脚本加入到服务器的定时任务中:

[root@localhost ~]# crontab -e

*/1 *  * * * /usr/local/sbin/inotifyrsync.sh

问题:

在使用 inotify 监控目录和文件时  inotify报如下错误:

rsync

cat /proc/sys/fs/inotify/max_user_watches 一下这个文件,默认值是8192。

然后:
      echo 8192000 >> /proc/sys/fs/inotify/max_user_watches
      即可~

在inotify 的时候经常遇到 建议写入/etc/sysctl.conf
      fs.inotify.max_user_watches=8192000

sysctl -p


返回首页
返回顶部