达梦分布式集群DPC_架构详解_yxy

1 DPC核心架构介绍

1.1 架构图

在这里插入图片描述

1.2 DPC核心架构组件

DMDPC 架构由三部分组成
SP(SQL Processor):计算节点
MP(Metadata Processor):元数据节点
BP(Backend Processor):数据存储节点

SP
①对外提供分布式数据库服务,用户可以登录到任意一个 SP 节点,获得
完整的数据库服务;
②不存储数据,所以SP都是单机,可以横向扩展(多个SP节点),不能多副本;

BP
①负责存储表真实数据,一般是多副本;
②执行 SP 的调度指令并将执行结果返回给 SP;

MP
①负责存储元数据(表结构等信息),一般是多副本;
②向 SP、BP 提供元数据服务;

2 多副本

2.1 多副本架构图

在这里插入图片描述

2.2 多副本示例

DPC基于 RAFT 协议实现了一套全新的达梦多副本(DM Multiple Copy)系统架构。
类似于主备系统,主库挂了备库能立即切换为主,实现高可用性;

例如:
①单机架构

服务器1服务器2服务器3服务器4
SPMPBP1BP2
Ⅰ.其中BP节点可以横向扩展(MP不行),比如新增BP3,4,5...,BP越多,表数据分配到所有BP节点后,能利用的资源越多,性能就越高;

这里举个例子:
一个分区表TEST,通过ID列做HASH分区,分成5个子表,建表语句为:

create table TEST(
"ID" INT,
"NAME" VARCHAR2(20),
)
PARTITION BY HASH("ID")
PARTITIONS 5;

如果把5个子表分配到5个BP上,那么通过ID列去查询数据时,就能利用5台服务器资源;

Ⅱ.单机架构MP和BP都只有一份数据,如果其中一个节点发生故障,整个集群就不能正常提供服务,所以可以部署多副本架构,给MP和BP1,BP2都新增两个副本;

②多副本架构

服务器1服务器2服务器3服务器4
SPMPBP1BP2
MP_备1BP1_备1BP2_备1
MP_备2BP1_备2BP2_备2
新增备库后,当主库BP1实例挂掉,BP1_备1或者BP1_备2就能选举为主库来提供服务,实现高可用性

2.3 RAFT组概念

拥有相同数据的一个或多个节点共同构成一个 RAFT组。RAFT 组中的节点个数为奇数。

当 RAFT 组中只有 1 个节点时,则该节点称为单副本系统(单机)。

例如
①比如上述例子中的的BP1,BP1_备1,BP1_备2就构成一个RAFT组(MP和BP2同理),它们数据完全一致,一个RAFT组内的实例数据完全相同;

②一个RAFT组内只有一个为主库提供服务;

③类似于一个RAFT组 = 一个主备系统(RAFT内是异步同步);

2.4 表空间与RAFT组的关系

每个表空间必须关联一个RAFT组,创建时指定存储位置。
相当于表空间要指定存储在哪个BP上

例如

CREATE TABLESPACE TS_1 DATAFILE 'TS_1.DBF' SIZE 128 STORAGE(ON RAFT_1);
--表空间TS_1存储在RAFT_1上(BP1上);

CREATE TABLESPACE TS_2 DATAFILE 'TS_2.DBF' SIZE 128 STORAGE(ON RAFT_2);
--表空间TS_2存储在RAFT_2上(BP2上);

后续建表时,才能每个子表单独指定不同的表空间,实现数据分布在多台BP上(不同数据节点上)

CREATE TABLE "TEST01"
(
"ID" VARCHAR2(36) NOT NULL,
"DATE" TIMESTAMP(0) NOT NULL)
PARTITION BY HASH("ID")
(
PARTITION  "DMHASHPART0"   STORAGE(ON "TS_1") ,
PARTITION  "DMHASHPART1"   STORAGE(ON "TS_2") 
) STORAGE(HASHPARTMAP(1), ON "TS_1") ;

更多其他数据库相关专栏:
数据库性能优化(sql优化)_基本思路_yxy
数据库性能优化(sql优化)_索引详解01_yxy(共4篇)
数据库性能优化(sql优化)_SQL执行计划01_yxy(共3篇)
数据库性能优化(sql优化)_统计信息_yxy

### 达梦数据库 DPC_2PC 事务处理机制 达梦数据库中的 **DPC_2PC** 是指分布式事务的两阶段提交(Distributed Processing Coordination - Two-Phase Commit, DPC_2PC)。这是一种用于确保分布式系统中数据一致性的协议。以下是关于 DPC_2PC 的详细说明: #### 1. 两阶段提交的基本概念 两阶段提交是一种协调分布式事务的协议,它通过两个阶段来确保所有参与节点的一致性: - **准备阶段(Prepare Phase)**:协调者向所有参与者发送准备请求,要求它们准备好提交或回滚事务。每个参与者需要确保本地事务可以被提交,并将状态持久化到日志中[^2]。 - **提交阶段(Commit Phase)**:如果所有参与者都返回成功,则协调者发送提交请求;否则发送回滚请求。参与者根据协调者的指令执行最终操作[^3]。 #### 2. DPC_2PC 在达梦数据库中的实现 在达梦数据库中,DPC_2PC 被用来管理跨多个实例的分布式事务。以下是其关键特性: - **协调者与参与者**:在 DMDSC 环境下,一个实例充当协调者,其他实例作为参与者。协调者负责发起和控制两阶段提交过程[^4]。 - **日志记录**:为了保证事务的持久性和可恢复性,每个实例都需要在本地存储中记录事务日志。这些日志在故障恢复时起到关键作用[^5]。 - **故障恢复**:当某个实例发生故障时,DPC_2PC 协议会通过日志重放或其他机制确保事务的一致性。达梦数据库支持自动检测和恢复未完成的事务[^6]。 #### 3. 常见问题及解决方案 以下是一些与 DPC_2PC 相关的常见问题及其解决方法: - **问题:事务提交失败** - **原因**:可能是由于网络中断、某个实例不可用或日志写入失败导致的。 - **解决方法**:检查网络连接是否正常,确认所有实例的状态,并查看日志文件以定位具体错误[^7]。 - **问题:事务长时间挂起** - **原因**:可能是因为某个参与者未能及时响应协调者的请求。 - **解决方法**:增加超时设置,或者手动干预以终止挂起的事务[^8]。 #### 4. 示例代码 以下是一个简单的示例,展示如何在达梦数据库中使用 DPC_2PC 进行分布式事务处理: ```sql -- 开启事务 BEGIN DISTRIBUTED TRANSACTION; -- 执行跨实例的操作 INSERT INTO instance1.table1 (column1) VALUES ('value1'); INSERT INTO instance2.table2 (column2) VALUES ('value2'); -- 提交事务 COMMIT; ``` ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值