rsync+inotify实时同步

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rsync+inotify实时同步相关的知识,希望对你有一定的参考价值。

 

Rsync的企业工作场景说明

利用rsync+inotify 实现远程实时同步配置与文件并发测试

Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。

使用 inotify 很简单:创建一个文件描述符,附加一个或多个监视器(一个监视器 是一个路径和一组事件),然后使用 read 方法从描述符获取事件。read 并不会用光整个周期,它在事件发生之前是被阻塞的。

可以监控文件系统中添加,删除,修改,移动等各种事件

 

inotify逻辑

 

技术分享


                              环境:需要二台服务器,inotify安装在master的服务器

master192.168.0.110  255.255.255.0

slave192.168.0.111     255.255.255.0

 

操作步骤:

1.rsync服务端的相关设置

2.检查系统的内核,查看是否有匹配的文件

3.master上下载inotify的源码包

4.手动测试创建文件

5.手动测试删除文件

6.编写一个实时监控的脚本

 

1. rsync服务端的相关设置

新建rsync用户及模块目录并更改其用户组

useradd lizheng -s /sbin/nologin    #添加用户

greplizheng /etc/passwd     #查看用户

mkdir/risehome/                 #创建rsync工作模式的模块目录

chownlizheng.lizheng /risehome/          #更改模块目录的用户组

创建rsyncd.conf文件

vi/etc/rsyncd.conf

 

写入内容

#server configure start

port = 873

uid = root
gid = root
use chroot = no
max connections = 300

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/run/rsyncd.log

 [risehome]                                 #设置模块名

path = /risehome/

ignore errors

read only = false

list = false

hosts allow = *                  #所有网段

hosts deny = 0.0.0.0/32

auth users = lizheng   #用户

secrets file = /etc/rsync.password

#rsync_config___________________end

注意点:rsync--daemon 客户端开启873端口

rsync服务端(slave)

vi /etc/rsync.password

lizheng:lizheng123

更改权限

chmod 600/etc/rsync.password

查看rsync是否开启 

netstat -lnpe |grep rsync

rsync服务端(master)

vi /etc/rsync.password

lizheng123

更改权限

chmod 600/etc/rsync.password

加入开机启动
echo"/usr/bin/rsync --daemon" >> /etc/rc.local

2.查看系统是否可以安装inotify服务,内核要在2.6.1版本以上

查看master是否有下列三个选项

ls -l/proc/sys/fs/inotify


技术分享

查看slave是否有下列三个选项

技术分享

事件相关参数的大小  /proc/sys/fs/inotify/


技术分享


可直接修改/etc/sysctl.conf配置文件,将管理队列设为32768,实例数设为1024,监控数设为9000000(建议大于监控目标的总文件数)。

[[email protected]~]#vim/etc/sysctl.conf#以文件最后,添加以下内容

fs.inotify.max_queued_events=32768

fs.inotify.max_user_instances=1024

fs.inotify.max_user_watches=90000000



sysctl -p#使修改后的sysctl.conf文件生效

查看是否修改成功:

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

3.master上下载源码安装包

进入源码包存放的路径

mkdir -p/home/lizheng/tools

cd/home/lizheng/tools

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

tar zxvfinotify-tools-3.14.tar.gz

进入inotify目录并编译安装(./congifure --help可以查看参数)

cdinotify-tools-3.14

./configure--prefix=/usr/local/inotify-tools-3.14/   (指定安装路径)

make&& make install

ln-s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools #给安装路径做一个软链接,去掉版本号

ll/usr/local/inotify-tools  #查看文件

4.关于create的测试

 

  1.新建一个backup的文件

    mkdir /backup

执行命令

/usr/local/inotify-tools-3.14/bin/inotifywait-mrq --timefmt ‘%d/%m/%y  %H:%M‘  --format ‘%T %w%f‘ -e create/backup

 

5.关于delete的测试

/usr/local/inotify-tools-3.14/bin/inotifywait-mrq --timefmt ‘%d/%m/%y  %H:%M‘  --format ‘%T %w%f‘ -e delete/backup

                                                                

6.编写脚本

/server/scripts/路径下新建一个inotify.sh的脚本

mkdir -p/server/scripts

vim/server/scripts/inotify.sh

脚本内容

#!/bin/bash

#written bylizheng

#about inotofy

#para

host01=192.168.0.111     #定义的变量,slaveip地址 

src=/backup/                    #master数据的目录

dst=backup                        #rsync中定义的模块

user=lizheng          #rsync中设置的用户

rsync_passfile=/etc/rsync.password             #密码文件

inotify_home=/usr/local/inotify-tools-3.14/   #inotify的路径

#judge

if  [ ! -e"$src" ] \

  ||  [! -e "${rsync_passfile}" ]\

  ||  [! -e "${inotify_home}/bin/inotifywait" ]\

  ||  [! -e "/usr/bin/rsync" ];

then

  echo"Check File and Folder"

  exit 9

fi

 

${inotify_home}/bin/inotifywait-mrq --timefmt ‘%d/%m/%y  %H:%M‘  --format ‘%T %w%f‘ -eclose_write,create,attrib,delete $src \

| while read file

          do

      # rsync -avzP --delete --timeout=100--password-file=${rsync_passfile} $src [email protected]$host01::$dst > /dev/null2>&1

 

执行后台运行

sh inotify.sh&

查看后台执行

ps -ef |grep ino

关于错误

@ERROR: authfailed on module test
rsync error: error starting client-server protocol (code 5) at main.c(1503)[receiver=3.0.6]

检查服务器A存储密码文件和服务器B密码文件。
服务器A密码文件/etc/rsyncd.secrets 格式为: username:password
服务器B密码文件password.rsync 格式为:password

文件权限错误

 

password filemust not be other-accessible
continuing without password file
Password:
@ERROR: auth failed on module ***
rsync error: error starting client-server protocol (code 5) at main.c(1503)[receiver=3.0.6]

检查服务器A存储密码文件和服务器B密码文件。
服务器A密码文件 /etc/rsyncd.secrets权限为600 chmod 600/etc/rsyncd.secrets

服务器B密码文件 password.rsync 权限为600:chmod 600 password.rsync

 

附录:关于参数

inotifywait命令参数

-m是要持续监视状态。

-r递归查询目录。

-q打印监控事件的信息。

-e指定要监视的事件列表。

--timefmt是指定时间的输出格式。

--format指定文件变化的详细信息。

--excludei<pattern>:排除文件和目录时,不区分大小写

 

可监听的事件

-e|--event<event1>....

 

事件

描述

access

访问,读取文件。

modify

修改,文件内容被修改。

attrib

属性,文件元数据被修改。

move

移动,对文件进行移动操作。

create

创建,生成新文件

open

打开,对文件进行打开操作。

close

关闭,对文件进行关闭操作。

delete

 

删除,文件被删除。

 

 

以上是关于rsync+inotify实时同步的主要内容,如果未能解决你的问题,请参考以下文章

Rsync下行同步+inotify实时同步介绍和部署

inotify+rsync实现实时同步

rsync+inotify实时同步

rsync下行同步rsync+inotify实时同步(同步如饮水一样简单)

rsync+inotify实时同步

实时同步rsync+inotify