跨机房问题

跨机房问题一直都是一个老大难的问题,先看传统数据库的跨机房方案。

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宕机时(比如一分钟不通)将服务切换到备机房并报警。

时间: 2024-12-05 07:27:29

跨机房问题的相关文章

SQL Server 跨网段跨机房FTP复制

一. 背景 搭建SQL Server复制的时候,如果网络环境是局域网内,通过主机名就可以实现了,但是如果是跨网段.跨机房异地搭建复制的时候就需要注意了,因为SQL Server复制不支持通过IP连接分发服务器,那有什么办法解决跨网段.跨机房的问题呢? 我在SQL Server跨网段(跨机房)复制已经讲到了两种解决方法,如果想用请求订阅模式,共享快照文件权限的配置比较麻烦,更好更安全的方式是通过FTP形式读取快照文件进行初始化: 二. 搭建过程 (一) 环境信息 系统环境:Windows Serv

SQL Server 跨网段跨机房复制

一. 背景 搭建SQL Server复制的时候,如果网络环境是局域网内,通过主机名就可以实现了,但是如果是跨网段.跨机房异地搭建复制的时候就需要注意了,因为SQL Server复制不支持通过IP连接分发服务器,那有什么办法解决跨网段.跨机房的问题呢? 二. 解决方案 在跨网段.跨机房进行SQL Server复制的时候需要区分两种情况:一种是外网IP的1433端口对应了这台机器SQL Server的数据库端口:另外一种情况是外网IP对应SQLServer机器的端口不是1433:下面是几种解决方案:

云计算:淘宝云梯的多NameNode和跨机房之路

2013年4月,阿里云梯集群所在的数据中心(IDC机房)的机位已满,无法继续扩充集群.根据当时阿里集团数据量的增长趋势,在可以预见的很短时间内,集群规模将因为机房机位不足而无法继续扩充.由于当时云梯的Hadoop版本还不支持单集群跨机房分布的功能,所以阿里集团的大数据业务 将因为集群规模的限制而停止发展.云梯的跨机房项目就在这种背景下开始的.目标非常明确:构建一个支持跨机房的Hadoop集群. 技术挑战 要构建一个跨机房的Hadoop集群,有非常多的技术难点. 难点1:NameNode的扩展性

数据中心跨机房技术实现的现实阻力

现在的数据中心往往是由很多个机房组成的,机房可能遍布于世界各个角落,以满足全球各地用户访问的需求.这些部署在世界各地的机房,有的是为了提升本地用户的访问体验,有的是为了做机房的业务备份,也有的是集群业务扩容的需要.不管在部署什么的业务,做跨机房的时候,都要充分考虑可能面临的问题,以便在跨机房部署时避免犯错.下面就来详细谈一谈,跨机房的业务部署时,数据中心要考虑哪些可能遇到的问题. 带宽 处于不同地区的两个或者多个机房要打通,很多时候要经过广域网才行.当然,有些实力超强的数据中心也可能单独建设一条

专访高德地图开放平台的负责人童遥:跨机房同步和多路写入Redis集群方案将得到充分发展

杭州·云栖大会将于2016年10月13-16日在云栖小镇举办,在这场标签为互联网.创新.创业的云计算盛宴上,众多行业精英都将在这几天里分享超过450个演讲主题. 为了帮助大家进一步了解这场全球前言技术共振盛会的内容,采访了各个论坛的大咖,以飨读者. 以下为正文: 童遥,高德地图开放平台的负责人,也在负责高德在线服务的研发工作. 关于本次云栖大会的分享内容,童谣表示,高德地图既为大家提供出行服务,也为三十多万款应用提供LBS API能力,在这样大并发压力下和跨机房的Redis应用场景中,有一些实践

Linux高可用(HA)之MySQL多主一从+Keepalived跨机房集群部署

添加host解析.时间同步和ssh互信(注:这里的做ssh互信的时候使用到一个脚本借助expect实现了面交互操作了) [root@DS-CentOS51 ~]# echo "172.16.0.51 mysql-master01 > 172.16.0.60 mysql-master02 > 172.16.0.63 mysql-slave01 > 172.16.0.69 mysql-slave02" >> /etc/hosts [root@DS-CentOS

MongoDB迁移方案-冷备份+增量备份恢复--跨机房迁移

QQ群:465614686  1.  环境构建步骤 (1)线上环境 都是副本集模式 3个业务访问节点+1个隐藏节点 (隐藏节点做hadoop.spark数据同步使用以及数据报表查询等) (2)主机以及配置说明 10.21.18.21  primary节点    优先级为100 10.21.18.22  secondary节点  优先级为90 10.21.18.23  secondary节点  优先级为80 10.21.18.24  隐藏节点       优先级为0 系统配置:128G内存,64C

阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房)

项目背景 阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双A,两边均可写,由此诞生了otter这样一个产品. otter第一版本可追溯到04~05年,此次外部开源的版本为第4版,开发时间从2011年7月份一直持续到现在,目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了otte4. 目前同步规模: 同步数据量6亿 文件同步1.5TB(2000w张图片) 涉及200+个数据库实例之间的

大拿在跨国机房数据同步等方面的最佳技术实践

4月20日,云栖大会深圳峰会在大中华深圳喜来登酒店隆重召开.本文根据深圳市大拿科技有限公司副总王彬文在海外分会场中题为<扬帆出海,阿里护航>演讲整理而成.王彬文在演讲中深入分享了大拿所面临的技术挑战,以及如何成功实现跨国机房数据同步.高并发.大数据分析等方面的技术实践经验.   以下是演讲内容整理:   首先非常感谢阿里给予此次机会同大家一起交流分享下大拿在做国际业务时的经验.今天的分享主要分为两个部分:第一是大拿是做什么的?第二个部分是大拿在开拓海外市场的过程中遇到什么问题,阿里云帮助我们解