rsync+inotify实现同步

一、资源规划

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脚本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值