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属性写错了

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

rsync+inotify实现数据实时同步的更多相关文章

  1. CentOS 6.5 rsync+inotify实现数据实时同步备份

    CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync    remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...

  2. sersync基于rsync+inotify实现数据实时同步

    一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192. ...

  3. 实战:rsync+inotify实现数据实时同步

    Linux 内核从 2.6.13 版本开始提供了 inotify 通知接口,用来监控文件系统的各种变化情况,如文件存取.删除.移动等.利用这一机制,可以非常方便地实现文件异动告警.增量备份,并针对目录 ...

  4. rsync+inotify磁盘数据实时同步

    一.rsync+inotify主服务器部署 1.1安装rsync [root@nginx ~]# cd /usr/src/ [root@nginx src]# tar zxvf rsync-3.0.9 ...

  5. 利用rsync+inotify实现数据实时同步脚本文件

    将代码放在Server端,实现其它web服务器同步.首先创建rsync.shell,rsync.shell代码如下: #!/bin/bash host1=133.96.7.100 host2=133. ...

  6. 通过rsync+inotify实现数据实时备份同步

    一.环境描述 测试环境 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 环境描述: 主服务器172.26.7.50 ,从 ...

  7. Linux下Rsync+sersync实现数据实时同步

    inotify 的同步备份机制有着缺点,于是看了sersync同步,弥补了rsync的缺点.以下转自:http://www.osyunwei.com/archives/7447.html 前言: 一. ...

  8. Rsync+sersync实现数据实时同步

    前言: 一.为什么要用Rsync+sersync架构? 1.sersync是基于Inotify开发的,类似于Inotify-tools的工具 2.sersync可以记录下被监听目录中发生变化的(包括增 ...

  9. Linux下Rsync+Inotify-tools实现数据实时同步

    Linux下Rsync+Inotify-tools实现数据实时同步 注意:下面的三个案例都是rsync 每次都是全量的同步(这就坑爹了),而且 file列表是循环形式触发rsync ,等于有10个文件 ...

随机推荐

  1. try or install Ubuntu on MeegoPad T01

    Ref: Install Ubuntu on Meego Pad T01 with a Live ISO Image MeegoPad T01 has recently been shown to b ...

  2. 【HQL】窗口函数

    LAG LAG(col,n,DEFAULT) :与lead相反,用于统计窗口内往上第n行值.第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候, ...

  3. 17.纯 CSS 创作炫酷的同心矩形旋转动画

    原文地址:https://segmentfault.com/a/1190000014807564 感想: 这个特效不难,但是这想法可能想不到,哈哈,怎么又废了. HTML代码: <div cla ...

  4. Windows 环境变量立即生效

    先进环境变量 保存一个份PATH值. 万一改错就不好了 cmd窗口中 set path=XXXXXXXX

  5. 页面中onclick事件引号问题

    第一种:html中onclick调用事件 <p id="txt" onclick="changeSize()">加括弧的changeSize()&l ...

  6. Xcode 8 注释快捷键失效

    sudo /usr/libexec/xpccachectl 重启

  7. Delphi 修改本地日期和时间

    procedure TForm1.ModifySysdate(D: Double); var systemtime:Tsystemtime; DateTime:TDateTime; begin Set ...

  8. python环境和工具

    1.版本问题 python2.X和python3.X是不兼容,所以选择如果选择了2.X版本,那么为了避免兼容性的问题,在以后使用其他python库或者工具时,也需要选择相对应的版本. 下载地址:htt ...

  9. java script删除数组的方法集合(转载)

    一.清空数组 var ary = [1,2,3,4]; ary.splice(0,ary.length);//清空数组 console.log(ary); // 输出 [],空数组,即被清空了 二.删 ...

  10. VBS处理AD帐号密码到期提醒的脚本[zt]

    原文:https://gallery.technet.microsoft.com/scriptcenter/f7f5f7ed-14ee-4d0e-81c2-7d95ce7e08f5 '======== ...