国产分布式数据库灾备高可用实现

最近在进行核心业务系统的切换演练测试,就在想一个最佳的分布式数据库高可用部署方案是如何保证数据不丢、系统可用的,做到故障时候可切换、可回切,并且业务数据的一致性。本文简要介绍了OceanBase数据库和GoldenDB数据库在灾备高可用的部署方案,以参考。


在生产环境数据库相关的变更操作时,可能因为DML或DDL操作导致数据被篡改或者表结构不可逆,此时需要数据库提供一种高可用机制和能力恢复到变更前的时点,以保证业务的连续性。主要有两种思路,一种是闪回功能将数据恢复到变更操作的时点;另一种是延迟复制,备节点和主节点之间的数据复制设置一个延迟时间,主节点出现逻辑上的误操作时,利用备节点延迟同步来恢复数据。

1)闪回功能

国产数据库中很多已支持闪回功能,比如TiDB、GaussDB、OpenGauss、OceanBase等。以GaussDB为例在Ustore引擎中闪回功能,通过参数enable_recyclebin控制回收站的实时打开和关闭。并通过recyclebin_retention_time参数设置回收站对象保留时间,超过该时间的回收站对象将被自动清理。

2)延迟复制

在主备部署架构的数据库中,基本都能实现延迟复制功能,像MySQL、OpenGauss这样的单实例数据库。比如在OpenGauss数据库中的延迟复制,允许将回放延时一段指定的时间后进行回放,提供一份可查询一段时间之前的数据副本;在MySQL数据库中通过MASTER_DELAY来配置主节点和备节点的复制延迟。

在集中式主备架构的延迟复制实现基础之上,分布式数据库在架构上如何实现延迟复制以保证高可用。对于分布式架构的难点之一是如何确保故障场景下各个分片之间的数据一致性。对于国产分布式数据库OceanBase、GoldenDB以及TiDB等,已经有不少成熟的方案。本文将重点介绍OceanBase数据库的物理备库方案和GoldenDB数据库的DRSP灾备集群方案,不仅仅实现了延迟复制功能,而且满足灾备切换方案的多样性和灵活性,如异地灾备方案和孤岛验证方案。

1、OceanBase数据库物理备库方案

OceanBase数据库支持多副本的高可用容灾方案,同时也支持基于物理备库的准实时热备份方案。当生产主库出现故障时,备库可以接管服务,最大限度降低服务停机时间,减少可能带来的数据损失。从V4.1.0版本开始,OceanBase数据库按照租户粒度提供物理备库能力,分为主租户和备租户:主租户是业务运行的租户,提供完整的数据库服务能力;备租户只提供容灾和只读服务能力。

OceanBase的物理备库主要通过日志传输服务和日志存储服务来完成日志的传输及存储,并通过日志回放服务来保证主备租户数据的一致,其中:

  • 日志传输服务在主租户和备租户之间实时同步 Redo 日志。当前OceanBase数据库物理备库仅提供异步同步模式。
  • 日志存储服务为物理备库提供高可用、高可靠的日志存储和读写能力。
  • 备租户写入日志存储服务的日志会通过日志回放服务实时或延后地应用到内存的MemStore之中,以保证主租户和备租户的数据完全一致。
1.1 物理备库的部署方案

OceanBase物理备库的部署方案中,可以按照集群中主租户和备租户进行不同的组合,主租户和备租户可以在同一个集群中,也可以在不同的集群中。典型的部署方案有几种:

  1. 集群中仅有主租户或备租户:包括多个OceanBase集群,业务租户在一个集群,备租户在另外一个集群,中间采用异步复制的方式,满足异地容灾的高可用需求;
  2. 集群中既有主租户又有备租户:多中心多活的部署架构,不同地域之间的集群互为主备;
  3. 主租户和备租户在同一个集群中:主备租户在同一个集群中进行管理,适用于数据库变更或升级的场景,又不需要增加额外的管理集群资源。

在这里插入图片描述

第三种部署架构适合租户在升级或者数据库变更操作前,在备租户中保留一份数据库快照,将被租户的同步暂停。业务在主租户上进行升级变更等操作,如果变更异常,将备租户切换为主租户对外提供服务,以保证业务的连续性。

1.2 物理备库的日志传输

物理备库通过日志传输服务在主租户和备租户之间实时同步Redo日志,备租户既可以通过主租户的日志归档来获取日志,也可以通过网络直连主租户所在的集群来获取日志。

  • 基于日志归档的物理备库:主租户开启日志归档将日志归档到目标存储(OSS/NFS)中,备租户恢复归档日志实现数据同步;需要主租户和备租户开启归档模式。
  • 基于网络传输的物理备库:备租户直接通过网络连接主租户或其他备租户读取日志,类似于MySQL数据库的复制方式。

在这里插入图片描述

在基于网络传输的部署模式下,备租户从主租户读取的日志,既可以是主租户的在线日志,也可以是主租户的归档日志。同时这种模式下支持集群级别的限速。

1)暂停或开启日志同步

#登录备租户或所在集群的sys租户,执行命令暂停租户日志同步
ALTER SYSTEM RECOVER STANDBY [TENANT = tenant_name] CANCEL ;
#登录备租户或所在集群的sys租户,执行命令开启租户日志同步
ALTER SYSTEM RECOVER STANDBY [TENANT = tenant_name] UNTIL UNLIMITED;

需要注意的是,暂停日志同步后,备租户不会再从主租户同步任何日志,尽量避免因暂停日志同步而导致的备租户日志断流。

2)查看日志同步进度

#执行SQL查看备租户同步进度
SELECT TENANT_NAME, TENANT_ID, TENANT_ROLE, SCN_TO_TIMESTAMP(SYNC_SCN) 
FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'standby_tenant';
+----------------+-----------+-------------+----------------------------+
| TENANT_NAME    | TENANT_ID | TENANT_ROLE | SCN_TO_TIMESTAMP(SYNC_SCN) |
+----------------+-----------+-------------+----------------------------+
| standby_tenant |      1004 | STANDBY     | 2023-04-14 16:38:53.938774 |
+----------------+-----------+-------------+----------------------------+
1 row in set

3)设置同步限速

适用于集群之间备租户同步限速

  • standby_fetch_log_bandwidth_limit:用于设置备租户所在集群中,可用于备租户从主租户或源端租户进行日志同步的所有带宽的总和。
  • _server_standby_fetch_log_bandwidth_limit:用于设置备租户所在集群的单个 OBServer 节点中,可用于备租户从主租户或源端租户进行日志同步的带宽。
1.3 日志存储服务

OceanBase数据库中日志存储服务使用Paxos协议实现高可用,其中主租户和备租户中的日志存储服务使用了不同的工作模式:

  • APPEND模式:主租户上使用APPEND模式。在该模式下,主租户日志流的Leader会接收事务、DDL等上层模块写入的数据,并将这些数据在主租户的多个副本之间使用 Paxos 协议进行同步并持久化。
  • RAW_WRITE模式:备租户上使用RAW_WRITE模式。在该模式下,备租户日志流的Leader拒绝任何上层模块直接写入的数据,仅允许通过日志传输服务从主租户同步物理日志,且这些物理日志的内容、LSN、SCN等信息均由主租户生成。

在数据同步过程中,每一条日志都会在主租户上生成一组唯一的LSN和SCN值。其中,LSN用于定位这条日志在存储服务中的物理位置信息;SCN用于代表这条日志在存储服务中的时序关系,上层服务可以使用SCN值对多个日志流之间的日志进行定序。

另外,无论是主租户还是备租户,在Paxos Group日志流副本中都会有LEADER和FOLLOWER两种角色。对于主租户,其业务数据是在日志流的Leader节点上写入,再同步给所有Follower节点;对于备租户,日志流的Leader节点主要负责通过日志传输服务从主租户同步日志,并将同步过来的日志再同步给Paxos Group中的Follower节点。

1.4 主租户和备租户切换

OceanBase数据库的主租户和备租户可以通过SwitchOver和Failover操作动态改变租户角色:

  • Switchover:在用户计划内对租户角色进行变更。执行 Switchover操作后,主租户会与对应的备租户会交换租户角色,整个过程数据不丢失RPO = 0,执行时间一般为秒级。
#将主租户切换为备租户
ALTER SYSTEM SWITCHOVER TO STANDBY TENANT = tenant_name;
#将备租户切换为主租户
ALTER SYSTEM SWITCHOVER TO PRIMARY TENANT = tenant_name;
  • Failover:在主租户出现无法恢复的故障时所做的切换行为。执行Failover操作后,对应的备租户角色会变换成主。同时,如果对主租户故障前一直正常同步的备租户执行Failover操作,则执行Failover操作后,一般会产生百毫秒级别的数据损失,执行时间一般为秒级。
#将备租户切换为主租户
ALTER SYSTEM ACTIVATE STANDBY TENANT = tenant_name;

Failover操作需要在操作执行完成后达到数据一致的状态,故系统会选择所有日志流的同步位点中SCN最小的值作为Failover的执行位点。执行Failover操作后,租户下的所有日志流都会统一回退到该位点。

2、GoldenDB数据库

在这里插入图片描述

GoldenDB分布式数据库除了支持同一套集群多中心的部署架构外,还支持DRSP的灾备部署方案。DRSP高可用架构包括生产库和灾备库/应急库,生产库是正常对外提供服务的GoldenDB集群;灾备库正常情况不提供服务,从生产库复制数据的GoldenDB系统,用于提供灾难、应急等场景下的紧急启动能力,代替生产库提供服务。如果所示,DRSP灾备集群运行有三种模式:

  1. 数据同步模式:元数据、GTM数据、数据节点分别从源端生产库同步到目标端灾备库,可通过配置延时时间让同步过来的数据延时应用到灾备库上。
  2. 数据恢复模式:应用、检查、修复同步过来的数据,使最终数据满足分布式一致性要求。
  3. 服务模式:启用灾备集群,对外提供服务,,提供GoldenDB系统绝大部分正常功能。

这种部署方案的优点是生产集群和灾备集群单独维护,故障互不影响。相比较异地故障切换或者灾备孤岛演练,在切换方案上更为迅速灵活。相对应的缺点就是需要单独维护两套系统,增加了运维的复杂度。

2.1 不同模式切换

1)数据同步模式

正常情况下,生产库处于服务模式,此时灾备库应当进入延时复制模式(sync模式)接入生产库。执行以下命令进入延时复制模式:

sh AllControl.sh -sync 1 -delay_time=

delay_time填写延时应用的时间,单位为秒;如果不需要延时则填0

2)数据恢复模式

当生产库发生故障或误操作时,需要切换至灾备库进行接管,此时灾备库应当先进入数据恢复模式(recovery模式)恢复数据,再切换至服务模式对外提供服务。

  • 命令退出延时复制模式
sh AllControl.sh -stopsync 1
  • 指定需要回放到的时刻或GTID
#指定回放时刻
sh bat_mod_relaytime.sh 1 "RELAY_TIME"
#回放所有relay log
sh bat_mod_relaytime.sh 1 ""
#指定回放的GTID

三种场景中记录下的回放时刻在回切时会作为生产库元数据同步的起始时刻

  • 进入灾备库数据恢复模式
sh AllControl.sh -recover 1

3)数据服务模式

数据恢复完成后,通过以下步骤切换至服务模式

sh AllControl.sh -service 1

当灾备库不再需要服务时,执行命令退出服务模式

2.2 灾备库回切

当灾备库服务一段时间以后,需要将服务回切至生产库,要求生产库数据和灾备库基本一致。此时可以将生产库和灾备库角色对调,将生产库接入当前已服务的灾备库中,从灾备库同步数据。停止灾备库业务,等待生产库同步数据完成后启动生产库,由生产库提供服务。

  • 登录生产库某一管理节点服务器,将生产库退出服务模式
sh AllControl.sh -stopservice 1
  • 生产库集群1停服
sh start_stop_service.sh -stop_dbproxy 1
  • 修改元数据同步起始时刻,回滚生产库集群至一致性时刻,并进行分片数据一致性校验
sh bat_mod_laststamp.sh "1" "2024-01-01 10:00:00"
其中1为集群ID,"2024-01-01 10:00:00"为元数据同步起始时刻,该时刻根据灾备库进行恢复时设置的恢复时间确定
  • purge生产库完成回滚且主备数据一致的分片
  • 生产库进入延时复制模式
sh AllControl.sh -sync 1 -delay_time=0
  • 逐步停掉灾备库上的业务,让proxy上所有事务都提交。禁用灾备库集群1,停止该集群绑定的所有proxy进程。
  • 生产库退出复制模式并进入服务模式
  • 灾备库退出服务模式并进入延迟复制模式
2.3 灾备演练场景回切

在灾备孤岛等演练场景下,灾备站点和生产站点孤岛隔离,演练结束后,需要将灾备站点的数据回滚到演练前的时刻。GoldenDB数据库的DRSP复制方案中提供了闪回功能,将数据闪回到灾备库恢复之后,提供服务之前的一个时刻。

  1. 快照持久化:针对灾备库,在灾备库执行服务模式起连接实例之前,将当前灾备库的快照点持久化到RDB库。为后续的闪回提供服务。
  2. 闪回:将灾备库服务模式下产生的业务恢复至快照点,方法是执行性反向sql,所以灾备库服务期间,如果有DDL,可能会失败。此时根据实际情况,看是否需要备份恢复。
  3. 备机回放检查:闪回功能是通过在主机上执行反向sql来完成回滚操作,所以备机可以以同步回放的方式进行数据同步。所以需要所有备机回放完全完成才可以下一步的purge。
  4. purge:闪回通过反向sql实现的,所有本身的灾备库gtid_set会一直增加,所以需要通过purge操作将gtid_set恢复至快照时刻。

以上是OceanBase数据库和GoldenDB数据库延迟复制和灾备的高可用实现方案简单总结,实际实现过程更为复杂,以官方的文档材料为准。


参考资料:

  1. https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000818706
  2. GoldenDB数据库DRSP双集群同步

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Springboot ResourceLoader获取指定package目录下所有的类(get class in jar on Linux)

get class in jar on Linux Springboot ResourceLoader获取指定package目录下所有的类 PathMatchingResourcePatternResolver resolver new PathMatchingResourcePatternResolver();String pattern ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX ClassUtils.convertClas…

《概率论与数理统计》期末复习笔记_下

目录 第4章 随机变量的数字特征 4.1 数学期望 4.2 方差 4.3 常见分布的期望与方差 4.4 协方差与相关系教 第5章 大数定律和中心极限定理 5.1 大数定律 5.2 中心极限定理 第6章 样本与抽样分布 6.1 数理统汁的基本概念 6.2 抽样分布 6.2.1 卡方分布 6.2.2 t分布 6.…

join()方法——连接字符串、元组、列表和字典

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 join()方法用于连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串&#…

全球点赞第一起名大师颜廷利:是金子总会“花光”的

在物质世界的繁华背后,隐藏着一个深刻的真理:有形之物的分享会逐渐减少,而无形之物的传递却能不断增值。金钱、货币、银两这些商业领域的实体,往往激发出人类对更多财富的渴望和对资源枯竭的恐惧。这种恐惧源于资源的有限性&#…

CSDN写文章时需要上、下标字号怎么输?

上标:​^^,符号中间加字 下标:~~,符号中间加字 前题是用MD编辑器,不然白搭: 我是感觉CSDN这个文本编辑比较拉,非常想吐槽。

10_网络规划和管理

目录 网络拓扑结构 网络拓扑结构分类 层次化局域网模型 建筑物综合布线系统 网络管理命令 其他知识点汇总 网络地址翻译 默认网关 PPP 冲突域和广播域 网络拓扑结构 网络拓扑结构分类 网络拓扑结构按分布范围分类见表 网络拓扑结构按范围分类 网络分类 缩写 分布…

商场配电新思维:智能网关驱动的自动化管理系统

在商场配电室监控系统中,主要是以无线网络为载体,目的就是便于对变电站等实时监测与控制。其中,4G配电网关非常关键,可以将配电室系统终端上的信息数据及时上传到服务器,再由服务器下达控制指令到各模块中,…

git客户端工具之Github,适用于windows和mac

对于我本人,我已经习惯了使用Github Desktop,不同的公司使用的代码管理平台不一样,就好奇Github Desktop是不是也适用于其他平台,结果是可以的。 一、克隆代码 File --> Clone repository… 选择第三种URL方式,输入url &…

08 - matlab m_map地学绘图工具基础函数 - 绘制线、图例、添加文字注释等函数

08 - matlab m_map地学绘图工具基础函数 - 绘制线、图例、添加文字注释等函数 0. 引言1. 关于m_line2. 关于m_quiver3. 关于m_text4. 关于m_plot5. 结语 0. 引言 本篇介绍下m_map中添加绘制基础线(m_line、m_plot)、绘制箭头(m_quiver&#x…

探索数据赋能的未来趋势:嵌入式BI技术的挑战与突破

数据分析能力越来越成为消费者和企业的必备品应用程序,复杂程度各不相同,从简单地一个网页或门户上托管一个可视化或仪表板,到在一个云服务上实现数据探索、建模、报告和可视化创建的应用程序。BI的实现方式越来越多,无论规模大小…

基于PHP的长城景区信息管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的长城景区信息管理系统 一 介绍 此长城景区信息管理系统基于原生PHP开发,数据库mysql。系统角色分为用户和管理员。 技术栈:phpmysqlphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 浏览长城景区信息(旅…

AI 上车的一些随想

​最近一直在做AI大模型上车的战略企划工作,听了好多供应商的宣讲,自己也查阅了大量书籍、资料。信息输入呈现爆炸性增长,受限于专业知识水平,仅能在应用层面上有所思考。纯个人观点,仅供参考。 车自古以来都是移动工…

JVM原理(七):JVM虚拟机的内存分配与回收策略

Java技术体系的自动内存管理,最根本的目标是自动化解决两个问题:自动给对象分配内存和 自动回收分配给对象的内存 1. 对象优先在Eden分配 参数解释-Xms初始堆大小-Xmx最大堆大小-XX:NewSizen设置年轻代大小-XX:NewRation设置年轻代和年老代的比值。如:为…

【PHP】控制摄像头缩放监控画面大小,并保存可视画面为图片

一、前言 功能描述 调用摄像头并可以控制缩放摄像头监控画面的大小,把可视画面保存为图片。 我使用的是USB摄像头,其他摄像头此方法应该也通用。 使用技术 使用到的技术比较简单,前端使用WebcamJS插件调用摄像头,并摄像头监控…

Java进阶学习|Day3.Java集合类(容器),Stream的使用,哈希初接触

java集合类(容器) Java中的集合类主要由Collection和Map这两个接口派生而出,其中Collection接口又派生出三个子接口,分别是Set、List、Queue。所有的Java集合类,都是Set、List、Queue、Map这四个接口的实现类&#xf…

VuePress日常使用

什么是主题?读者对主题这个单词应该不陌生,例如大部分 APP 都支持白天主题和夜晚主题等,使用者可以很轻松的切换主题等等。VuePress 中也有类似的概念。 ‍ VuePress 的主题 在 VuePress 中,主题不仅仅是外观上的不同&#xff…

#17前端后花园周刊-ECMAScript 2024、JS新set方法、TS5.5、理解React Compiler

⚡️行业动态 Ecma International 批准 ECMAScript 2024:有何新内容? Ecma 大会批准了最新的 ECMAScript / JavaScript 语言规范,正式使其成为标准。与 ECMAScript 2023 一样,这只是向前迈出的一小步,但 Axel 博士研…

详细配置SQL Server的链接服务器(图文操作Mysql数据库)

目录 前言1. MySQL ODBC 驱动2. 配置 SQL Server 链接服务器3. 彩蛋前言 此处配置以及安装没有什么理论知识 所以直奔主题,跟着以下步骤配置安装即可 需求:准备在10.197.0.110中链接外部的10.197.0.96的mysql数据源 已默认在10.197.0.96中安装了MySQL数据库并且知道其连接信…

Gradio 4.37.1官方教程三:Chatbot

文章目录 一、使用ChatInterface创建聊天机器人1.1 定义聊天函数1.2 流式聊天机器人(Streaming chatbots)1.3 自定义聊天机器人1.4 添加多模态功能1.5 通过additional_inputs添加额外组件1.6 直接添加 Gradio 组件1.7 通过 API 使用聊天机器人1.7.1 调用…

苹果可能与谷歌合作推AI订阅服务;全国首个司法审判大模型在深圳上线

🦉 AI新闻 🚀 苹果可能与谷歌合作推AI订阅服务 摘要:苹果宣布将与OpenAI合作推出Apple Intelligence,并有望在今年秋季与谷歌达成合作,接入Gemini。Meta的Llama因质量不佳被拒。苹果计划推出订阅模式的智能功能服务&…