Rsync+Inotify实现文件自动同步
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实现文件自动同步的更多相关文章
- Rsync+inotify实现文件实时同步#附shell脚本
		强烈推荐先仔细看此文 https://segmentfault.com/a/1190000002427568 实验环境 centos 7.3 vm2:192.168.221.128 同步服务器 vm1 ... 
- rsync+inotify实现文件实时同步
		一.相关组件简介 1.rsync 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器 ... 
- Rsync + inotify 实现文件实时同步
		Rsync 用来实现触发式的文件同步. Inotify-tools是一套组件,Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取.删除.移动等 ... 
- Centos 6.5配置rsync+inotify实现文件实时同步
		1.安装rsync(两台机器执行相同的步骤)yum install gcc yum install rsyncd xinetd -y因为rsync是由xinetd启动的,所以需要修改一个配置vim / ... 
- CentOS 6.5 rsync+inotify实现数据实时同步备份
		CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ... 
- sersync+rsync实现服务器文件实时同步
		sersync+rsync实现服务器文件实时同步 一.为什么要用rsync+sersync架构? 1.sersync是基于inotify开发的,类似于inotify-tools的工具 2.sersyn ... 
- sersync基于rsync+inotify实现数据实时同步
		一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192. ... 
- Windows与Linux之间的文件自动同步
		问题:在工作中遇到一个场景,需要每天定时将Linux机器上的文件自动同步到Windows机器上. 解决方案有两个: 1.在Windows 机器上设置共享目录,然后在Linux机器上挂载共享 目录,每天 ... 
- 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 ... 
随机推荐
- C# 接口(Interface)
			接口定义了所有类继承接口时应遵循的语法合同.接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分. 口定义了属性.方法和事件,这些都是接 ... 
- sysbench基准测试(2)——oltp.lua测试
			前面知道sysbench基准测试的主要步骤为:prepare(准备数据集)→ run(运行测试)→ cleanup(清除数据集) 这一节介绍oltp.lua测试. oltp基准测试模拟了一个简单的事物 ... 
- nrm操作
			nrm操作 nrm use cnpm // 选择镜像nrm ls //查看镜像 
- leetcode334
			public class Solution { public bool IncreasingTriplet(int[] nums) { var len = nums.Length; ) { retur ... 
- 「小程序JAVA实战」小程序注册界面的开发(29)
			转自:https://idig8.com/2018/08/27/xiaochengxujavashizhanxiaochengxuzhucejiemiandekaifa29/ 小程序基本所有的常用组件 ... 
- 跟着太白老师学python day10  函数嵌套, global , nonlocal
			函数嵌套: 第一种嵌套方法 def func(): count = 123 def inner(): print(count) inner() func() 第二种嵌套方法 count = 123 d ... 
- linux系统构架 - LB集群之LVS的NAT
			1.环境说明 三台服务器,一台叫dir,两台叫rs1和rs2 (director 和 real server) dir外网ip:192.168.192.129 内网ip:192.168.1.114 ... 
- JS比较两个数组是否相等 是否拥有相同元素
			Javascript怎么比较两个数组是否相同?JS怎么比较两个数组是否有完全相同的元素?Javascript不能直接用==或者===来判断两个数组是否相等,无论是相等还是全等都不行,以下两行JS代码都 ... 
- Python面向对象相关知识1
			1. python是动态的语言,这样在使用类的时候,类的属性就可以随意的添加,但是这样在实际开发中有一定的缺陷,所以,可以在类中定义一个特殊的__init__()方法,当创建实例时,__init__( ... 
- Elasticsearch-PHP 索引操作
			索引操作 本节通过客户端来介绍一下索引API的各种操作.索引操作包含任何管理索引本身(例如,创建索引,删除索引,更改映射等等). 我们通过一些常见的操作的代码片段来介绍,然后在表格中列出剩下的方法.R ... 
