达梦数据库系列—22. DPC集群原理

目录

DPC原理

1、系统原理

2、元数据服务

3、数据存储

4、执行计划的生成

5、计算与存储分离

6、动态增删节点

7、分布式事务一致性

第一阶段 预提交

第二阶段 提交

8、RAFT 归档

9、自动故障处理


DPC原理

计划生成节点(SP)对外响应数据库请求,生成并调度计划。

数据存储节点(BP)存储实际的数据,接收并执行发来的子计划。

元数据节点(MP)提供元数据服务。

1、系统原理

RAFT组

bp11   bp12  bp13   raft1    tbs1

bp21   bp22  bp23   raft2    tbs2

1.每个表空间只能指定一个raft组,创建的时候指定。

        例:CREATE TABLESPACE TS_1 DATAFILE 'TS_1.DBF' SIZE 128 STORAGE( ON RAFT_1);

        创建好后的raft组节点可以更改吗?

        可以通过增加删除的方式更改,但要注意数据的手动迁移:

        增加:

        SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP11', 'BP', 6002, 5238, '192.168.64.133', '192.168.64.133','STANDBY', 0, 'BP instance');

        删除:

        SP_DROP_DPC_INSTANCE('BP_1');

        表空间可以整体从raft1迁移到raft2吗?

        是可以的:alter tablespace ts_01 move to raft_2;

2.创建表,以及每个分区,可以STORAGE语句指定不同的表空间

        表的迁移?

        表有很多个分区,每个分区在一个表空间上

        那么表的某个分区可以从一个表空间(raft1)迁移到另一个表空间(raft2)上吗?

        可以的:alter table test22 move partition PAR5 to TS_1;

        整个表的迁移,需要一个一个分区进行迁移。

查询

  1. 客户端发送请求给 SP;
  2. SP 生成执行计划,同时 SP 向 MP 申请获取字典信息;
  3. MP 返回字典信息给 SP;
  4. SP 将生成的执行计划中的一个或多个子计划发送给此次查询相关的 BP;
  5. 相关 BP 接收并执行子计划。根据实际需要,不同 BP 间、同一 BP 不同线程间可能存在数据交换;
  6. 相关 BP 在子计划执行完成时将成功与否信息和/或请求调度信息返回 SP;
  7. SP 向客户端返回最终查询结果。

插入/更新

        SP 端的插入操作符计算出待插入数据所属的 BP 站点,然后以站点为单位逐一发送插入操作符和待插入/更新数据给 BP。BP 端负责插入/更新。

2、元数据服务

        在 DMDPC 中,为了简化 DDL 的处理,使用专门的元数据服务器 MP 负责管理所有的字典对象元数据信息。所有 SP 和 BP 都是通过网络请求从 MP 获取字典对象的。

        SP 获取字典对象的步骤如下:

  1. SP 在自己的字典缓存中查找是否有该对象的缓存,如果有则直接使用该对象,否则执行步骤 2;
  2. SP 向 MP 发出请求,获取某个特定 ID 的字典对象;
  3. MP 接收请求后从系统表中加载对应的字典对象,然后返回 SP;
  4. SP 解包 MP 返回的字典对象并添加到自己的缓存中。

3、数据存储

        DMDPC 的数据存储在各个 BP 中。

        表空间的元数据信息由 MP 进行管理。所有本地表空间元信息都记录在 MP 的控制文件中。

4、执行计划的生成

        DMDPC 的执行计划是在单机数据库执行计划的基础上插入了数据交换操作符 ESEND/ERECV 后形成的。数据交换操作符的插入只发生在特定的操作符中。例如:连接、分组、排序等。

5、计算与存储分离

        将数据获取相关的子计划放在 BP 上,中间层计算相关的子任务放在一个或多个 SP 上执行。当连接和分组、去重等操作需要用到多个计算节点时,优化器会从 DMDPC 集群选择多个 SP 节点。

XMAL 系统

        XMAL 系统是基于 TCP/IP 协议实现的一种内部通信机制,具有可靠、灵活、高效的特性。XMAL 专门用于 DMDPC 分布式架构中。DM 通过 XMAL 系统实现 REDO 日志传输,以及其他一些实例间的消息通信。

        DMDPC 使用 XMAL 系统管理各部件节点网络信息,建立节点间的通信机制。用户只需要将 SP 和 BP 节点的 IP 地址和端口等信息注册到 MP 上即可,使得增删节点的部署能够做到快速且便捷。

6、动态增删节点

横向增删:

        支持删除 SP 组、BP 组、RAFT 组、BP 节点或 SP 节点:

  1. 只有正常退出的 SP 节点才能删除;
  2. 没有数据的 RAFT 组内节点才能删除。如果想删除包含数据的 BP 节点,必须先将此节点上的数据迁移到其他分区,具体见“数据迁移”;
  3. 删除 RAFT 组必须先删除组内包含的所有节点;

纵向增删:

7、分布式事务一致性

        DMDPC 通过两阶段提交技术来保证多个 BP 之间的分布式事务一致性。

        SP 作为全局事务的协调者,统一处理全局事务。BP 作为参与者,是被 SP 调度并执行事务的节点。

第一阶段 预提交

  1. 客户端向 SP 发起事务提交请求。
  2. SP 向所有参与者 BP 广播预提交命令。询问是否可以进行事务 COMMIT,并等待 BP 的响应。
  3. BP 接收到预提交命令之后,将相关操作生成回滚日志写入回滚段并响应 SP。
  4. 如果 SP 收到所有参与者 BP 的预提交成功的消息,则进入第二阶段进行提交。否则,当存在 BP 没有响应导致 SP 无法确定该 BP 是否执行了预提交时,SP 先尝试通知存活 BP 执行回滚。若有 BP 回滚成功,SP 就可以直接响应“事务提交失败”给客户端;

第二阶段 提交

  1. SP 向所有参与者 BP 广播 COMMIT 命令。
  2. BP 接收到提交命令之后,执行二阶段的提交任务,释放事务资源,并将 COMMIT 成功结果反馈给 SP。
  3. SP 收到所有参与者 BP 的 COMMIT 成功消息之后,直接响应客户端事务提交成功。二阶段提交时若遇到 BP 与 SP 通信中断,SP 会将提交任务交由异步任务进行处理并立即响应客户端事务提交成功。

        全局时钟(GTS)值由 MP 节点统一管理。BP 节点执行事务内的每条语句、执行预提交、提交操作时均会向 MP 申请当前的全局时钟值。

事务对数据进行操作时,BP 都会向 MP 申请当前的全局时钟值 cur_seq。只要是当前事务操作时钟值 cur_seq 之前的已提交事务修改的数据,对当前事务都是可见的。

  1. 当事务对数据进行修改时,日志记录中会登记修改该数据的事务号 TID。
  2. 当事务执行一阶段预提交时,CA 中会登记 TID、预提交状态和预提交时的时钟值。
  3. 当事务二阶段提交时,MCA 会登记 TID 和提交时的时钟值,CA 会将第 2 步中登记的信息更新为最终的提交状态和提交时的时钟值。

8、RAFT 归档

        多副本系统中的主库通过 RAFT 归档方式向备库同步数据。RAFT 归档将主库产生的 Redo 日志通过 XMAL 模块传递到备库。

        RAFT 归档的执行流程是主库在 Redo 日志(RLOG_PKG)写入联机日志文件前,将 Redo 日志发送到备库,并且不需要等待备库的响应消息,主库继续往下正常执行。备库收到 Redo 日志(RLOG_PKG)后,将日志包加入日志重演任务系统,在日志包写入本地日志文件后,发送日志刷盘消息给主库,主库根据此消息确定是否需要推进 C_SEQNO 和 C_LSN。

C_SEQNO 是已经提交的日志包序号,C_LSN 是已经提交的 C_SEQNO 日志包中的最大 LSN。

9、自动故障处理

        当出现硬件故障(掉电、存储损坏等)原因导致主库无法启动,或者是主库内部网卡故障导致主库短期不能恢复正常的情况下,剩余活动节点会自动启动选举流程,选出新的主库,其他节点仍然作为备库运行,选举完成后,多副本集群仍可对外提供服务。

        选举新主库的前提条件是活动节点个数需超过配置的总节点个数的一半。

        备库出现故障时,主库发送心跳或者日志包失败后,会将其归档状态失效,不再向故障备库同步数据。

        主库故障恢复时,多副本系统中如果已经有新主库,则会自动将老主库切换为备库重新加入多副本系统,并自动向其发起异步数据同步,直到主备库数据完全同步一致。

        备库故障恢复后,多数情况下仍然是作为跟随者重新加入多副本系统,除非重新加入时没有活动主库才会尝试选举为新主库。

达梦技术社区:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

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

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

相关文章

【PTGui、Pano2VR6、UE4】VR全景拍摄及漫游交互制作操作实例(更新中)

一、基本思路 首先进行VR全景拍摄,获取高质量的全景图像;然后使用PTGui进行图像拼接,确保图像的连续性与准确性;接着利用Pano2VR6进行VR漫游的制作,添加交互元素与多媒体内容;最后进行作品的调试与优化&am…

Node之Web服务

前言 本文将讲解node的web服务 通过讲解http请求,node创建web服务等知识点让你更加深入的理解web服务和node创建的web服务 HTTP请求是什么? HTTP请求是客户端(通常是浏览器或其他应用程序)与服务器之间进行通信的一种方式。 …

【Qt之·类QVariant·数据类型】

系列文章目录 文章目录 前言一、概述二、操作及用法1.1 存储数据1.2 获取数据1.3 设置数据1.4 数据类型判断1.5 判断数据是否有效 三、实例演示总结 前言 QVariant是Qt开发中非常重要的一部分,它是Qt的一个核心类,用于处理不同数据类型之间的转换和传递。…

使用vite官网和vue3官网分别都可以创建vue3项目

问: npm init vitelatest 和 npm create vuelatest创建的vue3项目有什么区别? 回答: npm init vitelatest 和 npm create vuelatest 分别是使用 Vite 和 Vue CLI 工具创建 Vue 项目的两种方式,它们之间有几个主要区别: 1. **构建工具:** …

Linux--信号(万字详解!超完整!)

目录 0.预备知识 0.1.基本概念 0.2.信号的捕捉 0.3.理解信号的发送与保存 1.信号的产生(阶段一) 1.通过kill命令,向指定进程发送指定的信号 2.通过终端按键产生信号:ctrlc(信号2),ctrl\(…

南方健康2024米思会:科普患教赋能医药增长闭环,千亿蓝海市场大爆发!

2024年6月25日-28日,在中国•南太湖举办的2024米思会如约而至,顺利落下帷幕,本次大会以“韧进启新局”为主题,以不懈进取的“韧劲”,立身破局,迎变启新。通过4天3夜的思想碰撞和互动交流,引领行…

Windows 下载安装ffmpeg

下载地址 https://ffmpeg.org/download.html 测试 管理员方式打开控制台,输入ffmpeg测试 配置环境变量

掌握React与TypeScript:从零开始绘制中国地图

最近我需要使用reactts绘制一个界面,里面需要以中国地图的形式展示区块链从2019-2024年这五年的备案以及注销情况,所以研究了一下这方面的工作,初步有了一些成果,所以现在做一些分享,希望对大家有帮助! 在这…

64、哥伦比亚大学:CU-Net-目前脑肿瘤分割的最先进模型

本文已被接受发表在2024年IEEE MLISE会议上(c)2024 IEEE。准确地将脑肿瘤从MRI扫描中分割出来对于制定有效的治疗方案和改善患者预后至关重要。本研究引入了一种新的哥伦比亚大学网络(CU-Net)架构实现,用于使用BraTS 2…

哪个品牌的加密软件稳定方便使用?

一、什么是企业加密软件? 企业加密软件是一种用于保护企业内部数据安全的工具。在数字化时代,随着数据量的爆炸式增长,信息安全和隐私保护变得愈发重要。企业加密软件作为保障数据安全的关键工具,受到越来越多用户的青睐。 企业…

【专业指南】移动硬盘坏道下的数据恢复之道

移动硬盘坏道揭秘:数据安全的隐形挑战 在数据日益成为核心资产的今天,移动硬盘作为便携存储的代名词,承载着无数用户的重要信息。然而,随着使用时间的增长和不当操作的影响,移动硬盘可能会遭遇“坏道”这一棘手问题。…

谷粒商城学习-11-docker安装redis

文章目录 一,拉取Redis镜像1,搜索Redis的Docker镜像2,拉取Redis镜像3,查看已经拉取的镜像 二,创建、启动Redis容器1,创建redis配置文件2,创建及运行Redis容器3,使用docker ps查看运行…

GSR解读 | 7月7日起,所有新车出海欧洲将强制配备这些ADAS功能!

今年以来,“出海”“卷到海外去”成为大大小小车企活动中的高频词。在国内卷无可卷的主机厂们逐渐将战火烧到海外,而欧洲则成为大部分车厂的出海第一站,如蔚来、极氪、小鹏都在欧洲建立了本地团队或子公司。 中国车企出海欧洲在高歌猛进的同…

RAM和ROM的区别

RAM和ROM的区别 RAM和ROM都是用来存东西的,比如我们熟悉的CPU缓存、电脑和手机的内存就是属于RAM,而固态硬盘、U盘,还有我们买手机时候说的32G、64G的存储空间,就属于ROM。RAM和ROM的区别,简单说就是RAM在断电之后&am…

前端面试题12(js异步方法)

在JavaScript中,异步编程是处理延迟操作(如网络请求、定时器等)的关键方式,它允许代码在等待某些操作完成时继续执行,提高了应用的响应性和用户体验。 回调函数(Callback) 回调是最原始的异步处…

spark shuffle写操作——BypassMergeSortShuffleWriter

创建分区文件writer 每一个分区都生成一个临时文件,创建DiskBlockObjectWriter对象,放入partitionWriters 分区writer写入消息 遍历所有消息,每一条消息都使用分区器选择对应分区的writer然后写入 生成分区文件 将分区writer的数据flu…

用html+css设计一个列表清单小卡片

目录 简介: 效果图: 源代码: 可能的问题: 简介: 这个HTML代码片段是一个简单的列表清单设计。它包含一个卡片元素(class为"card"),内部包含一个无序列表(ul),列表项(li)前面有一个特殊的符号(△)。整个卡片元素设计成300px宽,150px高,具有圆角边…

【字符串】【滑动窗口+位运算+双指针】1、无重复字符的最长子串+2、尽可能使字符串相等+3、最长优雅子数组+4、移动零+5、反转字符串

2道简单3道中等 1、无重复字符的最长子串(难度:中等) 该题对应力扣网址 超时代码 老实说,在我写博客的时候,也不知道为啥超时了,因为我看和我AC的代码时间也差不了多少吧(如果有大佬知道&…

误删分区后的数据拯救:双管齐下恢复策略

在数字化时代,数据的价值日益凸显,而误删分区作为常见的数据安全威胁之一,常常让用户措手不及。本文将深入探讨误删分区的现象,并为您揭示两种高效的数据恢复方案,旨在帮助您在最短时间内找回失去的数据,同…

1117 数字之王

solution 判断现有数字是否全为个位数 全为个位数,找出出现次数最多的数字,并首行输出最多出现次数,第二行输出所有出现该次数的数值不全为个位数 若当前位数值为0,无需处理若当前位数值非0,则每位立方相乘&#xff0…