跨机房问题一直都是一个老大难的问题,先看传统数据库的跨机房方案。
Master/Slave方案
这是最常用的方案,适用于大多数需求。Master将操作日志实时地发送到Slave,Slave当成Master的一个Hot Backup。Master宕机时,服务切换到Slave,需要修改客户端逻辑使得Master失效时自动寻找新的Master。
这个方案有一个问题就是数据库的Master和Slave一般不是强同步的,所以,切换到Slave后可能丢失宕机前的少量更新。如果将 Master和Slave做成强同步的,即:所有的数据必须同时写成功Master和Slave才成功返回客户端,这样又带来了另外一个问 题:Master和Slave中任何一台机器宕机都不允许写服务,可用性太差。因此,Oracle有一种折衷的模式:正常情况下Master和Slave 是强同步的,当Master检测到Slave故障,比如Slave宕机或者Master与Slave之间网络不通时,Master本地写成功就返回客户 端。采用这种折衷的同步模式后,一般情况下Master和Slave之间是强同步的,Master宕机后切换到Slave是安全的。当然,为了确保数据安 全后,宕机的Master重启后可以和新的Master(原有的Slave)对比最后更新的操作日志,如果发现不一致可以提醒DBA手工介入,执行数据订 正过程。
Master和Slave之间强同步还有一个问题就是跨机房延时,对于关键业务,同城的机房可以部署专用光纤,在硬件层面上解决这个问题;异地的机房一般用来做备份,与主机房之间的数据同步一般是异步的,可能有秒级延时。
Bigtable跨机房方案
Bigtable跨机房部署两套集群,每个机房有各自的GFS存储和Bigtable Master。机房之间的数据同步方式为异步,类似Master/Slave方案。Bigtable Tablet Server将操作日志Flush到GFS成功后返回客户端,并生成异步任务将操作日志同步到备机房。这里的难点在于Tablet Server宕机时,某些操作日志还没有完成同步,因此,操作日志同步点也需要记录到GFS中,当其它Tablet Server加载宕机Tablet Server原先服务的tablet时,将继续发送没有同步完成的操作日志到备机房。如果主机房整体发生故障,比如机房停电,可以手工将服务切换到备机 房,这时会丢失最后的一部分更新操作,需要人工执行订正操作。
Bigtable跨机房方案还有一个问题,为了提高压缩率,Bigtable跨机房的同步是按列进行的,而Bigtable保证行事务,这样就可能 出现某些行的部分列同步成功,部分列同步失败,破坏行事务。早期的Google App Engine底层存储为Bigtable,这个问题没有给出自动化的解决方案。
Megastore跨机房方案(基于Paxos)
一般来说,实际中使用的方案都是Master/Slave方案,Megastore中基于Paxos的方案理论上是目前最优的,但是实现过于复杂, 只有Google在工程上做了实现。Master/Slave方案的问题在于Master宕机时切换到Slave需要时间,为了保证不会同时出现两个 Master的情况,这个时间一般比较长,比如30s ~ 1分钟,而且不能做到自动化。Paxos的好处在于允许多个机房同时做Master,同时提供写服务,Paxos协议将通过Quorum-Based的策 略保证达成一致。一般情况下,主机房作为Paxos协议的Leader提供写服务,当Leader发生故障时,备机房的节点可以被选为新的Leader提 供写服务。即使多个机房认为自己是Leader,Paxos协议也能保证同一时刻只有一个Leader的写操作被大家同意并生效,并且做到了宕机切换的自 动化。只要超过一半的机房没有出现故障,Paxos协议就能够保证不停写服务。
Google App Engine目前依赖于Google Megastore,解决了机房宕机可能破坏行事务的问题。Amazon Dynamo也给出了一种Vector Clock的做法解决多点同时写入的问题,这是一种事后验证的做法,理论上很有意思,但由于弱一致性,实践上没有特别成功的案例。
需要注意的是,Megastore中的复制方案在理论上很完美,但实现过于复杂,基本没有可行性。另外,无论采用怎样的跨机房同步和切换方案,都不能解决强同步写操作延时较长的问题,一般来说,这个延时将达到几十到几百毫秒。
一种回避Paxos的切换方案
选主一般可以通过引入开源的Zookeeper做到,不过Zookeeper本身的稳定性尚待考验,有一种回避Paxos的切换方案比较有意思。机 房宕机切换自动化成本太高,但是对于很多单点服务,机房内部宕机切换的自动化很有必要。Oceanbase采用Linux的一个开源方 案:Pacemaker,通过heartbeat和虚IP漂移的方式实现机房内部宕机自动切换。由于主备切换本质上是一个选主问题,理论上只有Paxos 或者类似协议可以解决,而Pacemaker没有采用复杂的Paxos协议,它对硬件是有依赖的,比如要求主备节点之间通过直连线保证网络不会发生故障, 而这在机房内部是可以做到的。机房之间采用前面提到的Master/Slave方案,可以写一个脚本ping主机房的Master,当确认主机房 Master宕机时(比如一分钟不通)将服务切换到备机房并报警。
相关推荐
本文档将详细介绍如何构建跨机房的Hadoop集群,讨论了阿里巴巴离线数据处理现状、技术方案、跨机房集群的困难、NameNode的扩展性、跨机房网络限制、数据和计算如何跨机房分布等问题,并提供了相应的解决方案。...
数据和计算资源跨机房分布是一个复杂的问题。集群中可以有多个资源组分布在不同的机房,但任意资源组的计算/存储资源不超过单个机房的总量。默认情况下,一个计算任务的所有任务在同一机房运行,产生的数据也只写到...
2. 跨机房计算调度:美团点评使用YARN Federation来实现跨地域计算调度,以避免跨机房流量和提高计算效率。 3. 数据Cache处理:美团点评使用Alluxio来实现数据Cache处理,以提高数据读写性能。 4. 带宽管控:美团...
2013阿里技术嘉年华:构建一个跨机房的Hadoop集群,不错的介绍
标题中的“电信设备-一种跨机房通讯的方法和系统”暗示了这个压缩包内容主要涉及的是电信行业的核心技术,特别是关于跨机房通信的解决方案。这种通信方式对于保证电信网络的稳定性和高效性至关重要,因为现代电信...
跨机房数据库解决方案 跨机房数据库解决方案是指在大型数据中心机房中,为了确保业务的高可靠性和连续性,采取的一系列解决方案。这些解决方案涵盖了电源系统、环境控制系统和机房监控管理系统三个方面。 首先,在...
在构建一个跨机房的Hadoop集群时,我们需要考虑多个层面的技术细节和设计原则,以确保数据的安全性、可用性和高性能。Hadoop是分布式计算框架,主要用于处理和存储大规模数据,而跨机房部署可以提高容灾能力和系统...
## Redis跨机房同步系统注:该项目目前为起步阶段,从0-1的过程本人正在全力开发中,如果您有好的想法或者建议欢迎与我联系qq 805005024也欢迎给本项目提PR ####最新进展:目前已经实现了单Agent单源Redis单目标...
【银行生产环境基于私有云跨机房搬迁方案】 银行生产环境的迁移是一个复杂而关键的任务,尤其在基于私有云的环境中,涉及到的技术和策略更需周密规划。本方案详细介绍了某银行如何利用浪潮K1 Power小型机私有云进行...
4. **跨平台**:C++代码可以在多个操作系统上编译和运行,增加了系统的兼容性。 在实现机房预约系统时,可能涉及到的关键技术有: 1. **数据库管理**:如MySQL或SQLite等,用于存储机房信息、预约记录等数据。 2. ...
Unity 3D是一款强大的跨平台游戏引擎,常用于创建实时交互的3D应用,包括游戏和非游戏项目。将3D模型导入Unity可以进一步进行场景布置、光照调整、动画设置以及实时预览,极大地提高了开发者在虚拟现实(VR)、增强...
尽管MC(Memcached)和MySQL的组合在Web 2.0时代无法完全解决所有需求,如MC的穿透问题和跨机房问题,但是Redis可以弥补这些缺陷。 相关参数与优化: 在使用Redis时需要关注和优化许多相关参数。例如,在List类型中...
6. **机房管理**:"VR机房PC版"不仅可以用于训练和教育,还能够帮助运维人员远程监控机房,实时了解设备运行状况,快速定位问题,减少现场排查的时间,提高工作效率。 7. **安全性提升**:通过虚拟化访问,可以避免...
《红河学院机房管理系统课程设计》是一份深入探讨如何构建高效、自动化机房管理解决方案的内服...这不仅是对学生技能的锻炼,也是对实际业务问题的解决策略的探索,对于提升教育质量和培养实战型IT人才具有重要意义。
gorail二次开发的binlog解析工具,使用MQ跨机房同步,增加了修改表结构后依然能正常工作的特性,多个mysql同时处理的功能Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门...
F5链路负载AD应用交付设备
通过这样的监控解决方案,可以跨地域、跨机房进行集中管理,降低维护成本,提高运维效率。同时,实时数据的收集和分析有助于预测性维护,减少意外停机时间,确保机房的高可用性和可靠性。在实施监控解决方案时,合理...
在开发过程中,C语言因其效率高、跨平台等特性,成为实现这类管理系统的理想选择。开发者需要掌握C语言的基本语法、结构化编程思想,以及文件操作、内存管理等相关知识。对于数据库操作,可能还会用到如SQLite这样的...
这种架构使得系统具有良好的可扩展性和跨平台性,无论在哪种操作系统或设备上,只要能打开浏览器就能访问和控制。 五、安全与权限管理 为了保护机房的重要信息,机房监控系统通常具备严格的权限管理机制。不同的...
它的跨平台性使得该排座系统能够在不同的操作系统上运行,如Windows、Linux或Mac OS。此外,Java的强大类库支持和优秀的性能,为开发复杂的逻辑和数据处理提供了便利。 其次,该系统涉及到图形用户界面(GUI)设计...