GBASE南大通用数据库分享:GBase 8c 分布式核心技术CDC数据同步

本文介绍了GBASE8c数据库如何利用CDC技术实现两地三中心的高可用灾备,包括主备式和分布式架构下的数据同步机制,以及如何通过CDC节点确保分布式事务的全局有序性和强一致性。
摘要由CSDN通过智能技术生成

GBASE南大通用数据库分享:

数据库系统作为企业IT基础设施中的重要组件,其稳定性与可用性是上层系统运行的必要基础。并且随着数字化发展,大量的核心业务对于城市级别容灾提出了更高的要求。GBASE南大通用研发的多模多态分布式数据库GBase 8c,可轻松实现例如两地三中心架构的集群异地灾备。GBase 8c异地灾备集群间的不同节点采用各自对应的高可用部署方式,两地间采用同步或者异步复制的备份方式。可以抵御硬件级别故障、机房级别和城市级别灾难,两地之间距离可以大于1000千米。

除此之外,GBase 8c还支持多集群部署,集群间进行数据双向同步来提供异地多活的架构,以满足对高可用有严苛要求的业务需求。GBase 8c实现异地多活的关键,则是其中的数据同步机制,而CDC正是实现数据同步机制的核心技术。

下面将主要介绍GBase 8c数据库中CDC技术的架构及其实现原理。

CDC技术原理

GBase 8c中的CDC (Change Data Capture) ,中文名称为变更数据捕获,是一种通过解析GBase 8c的WAL增量日志,获取表级别的所有数据变化,并将其转换为可以复制到同构或者异构系统格式的机制。

作为一款多模多态分布式数据库,GBase 8c的CDC实现机制及执行流程上可分为主备式及分布式两大类:

主备式

基于逻辑复制的发布订阅功能是实现CDC技术的核心机制,在GBase 8c的主备式架构中,数据同步的发布订阅主要执行流程如下:

1.png

主备式CDC执行流程示意图

本地GBase 8c,可以指定单个表,也可以指定某个数据库中的所有表,作为逻辑复制的发布端。异地GBase 8c为逻辑复制的订阅端,连接本地GBase 8c的服务端口。本地GBase 8c启动一个WalSender线程来读取WAL日志进行解码,并输出特定格式的消息发送给异地GBase 8c的ApplyWorker线程,ApplyWorker识别特定格式的消息后直接执行相应的INSERT\UPDATE\DELETE等语句来完成数据的回放。其中本地的主机通过复制槽(Repliaction Slot)机制来保存消费者偏移量,跟踪订阅者进度。

分布式

不同于主备式架构,分布式架构中DN分布在多台服务器中,本地集群的一个事务可能涉及到多个服务器上的DN节点。因此,异地集群在进行数据同步及回放时,根据不同的事务处理策略,存在两种不同的执行方式。

1. 基于分片的分布式订阅流程

第一种就是基于分片的分布式订阅,此同步方式的核心机制与主备式相同,也是基于逻辑复制功能。不同的地方在于异地集群在进行订阅时,是以本地GBase 8c的DN为基准,启动多个订阅任务,分别连接每个DN节点。此时异地集群在CN中会启动多个 ApplyWorker 线程,每个线程复制一个DN节点的逻辑日志。本地集群的每个DN启动一个WalSender线程来读取本DN节点WAL日志进行解码,并输出特定格式的消息发送给异地GBase 8c的ApplyWorker线程进行数据回放。

2.png

基于分片的分布式订阅流程示意图

此种同步方式,虽然是以DN节点个数为并行度进行并行同步,同步效率高,但因为没有有效的机制保证本地集群的分布式事务在异地集群回放的全局有序性,所以也就无法保证回放事务的原子性与全局事务一致性,只能保证数据的最终一致性。

2. CDC 发布订阅操作执行流程

为了解决基于分片的分布式订阅无法保证数据回放的全局事务一致性问题,在分布式架构场景下的第二种同步方式中,GBase 8c新增了CDC节点,通过对所有DN上的分布式事务进行合并和排序,来保证异地集群上的事务能够全局有序性的回放,实现数据的强一致,保证分布式事务的原子性。

CDC节点整体的架构如下图所示:

3.png

CDC架构图

CDC节点采用和CN类似的无状态设计,只存储本地集群的元数据信息,当CDC节点异常宕掉后,重新拉起实例或使用备用节点即可继续服务。按功能不同,CDC内部主要由3个角色组成:

1. Dumper

Dumper通过逻辑复制的方式从DN上拉取逻辑解码后的WAL增量日志,将事务信息输出给Joiner进行排序合并。

2. Joiner

Joiner负责接受各个Dumper发送过来的事务信息,将具有相同的csn事务进行合并后按照csn顺序进行排序,以构建完整的全局事务输出给Output线程。

3. Output

Output负责将完整的事务流输出给异地集群,输出的格式支持json、sql、internaloutput(类似于pgoutput格式)。当异地集群是GBase 8c数据库时,使用internaloutput格式进行replay性能最优。

该CDC 同步机制的发布订阅流程具体如下:

4.png

CDC执行流程示意图

此时异地GBase 8c集群将连接本地GBase 8c集群的CDC节点来进行订阅任务的创建。本地集群的CDC节点启动n个Dumper线程,并开始接收多个WalSender线程输出的逻辑解码增量日志。随后CDC的Joiner线程通过将增量日志消息进行事务合并和排序操作,构建出完整有序的全局事务信息,并最终由Output线程对外进行输出。最后异地集群CN节点启动ApplyWorker线程,对Output线程发来的特定格式信息进行逻辑日志解析及回放操作,完成数据同步。此种数据同步方式保证了异地集群上的事务回放的全局有序性,实现了数据的强一致。

关于 GBase 8c

GBase 8c是GBASE南大通用基于openGauss3.0构建的一款多模多态的分布式数据库,支持行存、列存、内存等多种存储模式和单机、主备式、分布式等多种部署形态。GBase 8c具备高性能、高可用、弹性伸缩、高安全性等特性,可以部署在物理机、虚拟机、容器、私有云和公有云,为关键行业核心系统、互联网业务系统和政企业务系统提供安全、稳定、可靠的数据存储和管理服务。

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要导入表数据到gbase 8c数据库,可以使用以下步骤: 1. 准备数据库和表结构: 在gbase 8c中创建数据库和表结构,确保表结构与要导入的数据匹配。 2. 准备数据文件: 将要导入的数据保存为文本文件,确保数据文件的格式与表结构中的列对应。 3. 使用gbase 8c命令行工具: 打开gbase 8c命令行工具,登录到数据库。 4. 使用load data命令: 在gbase 8c命令行工具中使用load data命令导入数据。例如,假设要导入的数据文件名为data.txt,表名为table1,可以使用以下命令导入数据: ``` load data local infile 'data.txt' into table table1; ``` 这将把data.txt文件中的数据导入到table1表中。 5. 检查导入结果: 导入完成后,可以使用select语句检查已导入的数据是否正确。例如,可以使用以下命令检查table1表中的数据: ``` select * from table1; ``` 如果数据导入成功,将会显示导入的数据。 需要注意的是,导入数据时需要确保数据文件的格式与表结构的列对应,否则可能会导致导入失败或数据错误。此外,还可以使用其他方法如使用ETL工具或编写脚本来导入数据,在实际操作中可以根据具体需求选择合适的方法。 ### 回答2: 要导入gbase 8c的表数据,可以按照以下步骤进行操作: 1. 首先,在gbase 8c的客户端工具中登录到目标数据库。 2. 使用 "source" 命令指定表数据的来源文件路径。例如,假设表数据文件名为 "data.txt",该文件位于 "/home/user/data/" 目录下,则可以使用以下命令导入数据: `source /home/user/data/data.txt;` 3. 确保指定的数据文件路径和文件名正确,并且文件可以在当前登录的服务器上访问。 4. 执行以上命令后,gbase 8c将开始导入数据。可以使用 "show processlist;" 命令来查看导入进程的状态和进度。 5. 导入过程中,可以根据需要设置导入的配置选项,如并发线程数、批量提交大小等,以优化导入性能。具体的配置选项可以在导入命令之前设置。 需要注意的是,导入数据过程中需要确保表结构与数据文件的格式相匹配,否则可能导致导入失败或数据错误。在导入之前,可以使用DESCRIBE命令来查看表的结构信息,以确保数据文件与表结构一致。 另外,还可以使用其他工具或脚本来导入数据,如使用LOAD DATA命令、使用ETL工具等。在选择合适的导入方式时,可以根据实际需求和具体情况进行选择。 ### 回答3: gbase 8c 是一个关系型数据库管理系统,用于存储和管理数据。要导入表数据到 gbase 8c 数据库中,可以按照以下步骤进行操作: 1. 准备数据文件:首先,需要准备一个包含要导入的数据的文件,可以是 CSV、TXT 或其他格式的文件。确保文件的格式符合 gbase 8c 数据库的要求。 2. 创建目标表:在 gbase 8c 数据库中,首先需要创建一个目标表,用于存储导入的数据。可以使用 gbase 8c 提供的 CREATE TABLE 语句来创建表,定义表的结构和列的属性。 3. 导入表数据:接下来,可以使用 gbase 8c 提供的 LOAD DATA 语句来导入表数据。该语句的基本语法如下: LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'data_file' [REPLACE | IGNORE] INTO TABLE tbl_name [PARTITION (partition_name[, partition_name] ...)] [IGNORE number {LINES | ROWS}] [SET col_name = expr, ...] 在语法中,data_file 为前面准备的数据文件的路径和文件名,tbl_name 为目标表的名称。语句中的其他参数根据需求进行设置。例如,可以使用 IGNORE 关键字来忽略数据文件中的错误行。 4. 等待导入完成:一旦执行 LOAD DATA 语句,系统将开始导入表数据。根据数据文件的大小和服务器的性能,导入时间可能会有所不同。在导入过程中,请耐心等待,直到导入完成。 需要注意的是,在导入表数据之前,请确保数据文件中的数据与表的结构相匹配,以避免错误或数据丢失。另外,还可以根据需要调整 LOAD DATA 语句中的参数,以满足特定的导入需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值