热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Rsync+inotify实现多台Web数据动态同步

背景:由于无存储共享设备,web集群中的代码均存放在本地,最终导致web节点之间的数据无法一致。解决办法:采用rsync+inotify,实现多台web数据动态同步解决思路:比如有a、b、c、d四台web,为解决哪台服务器为源数据服务器,我们在a服务器上安装rsync+ino

背景:由于无存储共享设备,web集群中的代码均存放在本地,最终导致web节点之间的数据无法一致。

解决办法:采用rsync+inotify,实现多台web数据动态同步

解决思路:比如有a、b、c、d四台web,为解决哪台服务器为源数据服务器,我们在a服务器上安装rsync+inotify,然后将一个二级域名指向a服务器,这样以后网站编辑、开发人员之间访问二级域名进行日常网站更新,a服务器在检测到本地有数据更新时,便动态(触发式)向其它服务器发送更新数据

选择rsync+inotify的几大理由:在常规的数据同步应用案例中,大多数人会选择使用rsync来完成数据同步,笔者选择rsync+inotify的理由如下
1、服务器性能:rsync只能实现定时更新,无论网站有无文件更新,rsync都会按着定时任务去检查文件是否有更新,当数据文件较大时会使服务器性能下降;而rsync+inotify为触发式更新,也就是说只有当某个文件发生改动时才会更新,这样一来对服务器性能影响较小
2、数据实时性:如果选择rsync,每隔多长时间同步一次数据是个问题,时间越短,对性能影响就越大。时间太长,用户/编辑无法接受。采用rsync+inotify可实现实时更新,当a服务器文件有更新时,其它服务器立即更新

环境拓扑
a:192.168.1.101
b:192.168.1.102
c:192.168.1.103
d:192.168.1.104
注:数据源服务器为a,目标服务器为b、c、d

一、目标服务器安装rsync (在b、c、d服务器上操作,安装配置均一样)

安装rsync
#tar zxvf rsync-3.0.8.tar.gz
#cd rsync-3.0.8
#./configure && make && make install


配置rsync
#vi /etc/rsync.conf    加入如下内容

uid = root
gid = root
use chroot = no
max cOnnections= 20
strict modes = yes
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log format = %t %a %m %f %b
[web]
path = /usr/local/nginx/html/
auth users = rsync
read Only= no
hosts allow = 192.168.1.0/24
list = no
uid = root
gid = root
secrets file = /etc/rsync.passwd
ignore errors = yes

创建认证
#vi /etc/rsync.passwd
rsync:rsync

#chmod 600 /etc/rsync.passwd

启动rsync,启动后使用netstat查看,会发现系统已启动873端口
# rsync --daemon --cOnfig=/etc/rsync.conf  

加入开机启动
# echo "rsync --daemon --cOnfig=/etc/rsync.conf" >>/etc/rc.local

二、源服务器安装rsync+inotify (在a服务器上操作)
安装rsync(仅安装即可,不需配置)
#tar zxvf rsync-3.0.8.tar.gz
#cd rsync-3.0.8
#./configure && make && make install
#echo "rsync" > /etc/rsync-client.passwd
#chmod 600 /etc/rsync-client.passwd


安装inotify
#tar zxvf inotify-tools-3.13.tar.gz
#cd inotify-tools-3.13
#./configure && make && make install

#vi /etc/rsync-web.sh   加入如下内容
#!/bin/sh
SRC=/usr/local/nginx/html/
DES=web
WEB2=192.168.1.102
WEB3=192.168.1.103
WEB4=192.168.1.104
USER=rsync
/usr/local/bin/inotifywait -mrq -e create,move,delete,modify $SRC | while read D E F
        do
rsync -ahqzt --password-file=/etc/rsync-client.passwd  --delete $SRC $USER@$WEB2ES
rsync -ahqzt --password-file=/etc/rsync-client.passwd  --delete $SRC $USER@$WEB3ES
rsync -ahqzt --password-file=/etc/rsync-client.passwd  --delete $SRC $USER@$WEB4ES
        done

#chmod +x /etc/rsync-web.sh
#nohup /etc/rsync-web.sh &       //必须使用nohup放入后台执行,否则关闭终端后此脚本进程会自动结束

三、测试
在a服务器/usr/local/nginx/html目录下进行增、添、改、删文件,看b、c、d服务器是否能得到同步


推荐阅读
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文是关于C#类型系统、值类型和引用类型的概念性笔记。介绍了C#1系统类型的三个特性,静态类型的含义,显式类型和隐式类型的区别。还讨论了类、结构、数组类型、枚举、委托类型和接口类型属于哪一种类型。同时纠正了关于结构、引用类型和对象传递的错误表述。最后提到了C#4中使用动态类型的关键字。 ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • 作者表示自己最近工作非常忙碌,无法抽出时间写作。他计划在未来的几天内写关于namespace与C#的名字解析以及数据库内容转化为excel文件下载的知识。 ... [详细]
author-avatar
拍友2502904975
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有