1》rsync概述

rsync的优点与不足

rsync与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的       备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务      系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输;如果文件数量达到了百万甚至千万量级,扫描所有文件将        是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方      式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因                     rsync+inotify组合出现了;

2》inotify概述

1>认识inotify     

            Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持通过Inotify可以监控文件系统中添加、删除,修改、        移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。在上面章节中,我        们讲到,rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当       文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题;

     2>inotify安装,在WEB发布管理服务器安装即可,WEB节点无需安装

           # tar–xvf inotify-tools-3.14.tar.gz
      # ./configure
   # make&& make install
     # ll /usr/local/bin/inotifywa*
    -rwxr-xr-x 1 root root 44319 4月 6 18:51 /usr/local/bin/inotifywait
    -rwxr-xr-x 1 root root 41409 4月 6 18:51 /usr/local/bin/inotifywatch
    inotifywait用于等待文件或文件集上的一个特定事件,它可以监控任何文件和目录设置,并且可以递归地监控整个目录树;inotifywatch用        于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息;

3》企业案例WEB内容版本发布管理

     1>环境描述

          随着企业的业务增多,为了维持所有WEB层的WEB程序保持一致,发版本的通过一台内容服务器向外进行分布和辐射所有的更新的                WEB程序,

        模拟环境如下:
    WEB1 节点 IP:192.168.1.109
    WEB2节点内容发布Server IP:192.168.1.106
  2>
安装WEB1节点

    # yum–y install rsync
    # vim/etc/web1.pass
       gongda:123
    #chmod 600 /etc/web1.pass
    # mkdir /web1/wwwroot –p
 3>配置文件:
  # vim /etc/rsyncd.conf #此配置文件没有。需要重新编辑一个

           

           uid = nobody
      gid = nobody
   usechroot = no
     max connections = 10
     strict modes = yes
     pid file = /var/run/rsyncd.pid
     lock file = /var/run/rsync.lock
     log file = /var/log/rsyncd.log

    [web1]
    path = /web1/wwwroot/
    comment = web1 file
    ignore errors
    read only = no
    write only = no
    hosts allow = 192.168.1.106
    hosts deny = *
    list = false
    uid = root
    gid = root
    auth users =gongda
    secrets file = /etc/web1.pass

       4> 启动rsync服务
    # rsync --daemon

4》安装WEB2内容管理节点

  1> # yum –y install rsync
     yum -y install automake libtool

        同步的密码,注意此处只需要写密码,和web1.pass里面的密码要以致
    # vim /etc/server.pass
      
123
    #chmod 600 /etc/server.pass

         2> 编写一个启动脚本

    # vim opt/inotify-rsync.sh
    #!/bin/bash
    host1=192.168.1.109
    #======================
    src=/web/wwwroot/
    dst1=web1
    user1=gongda
    /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \|     while read files
    do
    /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user1@
    $host1::$dst1
    echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
    done

      启动脚本
  #cd /opt
  #chmod +x inotify-rsync.sh
  # nohup bash –x inotify-rsync.sh&

inotifywait


语法:
inotifywait [-hcmrq] [-e ] [-t ] [--format ] [--timefmt ] [ ... ]
参数:
-h,--help
输出帮助信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
--fromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-m, --monitor
接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。
-d, --daemon
跟–monitor一样,除了是在后台运行,需要指定–outfile把事情输出到一个文件。也意味着使用了
–syslog。
-o, --outfile
输出事情到一个文件而不是标准输出。
-s, --syslog
输出错误信息到系统日志
-r,--recursive
监视一个目录下的所有子目录。
-q,--quiet
指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
--exclude
正则匹配需要排除的文件,大小写敏感。
--excludei
正则匹配需要排除的文件,忽略大小写。
-t , --timeout
设置超时时间,如果为0,则无限期地执行下去。
-e , --event
指定监视的事件。
-c, –csv
输出csv格式。
--timefmt
指定时间格式,用于–format选项中的%T格式。
--format
指定输出格式。
%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定义的时间格式

inotifywatch



语法:
inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]
参数:
-h, –help
输出帮助信息
-v, –verbose
输出详细信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-z, –zero
输出表格的行和列,即使元素为空
–exclude
正则匹配需要排除的文件,大小写敏感。
–excludei
正则匹配需要排除的文件,忽略大小写。
-r, –recursive
监视一个目录下的所有子目录。
-t , –timeout
设置超时时间
-e , –event
只监听指定的事件。
-a , –ascending
以指定事件升序排列。
-d , –descending
以指定事件降序排列。


4》
常见错误问题一:  @ERROR: chroot failed

  rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
  原因:服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。

问题二:
  @ERROR: auth failed on module tee
  rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
  原因:服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。提供正确的用户名密码解                    决此问题。

问题三:
  @ERROR: Unknown module ‘tee_nonexists’
  rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
  原因:服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。

问题四:
  password file must not be other-accessible
       continuing without password file
  Password:
  原因:这是因为rsyncd.pwd rsyncd.secrets的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd

问题五:
  rsync: failed to connect to 218.107.243.2: No route to host (113)
  rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
  原因:对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。关闭防火墙,其实就是把tcpudp的873端口打开。
问题六:
  rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]
  原因:/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件。

问题七:
  rsync: chown "" failed: Invalid argument (22)
  原因:权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候)
问题八:
  @ERROR: daemon security issue -- contact admin
  rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
  原因:同步的目录里面有软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。掠过软连接文件。

5》相关测试:
  1>在服务端建立文件,客户端会自动产生:

           

          

         2>在服务端删除文件,客户端会自动删除:

              

                

         3>在服务端文件写入数据时,客户端文件自动同步:

               

               

  =================================================
注意:
1.两台主机都要将防火墙和SELINUX关闭;
2.资源发布器启动报错后,注意创建不存在的文件夹。
3.同步时的错误日志在/var/log文件夹下。 

Rsync+Inotify实现文件自动同步的更多相关文章

  1. Rsync+inotify实现文件实时同步#附shell脚本

    强烈推荐先仔细看此文 https://segmentfault.com/a/1190000002427568 实验环境 centos 7.3 vm2:192.168.221.128 同步服务器 vm1 ...

  2. rsync+inotify实现文件实时同步

    一.相关组件简介 1.rsync 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器 ...

  3. Rsync + inotify 实现文件实时同步

    Rsync 用来实现触发式的文件同步. Inotify-tools是一套组件,Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取.删除.移动等 ...

  4. Centos 6.5配置rsync+inotify实现文件实时同步

    1.安装rsync(两台机器执行相同的步骤)yum install gcc yum install rsyncd xinetd -y因为rsync是由xinetd启动的,所以需要修改一个配置vim / ...

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

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

  6. sersync+rsync实现服务器文件实时同步

    sersync+rsync实现服务器文件实时同步 一.为什么要用rsync+sersync架构? 1.sersync是基于inotify开发的,类似于inotify-tools的工具 2.sersyn ...

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

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

  8. Windows与Linux之间的文件自动同步

    问题:在工作中遇到一个场景,需要每天定时将Linux机器上的文件自动同步到Windows机器上. 解决方案有两个: 1.在Windows 机器上设置共享目录,然后在Linux机器上挂载共享 目录,每天 ...

  9. 12.2 中的Data Guard Standby 密码文件自动同步 (Doc ID 2307365.1)

    Data Guard Standby Automatic Password file Synchronization in 12.2 (Doc ID 2307365.1) APPLIES TO: Or ...

随机推荐

  1. MySQL的安装和基本管理

    ---恢复内容开始--- MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle(甲骨文)旗下公司.MySQL最流行的关系型数据库管理系统.在web应用方面MySQ ...

  2. C++中的运算符重载练习题

    1.RMB类 要求: 定义一个RMB类 Money,包含元.角.分三个数据成员,友元函数重载运算符‘+’(加)   和 ‘-’(减),实现货币的加减运算     例如:    请输入元.角 分:    ...

  3. 【转】详解Data Binding 通过几个简单示例深入了解WinForm数据绑定特性

    原文地址:http://www.cnblogs.com/lichence/archive/2012/02/17/2356001.html

  4. MYSQL用户权限管理GRANT使用

    http://yanue.net/post-97.html GRANT语句的语法: mysql> grant 权限1,权限2,-权限n on 数据库名称.表名称 to 用户名@用户地址 iden ...

  5. vertex shader(4)

    Swizzling and Masking 如果你使用输入.常量.临时寄存器作为源寄存器,你可以彼此独立地swizzle .x,.y,.z,.w值.如果你使用输出.临时寄存器作为目标寄存器,你可以把. ...

  6. redis 开发与运维 学习心得1

    主要是命令相关 第一章 初识Redis 1.redis是基于键值对的NoSQL. 2.redis的值可以是 string, hash, list, set, zset, bitmaps, hyperl ...

  7. ElasticSearch如何新增字段

    /index/type/_mapping  post { "properties": { "zy_renwu_pingjia": { "type&qu ...

  8. Java字符串与文件的互转操作

    Java中有时候需要读取一个文本类的文件,将其转换为字符串,然后做进一步处理.Java中没有现成的API方法.   一.字符串转换为文件 /** * 将字符串写入指定文件(当指定的父路径中文件夹不存在 ...

  9. CocoaPods安装/更新报错While executing gem ... (OpenSSL::SSL::SSLError)解决方案

    今天给新买的MacBook Pro更新CocoaPods,结果上来就报错,出师不利. HeinocdeMacBook-Pro:~ Heinoc$ sudo gem update --system Pa ...

  10. Anisotropic Specular Shader

    [Anisotropic Specular] Anisotropic Specular(各向异性反射)模拟表面凹槽的方向性.就像CD表面一样.CD的表面凹槽是有方向的. BlinnPhong中Spec ...