【数据库架构】基于自主可控数据库实现两地三中心容灾的探索与实践

news/2025/2/9 11:12:47/文章来源:https://www.cnblogs.com/o-O-oO/p/18705871

【摘要】金融行业作为第二批次信创试点单位,在大力推广国产软件的背景下,如何保障业务连续性、满足监管部门RPT及RTO指标是新形势下的重要技术挑战,本文作者结合所在单位案例实践,阐述基于OceanBase分布式数据库实现两地三中心容灾的解决方案,供同行参考。

【作者】陈明福,目前就职于宁夏银行金融科技部运维中心,系统架构团队负责人,主要从事IT基础架构规划设计及实施维护,擅长操作系统、数据库中间件、 VMware虚拟化等基础软件及小型机存储、负载均衡、DNS等基础硬件架构,精通数据中心建设及两地三中心容灾建设。

一、OceanBase数据库容灾

OceanBase数据库提供多种部署模式,可根据对机房配置以及性能和可用性的需求进行灵活选择,具体如下:

如上所示,为了达到不同级别的容灾能力,OceanBase 数据库提供了两种高可用解决方案:多副本高可用解决方案和主备库高可用解决方案。多副本高可用解决方案基于 Paxos协议实现,在少数派副本不可用情况下,能够自动恢复服务,并且不丢数据,始终保证RTO在30秒内,RPO为0。主备库高可用解决方案是基于传统的主-备架构来实现的高可用方案,是多副本高可用方案的重要补充,可以满足双机房和双地域场景下的容灾需求;它不能保证数据不丢,RPO 大于0,RTO为分钟级别。
OceanBase集群的多副本机制可以提供丰富的容灾能力,在机器级、机房级、城市级故障情况下,可以实现自动切换,并且不丢数据,RPO=0。OceanBase数据库的主备库高可用架构是OceanBase数据库高可用能力的重要补充。当主集群出现计划内或计划外(多数派副本故障)的不可用情况时,备集群可以接管服务,并且提供无损切换(RPO=0)和有损切换(RPO>0)两种容灾能力,最大限度降低服务停机时间。

二、OceanBase数据库容灾部署方案

2.1 同机房三副本

如果只有一个机房,可以部署三副本或更多副本,来达到机器级无损容灾。当单台server或少数派server宕机情况下,不影响业务服务,不丢数据。如果一个机房内有多个机架,可以为每个机架部署一个Zone,从而达到机架级无损容灾,本部署方案也是实现本地高可用的一种重要方式,结合主备容灾架构可实现更高级别数据库容灾保护。

2.2 同城双机房主备库

如果同城只有双机房,又想达到机房级容灾能力,可以采用主备库模式,每个机房部署一个集群,其中一个为主集群,一个为备集群,主集群即生产集群,是唯一接受业务写入和强一致性读的集群,它的角色是PRIMARY,主集群部署在主机房,多副本架构,满足机器级容灾需求,备集群是主集群的一个物理拷贝,保证事务一致性,它的角色是 PHYSICAL STANDBY,备集群部署在备机房,可以选择单副本,降低部署成本,也可以选择多副本,让备集群也具备机器级容灾能力。主集群会自动向备集群传输REDO日志;备集群收到REDO日志后会进行持久化,然后执行REDO回放操作,恢复用户数据和schema,保证与主集群是物理一致的。备机房不可用时,不影响主集群服务,主机房不可用时,备集群可以 Failover 成新主集群,接管服务。当任何一个机房不可用时,另一个机房可以接管业务服务。如果备机房不可用,此时业务数据不受影响,可以持续提供服务;如果主机房不可用,备机房集群需要激活成新主集群,接管业务服务,由于备集群不能保证同步所有数据,因此可能会丢失数据。

2.3 同城三机房

如果同城具备三机房条件,可以为每个机房部署一个 Zone,从而达到机房级无损容灾能力。任何一个机房不可用时,可以利用剩下的两个机房继续提供服务,不丢失数据。这种部署架构不依赖主备库,不过不具备地域级容灾能力。

2.4 两地两中心主备库

如果希望达到地域级容灾,但是每个地域只有一个机房时,可以采用主备库架构,选择一个地域作为主地域,部署主集群,另一个地域部署备集群。当备地域不可用时,不影响主地域的业务服务;当主地域不可用时,备集群可以激活为新主集群继续提供服务,这种情况下可能会丢失业务数据。更进一步,可以利用两地两中心实现双活,部署两套主备库,两个地域互为主备。这样可以更加高效利用资源,并且达到更高的容灾能力。

2.5 两地三中心五副本

两地三中心是指机房分布在两个地域,一个地域有两个机房,一个地域有一个机房。较好的容灾架构不仅能达到机房级容灾能力,也能够达到地域级容灾能力,即任何一个地域故障,另一个地域可以接管服务。

OceanBase数据库有成熟的两地三中心解决方案:两地三中心五副本。举例说明,北京有两个机房,深圳有一个机房,北京每个机房部署两个副本,深圳单机房部署一个副本。任何一个机房不可用时,多数派副本都是存活的,可以实现无损容灾(RTO=0)。不过如果出现上海地域级故障,多数派副本将不可用,主集群会停服务。因此,两地三中心模式下,单集群部署满足不了地域级容灾需求。

一主一备部署方案可以解决两地三中心地域级容灾问题。深圳机房可以部署一个备集群,单副本或多副本。深圳地域级故障时,不影响主集群服务;北京地域级故障时,备集群可以Failover成新主集群,接管服务,这样就满足了地域级容灾需求。

2.6 三地三中心五副本

为了支持地区级无损容灾,通过Paxos协议的原理可以证明,至少需要3个地区。OceanBase数据库采用的是两地三中心的变种方案:三地三中心五副本。该方案包含三个城市,每个城市一个机房,前两个城市的机房各有两个副本,第三个城市的机房只有一个副本。和两地三中心的不同点在于,每次执行事务至少需要同步到两个城市,需要业务容忍异地复制的延时。

2.7 三地五中心五副本

和三地三中心五副本类似,不同点在于,三地五中心会把每个副本部署到不同的机房,进一步强化机房容灾能力。

三、OceanBase数据库保护模式

OceanBase数据库提供了三种保护模式:最大性能、最大保护和最大可用,并且支持三种保护模式之间的切换。
1、最大性能(Maximum Performance)

这是默认的保护模式,它在最大限度地确保主集群性能的同时,还能保护用户的数据。在这种保护模式下,事务只需要等REDO日志在主集群持久化成功就可以立即提交。REDO 日志会异步的同步到备集群,但是不会阻塞主集群事务提交。因此,主集群的性能不会受备集群的同步延时影响。
2、最大保护(Maximum Protection)

这种保护模式提供了最高级别的数据保护,可以确保主集群出现故障时不会发生数据丢失。在这种保护模式下,事务需要等REDO日志在主集群和强同步的备集群上都持久化成功才能提交。

最大保护模式下只支持配置一个强同步的备集群,其他备集群只能处于异步同步模式。如果强同步的备集群不可用,主集群会停止写服务。
3、最大可用(Maximum Availability)

这种保护模式在不牺牲集群可用性的前提下提供了最高级别的数据保护。默认情况下,事务要等REDO日志在主集群和强同步的备集群上都持久化成功才能提交。当感知到强同步的备集群出现故障时,主集群不再等日志强同步成功,和最大性能一样优先恢复主集群服务,保证集群可用性。直到强同步的备集群恢复服务,主集群会自动恢复为强同步模式,提供最高级别的数据保护。
最大可用模式下只支持配置一个强同步的备集群,其他备集群只能处于异步同步模式。

四、实现方案

目前,笔者所在单位按照循序渐进原则,分两阶段推进两地三中心容灾架构由当前“主备”模式逐步向“同城双活”模式演进,具体如下:

4.1 第一阶段(主备模式)

【图】 OceanBase数据库集群容灾架构图(主备模式)

如上图所示,延续现有两地三中心容灾体系架构规划,总体保持“主备容灾”模式架构,主备集群保护模式为最大性能,其中:

1.A类系统:数据库集群规划为“同城及异地异步复制容灾”模式,生产、同城及异地三中心分别部署3副本集群,由“生产->同城/异地”异步数据复制容灾保护。

2.B类系统:数据库集群规划为“同城异步复制容灾”模式,生产及同城两中心分别部署3副本集群,由“生产->同城”异步数据复制容灾保护。

3.C/D类系统:数据库集群规划为“本地高可用”,生产中心部署3副本集群,不进行容灾保护。

4.2 第二阶段(同城三中心5副本模式)

【图】 OceanBase数据库集群容灾架构图(同城三中心5副本模式)

如上图所示,两地三中心容灾体系架构逐步演进为“同城三中心5副本”模式,主备集群保护模式为最大性能,其中:

1、A类系统:数据库集群规划为“同城三中心5副本主集群+异地灾备中心备集群”容灾模式,生产及同城三中心部署为5副本主集群(同城租赁第三机房部署第五副本),生产及同城灾备中心集群可同时对外提供服务,任何IDC级的故障,最多损失2份副本,剩余的3份副本依然满足多数派选举,可保障数据库正常运行。

异地灾备中心部署3副本备集群,通过“异步复制”方式对主集群容灾保护,当生产及同城灾备中心都出现灾难时,可启动异地灾备中心备用集群接管业务。

2、B类系统:数据库集群规划为“同城三中心5副本主集群+异地灾备中心备集群”容灾模式,生产及同城三中心部署为5副本主集群(同城租赁第三机房部署第五副本),生产及同城灾备中心集群可同时对外提供服务,任何IDC级的故障,最多损失2份副本,剩余的3份副本依然满足多数派选举,可保障数据库正常运行。

3、C/D类系统:数据库集群规划为“本地高可用”,生产中心部署3副本集群,不进行容灾保护。

欢迎关注社区 "灾备" 技术主题 ,将会不断更新优质资料、文章,您也可以前往提出疑难问题,与同行切磋交流。地址:https://www.talkwithtrend.com/Topic/3457

*本公众号所发布内容仅代表作者观点,不代表社区立场;封面图片由版权数据库授权使用

原创 twt社区 twt企业IT社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/881161.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小包搜题考试

安规考试懒人专用 一、在应用软件商店搜索小包搜题二、微信中找到题库,在微信中点击打开,点击右上角三个点,选择用其他应用打开三、选择小包搜题,进入之后会自动导入题库并给题库命名(随意起),导入成功之后退出小包搜题四、重新进入小包搜题,点击右上角的录屏搜题五、弹…

Qt监控设备离线检测/实时监测设备上下线/显示不同的状态图标/海康大华宇视华为监控系统

一、前言说明 监控系统中一般有很多设备,有些用户希望知道每个设备是否已经上线,最好有不同的状态图标提示,海康的做法是对设备节点的图标和颜色变暗处理,离线的话就变暗,有可能是加了透明度,而大华的处理是有个清晰的图标表示,上线图标右下角有个绿色指示灯,离线的右下…

VIP视频解析之小工具(免费自取)

我们通常会因为看电影但是需要vip却没有足够生活费去支持的困扰 我就在想有没有白嫖的方法呢(bushi 就在我苦恼的时候我发现了一个方法————就是被称为:解析 的技术这玩意就是最好的选择 但是可能部分人在刚刚接触的时候不会用的于是我就写了一个小软件来支持(只支持wind…

2025年值得推荐的 8 款 WPF UI 控件库

前言 今天大姚给大家分享 8 款开源、美观、功能强大、简单易用的WPF UI控件库,希望可以帮助到有需要的同学。 WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用。它提供了灵活的布局、数据绑定、样式和模板、动画效果等功能,让开发者可以…

github官网运行加速方法

github官网打不开的原因 访问github官网时是直接访问域名即github.com,中间有个域名通过DNS解析的过程,将域名解析为对应的ip地址,其实主要时间都是花在了DNS解析上,导致了github有时候能打开,有时候打不开,有时候访问很慢。 解决方案 1、Windows系统打开cmd,输入下列命…

关于AI生成艺术、自动驾驶汽车和Nutella片

Foto di Barbara Zandoval su Unsplash前言:当前时代人们似乎仍然坚信AI没有人类这样的创造力的!那人类的创造力又是什么呢?不也是从开始拥有认识能力,然后逐渐进化到现在空前的创造力的吗?如果AI也自我进化,创造力又能意味着什么? 我是个万事通。作为一名自由职业的在线…

MathType 7.4下载与安装

《数学公式编辑器(MathType)》 [1]是一款专业的数学公式编辑工具,理科生专用的工具。mathtype公式编辑器能够帮助用户在各种文档中插入复杂的数学公式和符号。 数学公式编辑器工具可以轻松输入各种复杂的公式和符号,与Office文档完美结合,显示效果超好,比Office自带的公式编…

支付流程设计常见问题及最佳实践

在实际操作中,支付流程常常面临诸多问题。本文将深入探讨支付流程设计中的常见问题及其最佳实践,供大家参考。今天聊一下支付流程设计的一些常见总是及最佳实践,包括: 组合支付要不要拆支付流水,前端轮询查哪个域,查询要不要穿透到外部渠道,为什么要做同步受理异步处理,…

原 侧边栏公告

<!-- 配置项详情见 https://bndong.github.io/Cnblogs-Theme-SimpleMemory/v2/#/Docs/Customization/config --><script type="text/javascript"> window.cnblogsConfig = {info: {name: , //「待填内容」 用户名startDate: , //「待填内容」 入园时间,…

读算法简史:从美索不达米亚到人工智能时代11搜索网络

20世纪70年代小型计算机普及,苹果推出Apple和Macintosh;蒂姆伯纳斯-李提出万维网,改变了网络访问方式;亚马逊采用个性化推荐算法;谷歌开发PageRank算法,引领网络搜索和关键字广告。1. 小型计算机 1.1. 到了20世纪70年代,小型计算机已在科研院所、大学和大公司中广泛应用…

Roslyn 源代码生成器 SourceGenerator 获取代码文件的本地绝对路径

本文告诉大家如何在源代码生成器 SourceGenerator 里面获取代码文件的本地文件的绝对路径从 compilation 的 Options 拿到 SourceReferenceResolver 对象,调用其 NormalizePath 方法,传入 SyntaxTree 的 FilePath 参数即可 正常项目的 SourceReferenceResolver 都是存在的,尽…

纯 CSS 来计算当前窗口的宽高

在平时我想要计算浏览器窗口的宽度高度的时候,我们会使用 resize 事件去获取,也就是 JavaScript 的方式去获取窗口的宽度高度。 今天给大家分享一个使用纯 CSS 就能计算窗口宽度高度的方法定义自定义属性: 使用@property规则来定义--vw和--vh作为自定义的CSS属性。这些属性…