# 初始化MP实例
./dminit path=/home/dmdba/dpc_data/mp1 instance_name=MP1 port_num=5239 ap_port_num=6003 dpc_mode=MP sysdba_pwd=DMdatabase8 sysauditor_pwd=DM8database
# 初始化SP实例
./dminit path=/home/dmdba/dpc_data/sp1 instance_name=SP1 port_num=5238 ap_port_num=6000 dpc_mode=SP sysdba_pwd=DMdatabase8 sysauditor_pwd=DM8database
# 初始化BP实例
./dminit path=/home/dmdba/dpc_data/bp1 instance_name=BP1 port_num=5237 ap_port_num=6001 dpc_mode=BP sysdba_pwd=DMdatabase8 sysauditor_pwd=DM8database
和常规初始化不同,要通过dpc_mode参数明确各实例对应的节点角色。
vi mp.ini
#添加以下配置
[MP1]
mp_host=192.168.10.156
mp_port=9000
首先启动MP节点,在MP节点上注册SP和BP节点。
# 进入达梦bin目录,使用disql远程登录数据库
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/DMdatabase8@192.168.10.156:5239
-- 1. 创建MP实例
SP_CREATE_DPC_INSTANCE(NULL, 'MP1', 'MP', 6003, 5239, '192.168.10.156', '192.168.10.156', 'NORMAL', 1, 'MP instance');
-- 2. 创建BP分组RAFT组
SP_CREATE_DPC_RAFT('BP', 'RAFT_1');
-- 3. 创建BP实例,归属RAFT_1分组
SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP1', 'BP', 6001, 5237, '192.168.10.156', '192.168.10.156', 'NORMAL', 1, 'BP instance');
-- 4. 创建SP分组RAFT组
SP_CREATE_DPC_RAFT('SP', 'RAFT_SP1');
-- 5. 创建SP实例,归属RAFT_SP1分组
SP_CREATE_DPC_INSTANCE('RAFT_SP1', 'SP1', 'SP', 6000, 5238, '192.168.10.156', '192.168.10.156', 'NORMAL', 2, 'SP instance');
以MP为例,注册时各参数含义如下:
1 :所属 RAFT 组名(NULL)。MP 通常不需要归属某个 RAFT 组,所以为 NULL
2 : 实例名称(‘MP1’),集群内必须唯一
3 : 实例角色(‘MP’),MP 表示这是一个管理节点
4 : MAL 端口即内部通信端口(6003),用于集群节点间通信
5 : 服务端口(5239),客户端连接时使用的端口
6 : MAL 通信 IP(‘192.168.10.156’),用于节点间内部通信的 IP
7 : 对外服务 IP(‘192.168.10.156’),客户端用来连接此实例的 IP
8 : 节点状态(‘NORMAL’),NORMAL 表示正常运行状态
9 : 节点优先级(1),数字越大优先级越高,用于选举等场景
注册完启动BP和SP节点。
三节点的启动命令分别为:
在安装bin目录下执行
./dmserver /home/dmdba/dpc_data/mp1/DAMENG/dm.ini dpc_mode=MP
./dmserver /home/dmdba/dpc_data/bp1/DAMENG/dm.ini dpc_mode=BP
./dmserver /home/dmdba/dpc_data/sp1/DAMENG/dm.ini dpc_mode=SP
查看集群节点状态,SYS_STATUS = 4 表示节点处于OPEN状态,STATUS = 1 表示节点有效。
分布式是多节点协同工作的系统,核心思想是将工作负载分散到不同角色的节点上,这样做有以下优势:
1、突破单机性能瓶颈,实现水平扩展。比如对存储节点而言,可以让每台机器只处理一部分数据,这样总存储容量和读写吞吐量就能随节点数线性增加。
2、 实现故障隔离与高可用。在单体架构中,一个模块的故障(比如内存溢出)就可能导致整个数据库崩溃。而在“分散负载”的架构中,某个角色的故障可以被限制在它自己内部。
3、资源利用最优化。不同的硬件擅长做不同的事。通过角色分离,可以为每种角色选择最合适的硬件配置,而不是用一种通用配置去承担所有工作负载,从而实现成本与性能的最佳平衡。
DMDPC的各角色定位与功能:
SP(计划生成节点):对外提供数据库服务。核心职责:
接收用户请求;
生成分布式执行计划;
划分子计划并计算并行度;
调度BP执行子任务;
执行结果返回用户
BP(数据存储节点):数据实际存储单元。核心职责:
存储业务数据分片;
接收并执行SP下发的子任务;
将执行结果返回给SP
MP(元数据服务器节点):提供元数据服务。核心职责:
存储全部元数据(字典/表结构/分片信息);
执行所有DDL请求(由SP转发);
为SP提供元数据查询服务
分布式不同角色的节点组内采用RAFT协议实现数据的高可用和一致性。在DMDPC里,存储用户数据的BP节点和存储元数据的MP节点,都会组成一个RAFT组。对于DM多副本系统,组内副本数必须是大于1的奇数,最小3个,最大9个。当一个RAFT组内的Leader发生故障时,剩余副本会立刻根据RAFT协议选举出新的Leader,从而保证了服务不中断。具体来说,组内有Leader、Follower、Candidate。
Leader:负责处理所有客户端的读写请求,是数据的“主库”。
Follower:被动接收并同步Leader的数据,是“备库”,在Leader故障时可以被选举为新的Leader。
Candidate:这是一个临时角色,在选举新Leader时出现,用于争取选票。
客户端写入数据时,Leader会先将操作记录成日志,并复制给大多数Follower节点。只有当超过半数的节点确认收到后,这条数据才算真正提交成功,从而确保了数据在多个副本间的一致性。因此所有参与多副本的节点,都必须开启本地归档,才能正常进行日志同步和数据恢复。
当Leader节点发生故障或网络中断,组内的Follower会发起选举。获得超过半数节点投票的Follower会晋升为新的Leader,继续提供服务。
注意:一个 DMDPC 集群只能配置一个 MP 节点提供服务。为了保障 MP 节点能持续提供服务,MP 节点可以配置成一个 MP 多副本系统。BP可以配置多个节点,每个节点可以配置副本。SP 节点不存储数据,配置成单机即可。
文章
阅读量
获赞
