rsync
  rsync是linux系统下的数据镜像备份工具。支持远程同步,本地复制,或者与其他SSH、rsync主机同步。

优点:
  1)、可以镜像保存整个目录树和文件系统。保存源目录整个目录树和文件系统
  2)、备份迅速,使用同步算法,只比较变化,支持增量备份
  3)、与scp相比,rsync传输速度远在scp之上。

缺点:
  1)、同步数据,需要扫描所有文件进行对比,才进行差量传输。如果文件数量达到百万甚至千万级,扫描文件对比文件将非常耗时,降低了rsync效率。
  2)、rsync不能实时地区监测、同步数据。虽然可以通过守护进程方式触发同步,但两次动作间有时间差,导致数据不一致,无法应对出现故障时完全恢复数据。

inotify

  inotify 是Linux 的一个内核特性,是一种强大的、细粒度的、异步的文件系统事件监控机制。它可以监控文件系统中的添加、删除、修改、移 动等各种细微事件,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。

rsync+inotify
  rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了rsync同步数据的实时性问题。

  在使用 rsync 进行远程同步时,可以使用两种方式:远程 Shell 方式(建议使用 ssh,用户验证由 ssh 负责)和 C/S 方式(即客户连接远程 rsync 服务器,用户验证由 rsync 服务器负责)。

一. 环境
由于web服务器所提供的网站数据需要保持一致,但当服务器越来越多时,这些主机之间同步网站数据会很麻烦。
解决方案是把其中一个WEB服务器作为一个数据发布服务器,通过inotify机制实时监控网站数据,当数据发生变化后调用rsync命令同步数据到多个web服务器

  web1:ip为192.168.0.113,rsync服务端,需要配置/etc/rsyncd.conf配置文件
  web2:ip为192.168.0.114,rsync服务端,需要配置/etc/rsyncd.conf配置文件
  src :ip为192.168.0.120,作为数据源,不需要配置/etc/rsyncd.conf,但是需要安装inotify,实时监控数据变化

二. 在web服务器上部署rsync服务
  在多台web服务器上部署rsync服务,这些rsync服务提供客户端(数据源服务器)上传功能,这样我们只需要在192.168.0.120主机上修改数据,就可以实时推送数据到两台web服务器

2.1 前期工作:
  1. 在web1,web2,src服务器创建同步目录[自定义]:/data/www/image
  2. 关闭selinux
  3. 关闭防火墙(或开启防火墙策略,873端口)

2.2 WEB1,WEB2服务器上安装rsybc,创建同步目录如下
# yum -y install rsync      #centos7中默认已安装
# mkdir -p /data/www/image  #建立数据同步存放目录
--# chmod 770 /data/www     #修改权限,非root用户的话需要

2.2.1 WEB1的配置文件
[root@web01 ~]# cat /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
ignore errors
read only = no

transfer logging = yes
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock

[web1]
comment = web content
path = /data/www/image
auth users = tom                       # 授权用户,与密码文件里面的一致
secrets file = /etc/rsyncd.secrets     # 授权用户和密码文件路径
host allow = 192.168.0.120/32
list = false

2.2.2 WEB2的配置文件
WEB1的配置和WEB2基本一样[模块名不一样],为了容易区分,名称为[web2]
[root@web02 ~]# cat /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
ignore errors
read only = no

transfer logging = yes
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock

[web2]
comment = web content
path = /data/www/image
auth users = tom
secrets file = /etc/rsyncd.secrets
host allow = 192.168.0.120/32
list = false

2.2.3 然后(WEB1,WEB2)设置密码文件,防火墙
# echo "tom:123" > /etc/rsyncd.secrets
# chmod 600 /etc/rsyncd.secrets     # 权限必须是600
# rsync --daemon                    # 一定记得要开启rsync
# echo "rsync --daemon" >> /etc/rc.local
# firewall-cmd --permanent --add-port=873/tcp    #rsync默认端口是873,设置防火墙永久允许
# firewall-cmd --reload

三. 配置数据源发布服务器(192.168.0.120)
3.1. 安装相应软件
# mkdir -p /data/www/image            # 创建同步目录,我这里为了方便,路径与web服务器一样了
# yum -y install rsync
# rsync --daemon                      # 开启rsync,无需配置配置文件,如果启动提示没有配置文件,直接创建一个空文件即可
# yum -y install automake libtool     # 安装编译安装软件所需工具
# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

解压后进入inotify-tools-3.14目录,执行如下安装
# ./configure --prefix=/usr/local/inotify     # 默认安装路径是/usr/local,如果想改变路径可在后面加参数 --prefix 路径名
# make && make install

3.2. 设置密码文件
# echo "123" > /etc/rsyncd.secrets            # 名字自定义,与inotify脚本一致,123为rsync服务端配置的用户名为tom的密码,不需要用户名
# chmod 600 /etc/rsyncd.secrets

3.3. 编写监控脚本
# cat /usr/local/inotify/notify_rsync.sh
#!/bin/bash
export PATH=/bin:/usr/bin:/usr/local/bin:/usr/local/inotify/bin
SRC=/data/www/image    # 设置修改数据的目录
DEST1=web1             # web1的模块名,在web1服务rsyncd.conf文件配置
DEST2=web2             # web2的模块名

Client1=192.168.0.113
Client2=192.168.0.114
User=tom

Passfile=/etc/rsyncd.secrets
[ ! -e $Passfile ] && exit 2
#wait for change
inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w%f %e' \
--event modify,create,move,delete,attrib $SRC | while read line
do
  echo "$line" > /var/log/inotify_web 2>&1
  #同步数据到web1,rsync -avz /data/www/ tom@192.168.0.113::web1,web1为web1 rsync配置文件里面定义显示的名称
  rsync -avz --delete --progress --password-file=$Passfile $SRC ${User}@$Client1::$DEST1 >> /var/log/sync_web1 2>&1
  #同步数据到web2
  rsync -avz --delete --progress --password-file=$Passfile $SRC ${User}@$Client2::$DEST2 >> /var/log/sync_web2 2>&1
done &

--然后执行此脚本 sh notify_rsync.sh,之后在/web_data/目录下的操作就可同步到web1和web2的相应同步目录中了
# nohup sh /usr/local/inotify/notify_rsync.sh &       # 后台挂起执行

--加到rc.local里让其开头自动启动
# echo "nohup sh /usr/local/inotify/notify_rsync.sh &" >> /etc/rc.local

-------------------------------------------------------------------------------------------
报错:
@ERROR: Unknown module 'web1'
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]

原因:
rsyncd.conf中的对应项目的hosts allow属性写错了

-------------------------------------------------------------------------------------------

最新文章

  1. IOS第四天-新浪微博 -存储优化OAuth授权账号信息,下拉刷新,字典转模型
  2. Python【8】-分析json文件
  3. (转载)编写高效的jQuery代码
  4. ThreadGroup分析
  5. Azure中的分布式1——多实例
  6. Malformed network data
  7. Fireworks Extension —— AutoSlice 介绍
  8. 一个高效过滤非UTF8字符的C函数(也可用来判断是否utf8)
  9. angular路由操作
  10. Apex 单元测试辅助函数简介
  11. 1.let命令总结
  12. Ubuntu下使用Windows应用程序集锦
  13. PHP 从数组中删除指定元素
  14. 微信企业号OAuth2.0验证接口来获取成员的身份信息
  15. js 监听浏览器刷新还是关闭事件 - 转
  16. Could not open Selected VM debug port (8700) (转)
  17. mfc 友元类
  18. spring 事务传播行为实例分析
  19. ngingx安装错误 ./configure: error: the HTTP rewrite module requires the PCRE library.
  20. ZooKeeper 集群的安装、配置---Dubbo 注册中心

热门文章

  1. spark 实现TOP N
  2. 浏览器和对象的dom属性
  3. mongo admin 客户端管理工具安装
  4. JS 相等判断 / 类型判断
  5. 试用bus hound来分析STM32CubeMX来生成USB_HID_Mouse工程
  6. psutil模块
  7. UI5-学习篇-12-Eclipse同步ABAP服务器UI5应用
  8. creator.d.ts 的错误
  9. linux 一个读写锁的异常导致的故障
  10. VMware安装RHEL5.5后修改分辨率设置