当前位置: 首页 > 工具软件 > inotify-sync > 使用案例 >

rsync+inotify实现同步

平航
2023-12-01

一、资源规划

192.168.10.101  rsync服务器

192.168.10.104  rsync服务器

192.168.10.106  rsync服务器

192.168.10.107  发布机,安装inotify-tool工具

 

二、所有设备上卸载rsync低版本安装包

查看安装包

rpm -qf/usr/bin/rsync

返回结果:

rsync-2.6.8-3.1

卸载安装包

rpm -ersync-2.6.8-3.1

 

 

三、所有设备上安装高版本的rsync

 tar -zxvf rsync-3.0.7.tar.gz

 cd rsync-3.0.7

 ./configure

 make

 make install

 

 

查看rsync安装情况

which rsync

返回结果:

/usr/local/bin/rsync

查看版本

rsync --version

 

返回结果:

rsync version 3.0.7  protocol version 30

Copyright (C) 1996-2009 by Andrew Tridgell,Wayne Davison, and others.

Web site: http://rsync.samba.org/

Capabilities:

   64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,

   socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,

   append, ACLs, xattrs, iconv, no symtimes

 

rsync comes with ABSOLUTELY NOWARRANTY.  This is free software, and you

are welcome to redistribute it undercertain conditions.  See the GNU

General Public Licence for details.

[govtk_chinavvv@tkweb ~]$

 

备注:看看是否是新版本了,如果提示找不到该命令,那是shell缓存的原因,重新登录一遍应该就好了

 

 

四、配置rsync服务器

编辑三台rsync服务器的/etc/hosts文件,添加如下内容:

vi /etc/hosts

192.168.10.107fabu

 

修改192.168.10.106 rsync服务器端配置文件

vi /etc/rsyncd.conf

uid = nobody

 

gid = nobody

 

use chroot = no

#模块的最大并发连接数量,以保护服务器,超过设置值,连接请求将被暂时限制

max connections =10

#是否检查口令文件的权限,yes为检查口令文件的权限。如果设置为yes,密码文件的权限必须为root用户权限

strict modes = yes

 

log file = /var/log/rsyncd.log

 

pid file = /var/run/rsyncd.pid

 

lock file = /var/run/rsync.lock

#定义一个模块的开始,nginx就是对应的模块名称。模块名称可以自定义

[nginx]

#需要备份的文件目录

path =/opt/webapps

 

comment = nginxfile

#忽略一些无关的IO错误

#ignore errors

#设置为no,表示客户端可以上传。如果设置为yes,表示只读

read only = no

#设置为no,表示客户端可以下载。

write only = no

#可以连接rsync服务器的主机

hosts allow =192.168.10.107

#禁止连接rsync服务器的主机

hosts deny = *

 

list = false

 

 

uid = root

 

gid = root

 

#定义可以连接该模块的用户名,该用户名和linux系统用户没有任何的关系。

auth users =backup1

#密码文件的存放路径和名称,可自定义

secrets file =/etc/rsync.pass

 

修改rsync配置文件权限

 

chmod 600/etc/rsyncd.conf

 

 

192.168.10.106 rsync服务器创建用户认证文件

 

touch/etc/rsync.pass

#修改密码文件,路径和名称与配置文件中的一致。用户名与配置文件中的authusers设定值#一致,密码可以随便定义

vi  /etc/rsync.pass

backup1:sginfo123456

修改此文件权限

chmod 600/etc/rsync.pass

 

 

修改192.168.10.101 rsync服务器端配置文件

 

vi/etc/rsyncd.conf

 

uid = nobody

 

gid = nobody

 

use chroot = no

 

max connections = 10

 

strict modes = yes

 

log file = /var/log/rsyncd.log

 

pid file = /var/run/rsyncd.pid

 

lock file = /var/run/rsync.lock

 

[tomcat1]

 

path = /opt/webapps

 

comment = tomcat1 file

 

#ignore errors

 

read only = no

 

write only = no

 

hosts allow = 192.168.1.107

 

hosts deny = *

 

list = false

 

 

uid = root

 

gid = root

 

 

auth users = backup2

 

secrets file = /etc/rsync.pass

 

 

修改rsync配置文件权限

 

chmod 600 /etc/rsyncd.conf

 

192.168.10.101 rsync服务器创建用户认证文件

 

touch/etc/rsync.pass

vi  /etc/rsync.pass

backup2:sginfo123456

修改此文件权限

chmod 600/etc/rsync.pass

 

修改192.168.10.104rsync服务器端配置文件

 

vi/etc/rsyncd.conf

 

uid = nobody

 

gid = nobody

 

use chroot = no

 

max connections = 10

 

strict modes = yes

 

log file = /var/log/rsyncd.log

 

pid file = /var/run/rsyncd.pid

 

lock file = /var/run/rsync.lock

 

[tomcat2]

 

path = /opt/webapps

 

comment = tomcat2 file

 

#ignore errors

 

read only = no

 

write only = no

 

hosts allow = 192.168.1.107

 

hosts deny = *

 

list = false

 

 

uid = root

 

gid = root

 

 

auth users = backup3

 

secrets file = /etc/rsync.pass

 

 

修改rsync配置文件权限

 

chmod 600 /etc/rsyncd.conf

 

192.168.10.104 rsync服务器创建用户认证文件

 

touch/etc/rsync.pass

vi  /etc/rsync.pass

backup3:sginfo123456

修改此文件权限

chmod 600/etc/rsync.pass

 

 

 

 

 

 

 

 

四、启动rsync服务

分别启动192.168.10.106,192.168.10.101,192.168.10.104三台服务器上rsync服务,执行以下命令

 

/usr/bin/rsync--daemon --config=/etc/rsyncd.conf

查看日志文件

more/var/log/rsync.log

 

添加开机自启动

分别编辑192.168.10.101,192.168.10.104,192.168.10.106的开机自启动文件

vi/etc/rc.d/rc.local

结尾添加如下内容:

su - root -c"/usr/bin/rsync --daemon --config=/etc/rsyncd.conf" 

 

 

五、在发布机上安装inotify-tools

 

查看rsync是否安装

rsync --version

 

查看linux内核版本,linux内核,确定版本在2.6.13以上

uname -r

 

安装inotify-tools

解压

tar -zxvf inotify-tools-3.14.tar.gz

 

cd inotify-tools-3.14

 

./configure --prefix=/opt/inotify

 

 

 

make&&make install

 

创建并编辑密码文件

touch /etc/rsync.pass

vi  /etc/rsync.pass

sginfo123456

备注:密码要与以上三台服务器上密码文件的密码一致

修改此文件权限

chmod 600/etc/rsync.pass

 

 

创建inotifyrsync.sh脚本文件

 

touch/opt/inotifyrsync.sh

 

添加以下内容:

#!/bin/bash

 

host1=192.168.10.106

host2=192.168.10.101

host3=192.168.10.104

 

#/opt/webapps/ROOT/表示直接备份ROOT目录下的所有文件,/opt/webapps/ROOT表示备份#的是ROOT目录

src=/opt/webapps/ROOT

dst1=nginx

dst2=tomcat1

dst3=tomcat2

 

user1=backup1

user2=backup2

user3=backup3

 

 

#有时会遇到这样的情况:向inotify监控的目录(这里是/web/wwwroot/)写入一个很大文件#时,由于写入这个大文件需要一段时间,

#此时inotify就会持续不停的输出该文件被更新的信息, 这样就会持续不停的触发rsync去执行同步操作,占用了大量系统资源,那

#么针对这种情况,最理想的做法是等待文件写完后再去触发rsync同步。 在这种情况下,可以修改inotify的监控事件,

#即:“-eclose_write,delete,create,attrib”。

/opt/inotify/bin/inotifywait  -mrq --timefmt '%d/%m/%y %H:%M' --format '%T%w%f%e' -e close_write,delete,create,attrib $src | while read files

do

#--exclude="classes"表示排除名为classes的文件夹备份,为相对路径,注意一定不要写成绝对路径

/usr/bin/rsync -vzrtopg --delete --progress--exclude="classes" --password-file=/etc/rsync.pass  $src $user1@$host1::$dst1

/usr/bin/rsync -vzrtopg --delete --progress--exclude="classes" --password-file=/etc/rsync.pass  $src $user2@$host2::$dst2

/usr/bin/rsync -vzrtopg --delete --progress--exclude="classes" --password-file=/etc/rsync.pass  $src $user3@$host3::$dst3

echo "${files} was rsynced">>/tmp/rsync.log 2>&1

done

 

 

修改inotifyrsync.sh的权限

 

chmod 755 inotifyrsync.sh

 

六、执行inotifyrsync.sh脚本

登录192.168.10.107

/opt/inotifyrsync.sh &

 

exit

 

查看日志情况

more/tmp/rsync.log

 

查看进程运行情况

[root@chinavvv2~]# ps -ef|grep -v grep|grep rsync

root      9161 8651  0 14:12 pts/2    00:00:00 /bin/bash ./inotifyrsync.sh

root      9163 9161  0 14:12 pts/2    00:00:00 /bin/bash ./inotifyrsync.sh

添加inotify脚本开机自启动

vi/etc/rc.d/rc.local

结尾添加如下内容:

su - root -c"/opt/inotifyrsync.sh &"

 

 

 

八、inotify相关参数调整

/proc/sys/fs/inotify/max_user_watches默认值: 8192指定了每个inotifyinstance相关联的watches的上限,也就是说每个inotify实例可监控的最大目录数量。如果监控的文件数目巨大,需要根据实际情况适当增加此值的大小,例如:

 

echo30000 > /proc/sys/fs/inotify/max_user_watches

 

 

 

 

 

 

 

九、当访问192.168.10.101后台时,实现自动切换到192.168.10.107后台

192.168.10.107上设置

发布机上安装tomcat,修改server文件:

将8080端口修改为80端口,将appBase="webapps"修改为appBase="/opt/webapps"

修改ROOT程序三个配置文件

启动tomcat

 

 

192.168.10.101上设置

上传index.html文件到192.168.10.101/opt/webapps/ROOT/sysadmin目录下

 

 

 

十、补充部分

重启rsync

ps -ef|grep -vgrep|grep rsync

root      2202    1  0 11:22 ?        00:00:00 /usr/local/bin/rsync --daemon--config=/etc/rsyncd.conf

[root@chinavvv4ROOT]# kill 2202

[root@chinavvv4ROOT]# /usr/bin/rsync --daemon --config=/etc/rsyncd.conf

 

 

重启inotifyrsync.sh脚本

[root@chinavvv2opt]# ps -ef|grep -v grep|grep rsync

root      2415 4349  0 11:26 pts/2    00:00:00 /bin/bash ./inotifyrsync.sh

root      2417 2415  0 11:26 pts/2    00:00:00 /bin/bash ./inotifyrsync.sh

[root@chinavvv2opt]# kill 2415

[root@chinavvv2opt]# kill 2417

[1]+  已终止              ./inotifyrsync.sh

[root@chinavvv2opt]# ./inotifyrsync.sh &

[1] 2591

 

 

 

十一、报错处理:

报错1:

rsync:getaddrinfo: host1 873: Temporary failure in name resolution

rsync error: errorin socket IO (code 10) at clientserver.c(122) [sender=3.0.7]

处理方法:

检查inotifyrsync.sh脚本文件

定位问题所在

$user1@host1::$dst1

修改为

$user1@$host1::$dst1

 

@ERROR: Unknownmodule 'web1'

 

 

 

报错2:

192.168.10.101/var/log/rsyncd.log日志报错,如下:

name lookup failedfor 192.168.10.107: Temporary failure in name resolution

 

处理方法:

登录rsync服务器

vi /etc/hosts

 

127.0.0.1   localhost localhost.localdomain

::1         localhost localhost.localdomain

192.168.10.107  fabu

 

重启192.168.10.101上的rsync服务

重启192.168.10.107上的inotifyrsync.sh

 

报错3:

192.168.10.104/var/log/rsyncd.log日志报错,如下:

rsync denied onmodule tomcat2 from unknown (192.168.10.107)

 

处理方法:

vi/etc/rsyncd.conf

 

hosts allow =192.168.1.107

修改为

hosts allow =192.168.10.107

重启192.168.10.104上的rsync服务

重启192.168.10.107上inotifyrsync.sh脚本

 类似资料: