简介

最近有一个比较特殊的需求,某个服务提供文件上传功能。但是由于要解决单点问题,所以会程序会部署在多台服务器上实现高可用。但是也会随之带来一个和共享cookie类似的问题,那就是文件存储也应该是共享的.其实大部分同学想到的,第一个肯定是使用NFS来解决。大家通过NFS mount到同一个目录即可实现. 但是为什么我们没有选择这个解决方案呢? 那是因为之前不知道是我们使用不当还是NFS自身存在问题, 出现了几次事故,NFS Server端卡死,导致整个NFS的client端由于使用【硬挂载】的方式一直卡住,整个服务器的负载因此也一直飙升,直到NFS Server端恢复正常或者管理员主动卸载mount才能将机器负载降下来恢复正常。在没弄明白原因之前,NFS就不太敢用了,只能另想他法.

rsync+inotify实现原理

原理图:

我们最后采用了rsync+inotify的方式来解决我们这个需求。最初一开始,我对这个解决方案是排斥的。因为后期如果文件过多,势必带来性能和延迟问题。但是最终均衡和考虑业务量的情况下,还是采用了这种方式能暂时满足我们的需求.

rsync是一个服务器之间进行文件同步的工具. 具体详情大家可以自行查资料。这里我们可以理解为可以实现文件内容对比的scp工具。如果文件内容没变化则不会发生同步文件的操作, 否则会同步最新内容使得目标服务器的文件内容一致。但是rsync只能做到的只是文件同步,它自身没有能力发现哪些文件内容发生了变化.你执行rsync命令让它同步哪个文件就同步哪个文件,仅此而已。那么我们要做到2台主机之间某个目录或者文件能够达到实时同步效果,需要借助其他工具进行辅助,最好能帮我们监控某个目录下的文件,一旦目录文件发生内容变动(如内容增加、内容减少、删除、修改等等),我们获取通知之后,再执行rsync命令,达到我们实时同步的目的。

inotify是Linux下的一个工具,inotifywait是其中的一个组件,就能帮我们监控某个目录,一旦文件内容发送变动,我们会获取到一个事件通知,拿到文件的路径。之后我们通过自定义shell脚本,执行rsync命令,实现实时同步的目的。

安装与实现

B服务器(同步数据的目标服务器)

   # A、B服务器都需要安装 yum install rsync inotify-tools -y# B服务器修改配置, 启动rsyncd后台服务# 修改 /etc/rsyncd.confuid = rootgid = rootuse chroot = nomax connections = 20pid file = /var/run/rsyncd.pidlog file = /var/log/rsyncd.loglock file = /var/run/rsyncd.lock#如果不开启此选项,速度慢,因为会进行域名解析reverse lookup = no#可以定义多个module[upload]  #存储同步过来的文件路径path = /       read only = no#设置连接此rsyncd的用户名,与linux账号无关,自定义auth users = rsync#格式: $user_name:$password  权限: 600secrets file = /etc/rsyncd.secretslist = no# 启动服务systemctl start rsyncd

A服务器(源数据服务器)

   # A服务器echo '密码' >> /etc/rsyncd.passwd #权限 600# 编写inotyfy+rsync同步脚本 inotify-rsync.sh

该脚本建议使用如supervisor等工具运行,进程保活,挂掉自动拉起:

    #!/bin/bashset -exmonitor_path='/tmp/' # *需要监控的目录*sync_host='127.0.0.1' # *修改ip地址*sync_user='rsync'  # *修改username*sync_module='upload'  #*修改module名称*# 阻塞监听文件变化,一旦变化则执行rsync同步命令inotifywait -mrq --format '%w%f' -e create -e delete -e moved_to -e close_write $monitor_path | while read linedodir_name=`dirname $line`if [ -f $line ];then# 文件存在,则同步rsync -azrR   $line     --delete --password-file=/etc/rsyncd.passwd $sync_user@$sync_host::$sync_moduleelse# 文件不存在(例如被删除), 则全量同步该文件所在目录文件内容rsync -azrR   $dir_name --delete --password-file=/etc/rsyncd.passwd $sync_user@$sync_host::$sync_modulefidone

supervisor配置文件:

[program:inotify-rsync]
command=/bin/bash -c "/sh/shell/inotify-rsync.sh"
process_name=inotify-rsync
autorestart=true
startsecs=5
stopsignal=INT
stopasgroup=true
killasgroup=true
redirect_stderr=true
stdout_logfile_maxbytes=0
stdout_logfile=/sh/shell/inotify-rsync-running.log

rsync+inotify文件实时同步相关推荐

  1. rsync+inotify文件实时同步实战

    说明:本文部分内容收集于互联网 不完全原创 但都经过本人亲身试验 方案: 1.双向:两台服务器都要开rsync同步和inotify监听 ---> 多对多 2.单向:一台服务器开inotify 其 ...

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

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

  3. MySQL :rsync+sersync文件实时同步

    文章目录 1. rsync是什么 rsync+sersync文件实时同步 一:环境 二:备份服务器操作 三:数据源服务器操作 安装rsync客户端软件 安装sersync工具,实时触发rsync进行同 ...

  4. rsync + inotify 实现实时同步

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

  5. inotify + rsync 打造文件实时同步

    rsync 是Linux 下的一个文件同步利器,以高效的增量传输而闻名,适用于同步,备份等多个场合.几乎所有的Linux 发行版都收录了该软件,安装非常容易,以CentOS 6.4为例: 1 yum  ...

  6. rsync + inotify 数据实时同步

    一.rsync介绍 rsync英文全称为Remote synchronization,从软件的名称就可以看出来,Rsync具有可是本地和远程两台主机之间的数据快速复制同步镜像.远程备份的功能,这个功能 ...

  7. Rsync+inotify实现实时同步

    如果有一天去接受面试:面试官问你一个1t的文件需要进行传输,问题用何种方法.假如你答了scp或者ftp.那么你挂的几率是很大的 一.inotify介绍 inotify-tools有两个命令 //ino ...

  8. 【Rsync + inotify】 实时同步远程服务器目录文件

    文章目录 服务端 安装.配置 rsync 客户端 安装rsync 使用rsysnc 实现 实时同步 如何排错??? 服务端 安装.配置 rsync centos: # yum install rsyn ...

  9. Linux平台上文件同步——rsync+inotify之实时同步

    1 前言 1.1 概述 本文介绍使用rsync和 inotify-tools,实现linux 上的本地实时同步和本地定时同步的方法. 1.2 实验环境 服务器两台 操作系统: CentOS-7.4 软 ...

最新文章

  1. bugku 成绩单 sqlmap工具的爆破
  2. 【总结】超1000页有三AI文档资源领取方法汇总!
  3. TypeScript里数组foreach和map操作的区别
  4. C和指针之字符串编程练习10(判断字符串是否是回文数)
  5. python 复制文件_10 行 Python 代码写 1 个 USB 病毒
  6. sql注入 练手网站_靶场sql注入练手----sqlmap篇(纯手打)
  7. ASP正则表达式对象 - New RegExp
  8. linux匹配数字正则,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  9. 机器学习代码实战——逻辑回归(Logistic Regression)
  10. 汽车电子技术——ECU/MCU嵌入式软件开发
  11. html基础入门----简单动画
  12. matlab提取遥感图像的点DN值,如何提取影像中的DN值
  13. U盘文件夹病毒,.exe病毒删除方法
  14. CF 1538 G. Gift Set (贪心+思维)
  15. 四色定理(DFS深搜)
  16. BroadCast Channel
  17. 说出ArrayList,Vector,nbsp;Linke…
  18. 关于使用mysqlworkbench实现远程连接数据库
  19. 一套开源免费的OA办公管理系统源码,带小程序、生成APP
  20. 有个人发现了一个在网吧忘了关掉的QQ后……

热门文章

  1. 【微信小程序学习】 保存cookie到Storage中,通过cookie获取视频的数据
  2. CentOS7.9安装twemproxy,实现redis集群
  3. $.inArray()使用方法
  4. python二维列表添加_Python二维数组
  5. 安装mysql配置时出错_mysql安装时出现各种常见问题的解决方法
  6. [coreldraw X4]如何抠图
  7. 华硕猛禽1080ti_F-22猛禽动力回路的视频分析
  8. 基础十三:面向对象二
  9. scrapy框架初识1
  10. 影响原创内容价值的因素有哪些