本文来自微信公众号“twt企业IT社区”,作者/陈明福,目前就职于宁夏银行金融科技部运维中心,系统架构团队负责人,主要从事IT基础架构规划设计及实施维护,擅长操作系统、数据库中间件、VMware虚拟化等基础软件及小型机存储、负载均衡、DNS等基础硬件架构,精通数据中心建设及两地三中心容灾建设。
一、OceanBase数据库容灾
OceanBase数据库提供多种部署模式,可根据对机房配置以及性能和可用性的需求进行灵活选择,具体如下:
如上所示,为了达到不同级别的容灾能力,OceanBase数据库提供了两种高可用解决方案:多副本高可用解决方案和主备库高可用解决方案。多副本高可用解决方案基于Paxos协议实现,在少数派副本不可用情况下,能够自动恢复服务,并且不丢数据,始终保证RTO在30秒内,RPO为0。主备库高可用解决方案是基于传统的主-备架构来实现的高可用方案,是多副本高可用方案的重要补充,可以满足双机房和双地域场景下的容灾需求;它不能保证数据不丢,RPO大于0,RTO为分钟级别。
OceanBase集群的多副本机制可以提供丰富的容灾能力,在机器级、机房级、城市级故障情况下,可以实现自动切换,并且不丢数据,RPO=0。OceanBase数据库的主备库高可用架构是OceanBase数据库高可用能力的重要补充。当主集群出现计划内或计划外(多数派副本故障)的不可用情况时,备集群可以接管服务,并且提供无损切换(RPO=0)和有损切换(RPO>0)两种容灾能力,最大限度降低服务停机时间。
二、OceanBase数据库容灾部署方案
(一)同机房三副本
如果只有一个机房,可以部署三副本或更多副本,来达到机器级无损容灾。当单台server或少数派server宕机情况下,不影响业务服务,不丢数据。如果一个机房内有多个机架,可以为每个机架部署一个Zone,从而达到机架级无损容灾,本部署方案也是实现本地高可用的一种重要方式,结合主备容灾架构可实现更高级别数据库容灾保护。
(二)同城双机房主备库
如果同城只有双机房,又想达到机房级容灾能力,可以采用主备库模式,每个机房部署一个集群,其中一个为主集群,一个为备集群,主集群即生产集群,是唯一接受业务写入和强一致性读的集群,它的角色是PRIMARY,主集群部署在主机房,多副本架构,满足机器级容灾需求,备集群是主集群的一个物理拷贝,保证事务一致性,它的角色是PHYSICAL STANDBY,备集群部署在备机房,可以选择单副本,降低部署成本,也可以选择多副本,让备集群也具备机器级容灾能力。主集群会自动向备集群传输REDO日志;备集群收到REDO日志后会进行持久化,然后执行REDO回放操作,恢复用户数据和schema,保证与主集群是物理一致的。备机房不可用时,不影响主集群服务,主机房不可用时,备集群可以Failover成新主集群,接管服务。当任何一个机房不可用时,另一个机房可以接管业务服务。如果备机房不可用,此时业务数据不受影响,可以持续提供服务;如果主机房不可用,备机房集群需要激活成新主集群,接管业务服务,由于备集群不能保证同步所有数据,因此可能会丢失数据。
(三)同城三机房
如果同城具备三机房条件,可以为每个机房部署一个Zone,从而达到机房级无损容灾能力。任何一个机房不可用时,可以利用剩下的两个机房继续提供服务,不丢失数据。这种部署架构不依赖主备库,不过不具备地域级容灾能力。
(四)两地两中心主备库
如果希望达到地域级容灾,但是每个地域只有一个机房时,可以采用主备库架构,选择一个地域作为主地域,部署主集群,另一个地域部署备集群。当备地域不可用时,不影响主地域的业务服务;当主地域不可用时,备集群可以激活为新主集群继续提供服务,这种情况下可能会丢失业务数据。更进一步,可以利用两地两中心实现双活,部署两套主备库,两个地域互为主备。这样可以更加高效利用资源,并且达到更高的容灾能力。
(五)两地三中心五副本
两地三中心是指机房分布在两个地域,一个地域有两个机房,一个地域有一个机房。较好的容灾架构不仅能达到机房级容灾能力,也能够达到地域级容灾能力,即任何一个地域故障,另一个地域可以接管服务。
OceanBase数据库有成熟的两地三中心解决方案:两地三中心五副本。举例说明,北京有两个机房,深圳有一个机房,北京每个机房部署两个副本,深圳单机房部署一个副本。任何一个机房不可用时,多数派副本都是存活的,可以实现无损容灾(RTO=0)。不过如果出现上海地域级故障,多数派副本将不可用,主集群会停服务。因此,两地三中心模式下,单集群部署满足不了地域级容灾需求。
一主一备部署方案可以解决两地三中心地域级容灾问题。深圳机房可以部署一个备集群,单副本或多副本。深圳地域级故障时,不影响主集群服务;北京地域级故障时,备集群可以Failover成新主集群,接管服务,这样就满足了地域级容灾需求。
(六)三地三中心五副本
为了支持地区级无损容灾,通过Paxos协议的原理可以证明,至少需要3个地区。OceanBase数据库采用的是两地三中心的变种方案:三地三中心五副本。该方案包含三个城市,每个城市一个机房,前两个城市的机房各有两个副本,第三个城市的机房只有一个副本。和两地三中心的不同点在于,每次执行事务至少需要同步到两个城市,需要业务容忍异地复制的延时。
(七)三地五中心五副本
和三地三中心五副本类似,不同点在于,三地五中心会把每个副本部署到不同的机房,进一步强化机房容灾能力。
三、OceanBase数据库保护模式
OceanBase数据库提供了三种保护模式:最大性能、最大保护和最大可用,并且支持三种保护模式之间的切换。
(一)最大性能(Maximum Performance)
这是默认的保护模式,它在最大限度地确保主集群性能的同时,还能保护用户的数据。在这种保护模式下,事务只需要等REDO日志在主集群持久化成功就可以立即提交。REDO日志会异步的同步到备集群,但是不会阻塞主集群事务提交。因此,主集群的性能不会受备集群的同步延时影响。
(二)最大保护(Maximum Protection)
这种保护模式提供了最高级别的数据保护,可以确保主集群出现故障时不会发生数据丢失。在这种保护模式下,事务需要等REDO日志在主集群和强同步的备集群上都持久化成功才能提交。
最大保护模式下只支持配置一个强同步的备集群,其他备集群只能处于异步同步模式。如果强同步的备集群不可用,主集群会停止写服务。
(三)最大可用(Maximum Availability)
这种保护模式在不牺牲集群可用性的前提下提供了最高级别的数据保护。默认情况下,事务要等REDO日志在主集群和强同步的备集群上都持久化成功才能提交。当感知到强同步的备集群出现故障时,主集群不再等日志强同步成功,和最大性能一样优先恢复主集群服务,保证集群可用性。直到强同步的备集群恢复服务,主集群会自动恢复为强同步模式,提供最高级别的数据保护。
最大可用模式下只支持配置一个强同步的备集群,其他备集群只能处于异步同步模式。
四、实现方案
目前,笔者所在单位按照循序渐进原则,分两阶段推进两地三中心容灾架构由当前“主备”模式逐步向“同城双活”模式演进,具体如下:
(一)第一阶段(主备模式)
图OceanBase数据库集群容灾架构图(主备模式)
如上图所示,延续现有两地三中心容灾体系架构规划,总体保持“主备容灾”模式架构,主备集群保护模式为最大性能,其中:
1.A类系统:数据库集群规划为“同城及异地异步复制容灾”模式,生产、同城及异地三中心分别部署3副本集群,由“生产->同城/异地”异步数据复制容灾保护。
2.B类系统:数据库集群规划为“同城异步复制容灾”模式,生产及同城两中心分别部署3副本集群,由“生产->同城”异步数据复制容灾保护。
3.C/D类系统:数据库集群规划为“本地高可用”,生产中心部署3副本集群,不进行容灾保护。
(二)第二阶段(同城三中心5副本模式)
图OceanBase数据库集群容灾架构图(同城三中心5副本模式)
如上图所示,两地三中心容灾体系架构逐步演进为“同城三中心5副本”模式,主备集群保护模式为最大性能,其中:
1.A类系统:数据库集群规划为“同城三中心5副本主集群+异地灾备中心备集群”容灾模式,生产及同城三中心部署为5副本主集群(同城租赁第三机房部署第五副本),生产及同城灾备中心集群可同时对外提供服务,任何IDC级的故障,最多损失2份副本,剩余的3份副本依然满足多数派选举,可保障数据库正常运行。
异地灾备中心部署3副本备集群,通过“异步复制”方式对主集群容灾保护,当生产及同城灾备中心都出现灾难时,可启动异地灾备中心备用集群接管业务。
2.B类系统:数据库集群规划为“同城三中心5副本主集群+异地灾备中心备集群”容灾模式,生产及同城三中心部署为5副本主集群(同城租赁第三机房部署第五副本),生产及同城灾备中心集群可同时对外提供服务,任何IDC级的故障,最多损失2份副本,剩余的3份副本依然满足多数派选举,可保障数据库正常运行。
3.C/D类系统:数据库集群规划为“本地高可用”,生产中心部署3副本集群,不进行容灾保护。