一.介绍

1.1 rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

1.2 Inotify一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化

1.3 inotify+rsync结合,可以做到远程数据的实时同步,以下实验使用rsync客户端+inotify实时将数据同步到rsync服务端

二.环境准备

2.1 系统:CentOS6.5

rsync客户端:192.168.55.229

rsync服务端:192.168.55.219

2.2 rsync和inotify安装:

 # yum install rsync# yum install inotify-tools

三.rsync服务器配置

3.1 编辑rsync服务端配置文件

# vim /etc/rsyncd.conf
log file = /var/log/rsyncd.log
pid file = /usr/local/rsync/var/rsyncd.pid
lock file = /usr/local/rsync/var/rsyncd.lock
secrets file = /usr/local/rsync/etc/rsyncd.pas
read only = no
hosts allow = 192.168.55.0/24
list = yes
uid = nobody
gid = nobody
use chroot = no
max connections = 4
[bak]                  //模块
path = /bak              //模块目录
comment = nfs bak          //描述信息
auth users = bak           //rsync同步需要的认证用户

3.2 rsync服务器创建密码文件

# vim rsyncd.pas
bak:338912           //格式为用户名:密码,文件权限为600

3.3 rsync服务启动

# /usr/bin/rsync --daemon --config=/etc/rsyncd.conf

四.rsync客户端配置

4.1 编辑rsync客户端同步需要的密码文件

# vim /etc/rsync.pas
338912              //rsync客户端只需要认证用户的密码,文件权限为600

4.2 命令行验证rysnc客户端到rsync服务端同步功能

# rsync -avzc  --progress --delete --password-file=/etc/rsync.pas  /tmp/test/  bak@192.168.55.219::bak
sending incremental file list
./
test/
sent 223 bytes  received 15 bytes  476.00 bytes/sec
total size is 394699  speedup is 1658.40

:如果有“failed: Permission denied (13)”这种错误,需要给与服务端配置文件中用户nobody对模块所在目录有写权限

4.3 使用inotify+rsync脚本实现文件的实时检测并同步

脚本内容如下:

#!/bin/bash
src=/tmp/test/
des=bak
rsync_passwd_file=/etc/rsync.pas
ip1=192.168.55.219
user=bak
cd ${src}
/usr/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file
doINO_EVENT=$(echo $file | awk '{print $1}')      # 把inotify输出切割 把事件类型部分赋值给INO_EVENTINO_FILE=$(echo $file | awk '{print $2}')       # 把inotify输出切割 把文件路径部分赋值给INO_FILEecho "-------------------------------$(date)------------------------------------"echo $file#增加、修改、写入完成、移动进事件#增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]];thenecho 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}fi#删除、移动出事件if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]];thenecho 'DELETE or MOVED_FROM'rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}fi#修改属性事件 指 touch chgrp chmod chown等操作if [[ $INO_EVENT =~ 'ATTRIB' ]]thenecho 'ATTRIB'if [ ! -d "$INO_FILE" ]                 # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带>
更新此目录。thenrsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}fifi
done

:为做到实时同步,就必须要减少rsync对目录的递归扫描判断,尽可能的做到只同步inotify监控到已发生更改的文件。结合rsync的特性,所以该脚本是分开判断来实现一个目录的增删改查对应的操作,已经在测试机测试成功。因为inotify只在启动时会监控目录,他没有启动期间的文件发生更改,它是不知道的,所以可以在启动该脚本前做一次rsync全量同步,启动脚本后使用计划任务定时做rsync全量同步,防止各种意外遗漏,保证数据一致。

此脚本参考链接:http://www.ttlsa.com/web/let-infotify-rsync-fast/

五.rsync和inotify常用参数解释

5.1 rsync常用参数说明

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性

-c, --checksum 打开校验开关,强制对文件传输进行校验

--delete 删除那些DST中SRC没有的文件

-H, --hard-links 保留硬链接

-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀

--backup-dir 将备份文件(如~filename)存放在在目录下

-z, --compress 对备份的文件在传输时进行压缩处理

5.2 inotify常用参数说明

-m 要持续监视变化

-r 使用递归形式监视目录
-q 减少冗余信息,只打印出需要的信

--format 指定文件变化的详细信息

转载于:https://blog.51cto.com/liubin0505star/1830615

Cetnos环境下inotify+rsync实时同步相关推荐

  1. 真正的inotify+rsync实时同步 彻底告别同步慢

    真正的inotify+rsync实时同步 彻底告别同步慢 我们公司在用inotify+rsync做实时同步,来解决分布式集群文件一致性的问题.但当web文件越来越多(百万级数量html,jpg等小 文 ...

  2. inotify+rsync实时同步 彻底告别同步慢

    背景 公司在用inotify+rsync做实时同步,来解决分布式集群文件一致性的问题.但当web文件越来越多(百万级数量html,jpg等小 文件),同步就越来越慢,根本做不到实时,按照网上的调优方法 ...

  3. inotify+rsync实时同步服务部署

    环境:服务端 192.168.6.30(安装 rsync) /data/share :客户端 192.168.6.38(安装 inotufy+rsync)/nfsbackup 主流程:https:// ...

  4. 企业级别应用--rsync远程同步(配置 rsync 备份源、rsync 下行和上行、inotify+rsync 实时备份)

    文章目录 一.配置 rsync 源服务器 1.1 rsync简介 1.2 rsync特点 1.3 配置 rsync 同步源 1.4 测试rsync功能 下行同步的三种方式 二.inotify+rsyn ...

  5. 【Linux下Inotify + Rsync文件实时同步】

    Linux下Inotify + Rsync文件实时同步 一.使用前言* 随着公司业务的发展,单web服务器不能满足用户的访问,需要增加多台web服务器实现均衡高可用性访问.为了统一各web服务器之间的 ...

  6. rsync+inotify实现实时同步案例详解

    rsync+inotify实现实时同步案例详解 转自:http://chocolee.blog.51cto.com/8158455/1400596 随着应用系统规模的不断扩大,对数据的安全性和可靠性也 ...

  7. rsync远程同步及结合inotify实现实时同步

    rsync远程同步及结合inotify实现实时同步 rsync 命令格式 常用选项 实现免交互 rsync同步配置 环境准备 同步源编写rsync配置文件 创建数据文件 确保读取权限 开启服务 sla ...

  8. 运维之道 | Linux rsync 文件同步、Inotify远程实时同步

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

  9. rsync + inotify 实现实时同步

    rsync + inotify 实现实时同步 rsync 简介 Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.并且可以不进行改变原有数据的属性信息,实现 ...

最新文章

  1. Linux 文件系统权限(一)
  2. 【学习笔记】juc并发学习+关于锁的面试题
  3. ABAP Pattern usage - define own custom user exit
  4. Google Shopping Feed 数据整理之XML格式实现方法
  5. gitlab去掉邮箱验证功能
  6. Android 功耗(14)----Android功耗 问题debug处理
  7. QQ邮箱发送邮件,出现mail from address must be same as authorization user错误
  8. 三种GDB类型的转换后字段类型的变化
  9. 《吴忠与富富平》之一:秦统一前后的吴忠及秦汉对吴忠地区的开发
  10. 小白如何搭建自己的网络服务器
  11. 普惠联接,让人类诗意地栖居在大地上
  12. APP推广|小众APP推广渠道,总有适合你的。
  13. Get IT技能百科库 50个领域轻松直达
  14. 【Vic的小课堂】Unity实现游戏功能(1)—矩形框选
  15. 和合共生,聚势谋远——云创大数据教育渠道大会隆重举行!
  16. 最新最简便解决 teamviewre检测为商业用途 的方法
  17. Java导出Excel文档(poi),并上传到腾讯云对象存储服务器
  18. python从1 2 3 4 1000_Python语句序列“a=(1,2,3,None,(),[]);print(len(a))”的运行结果是()。 (2.0分)_学小易找答案...
  19. 学习编程的基础(学编程的基础要具备什么)
  20. 物理学与计算机相关参考文献,中国科学技术大学 计算物理学 教材与参考文献...

热门文章

  1. win7卸载显卡及对应驱动后桌面分辨率不对以及鼠标键盘无反应
  2. 使用JMeter 进行接口并发性能测试
  3. antd树型选择控件选择父级_element的tree树形菜单回显、父级半勾选
  4. java 3500_学java开发3500价位的笔记本该侧重那些方面?
  5. android开发图片格式,Android程序开发如何处理图像格式类及图像转换
  6. solve stiffness matrix in matlab
  7. MATALB程序调试
  8. jupyetr notebook添加anaconda虚拟环境内核(tensorflow+pytorch)
  9. 快速制作BP神经网络结构示意图
  10. sorted()函数快速实现字典输出