注册
命令行工具搭建DPC集群
技术分享/ 文章详情 /

命令行工具搭建DPC集群

陈光峰 2023/06/12 1934 5 2

结构概述

达梦的分布式集群DMDPC既可以通过命令行搭建,也可以通过dem网页进行图形化部署操作;一般来说通过dem网页可以更方便快捷的进行集群搭建,但是只有命令行才可以更直观了解dpc的节点结构,内部关系,今后遇到问题故障也可以做到有的放矢;因此初学者有必要了解一下逐步搭建的过程。

dpc集群的节点有3种类型:

  • MP:元数据节点,存储元数据信息即字典信息,所有DDL操作都会交由MP执行,每个集群只能有一个MP节点,可配置成多副本。
  • BP:数据存储节点,BP节点启动分为BP模式和BS模式,在BP模式下负责存储数据和接收SP的子任务调度指令、执行子任务,并返回结果给SP;在BS模式下覆盖了SP的功能,可以接收用户请求并生成、划分计划并与其他BS节点协调共同执行,该模式下可以不配置SP节点;这两种模式的初始化命令是一样的,仅在启动时设置不同的模式参数(每次启动都可以灵活调整,并非一旦启动就固化了)。 这两种模式下的BP节点都可配置成多副本。
  • SP:计算节点,负责接收用户请求并生成计划、它和BP都具备执行计划的能力,没有副本结构。

dpc集群在架构上可分为单副本和多副本,顾名思义,多副本就是MP,BP节点可以在实例级别做到冗余,也同样冗余实例下的全部数据;

  • 在单副本结构下,集群的各节点实例名可以规划为MP1,BP1,BP2,BP3。。。,SP1,。。。;这种结构会出现单点故障,如MP发生故障,那么整个集群不可用。当某个BP发生故障,那么操作其上的数据时会报错;
  • 在多副本结构下,例如3个BP节点,实例名可规划为(BP11,BP12,BP13),(BP21,BP22,BP23),(BP31,BP32,BP33),MP的3副本为(MP11,MP12,MP13);当某个节点发生故障,它的副本实例会在很短的时间内切换为主库,持续提供服务。多副本相比于单副本多了归档配置以及针对副本数据的备份,还原操作。

单副本的搭建步骤

共3台机器,搭建单副本3节点集群,规划如下

IP				   实例名  库服务监听端口	 协调工作的监听端口  路径
192.168.106.157(内:10.100.106.157)  MP 	  5220		 1620		   /dmdata/xdata/dmdpc/mp
192.168.106.157(内:10.100.106.157)  BP1	  5240		 1640		   /dmdata/xdata/dmdpc/bp1
192.168.106.158(内:10.100.106.158)  BP2	  5240		 1640		   /dmdata/xdata/dmdpc/bp2
192.168.106.159(内:10.100.106.159)  BP3	  5240		 1640		   /dmdata/xdata/dmdpc/bp3
192.168.106.159(内:10.100.106.150)  SP	  5230		 1630		   /dmdata/xdata/dmdpc/sp
bin目录路径为:/dmdata/xdata/bin
库文件路径为:/dmdata/xdata/dmdpc

1. 安装软件

在各个节点机器上安装DM数据库软件,dpc的库软件版本和常规的DM版本不通用,但在安装上是一致的。

2. 初始化实例

为方便管理,根据实例指定库文件的路径,例如/dmdata/xdata/dmdpc/实例名,然后在各自相应节点的bin目录下执行初始化。

./dminit path=/dmdata/xdata/dmdpc/mp instance_name=MP port_num=5220 ap_port_num=1620 dpc_mode=MP
./dminit path=/dmdata/xdata/dmdpc/bp1 instance_name=BP1 port_num=5240 ap_port_num=1640 dpc_mode=BP
./dminit path=/dmdata/xdata/dmdpc/bp2 instance_name=BP2 port_num=5240 ap_port_num=1640 dpc_mode=BP
./dminit path=/dmdata/xdata/dmdpc/bp3 instance_name=BP4 port_num=5240 ap_port_num=1640 dpc_mode=BP
./dminit path=/dmdata/xdata/dmdpc/sp instance_name=SP port_num=5230 ap_port_num=1630 dpc_mode=SP

3.配置mp.ini

在所有实例的dm.ini同级目录下配个该文件。端口可随意配置不冲突即可。

cat mp.ini
mp_host = 10.100.106.157
mp_port = 7700

4.启动mp实例

cd /dmdata/xdata/bin
./dmserver /dmdata/xdata/dmdpc/mp/DAMENG/dm.ini dpc_mode=mp 

5.登陆mp,注册实例

cd /dmdata/xdata/bin
./disql SYSDBA/SYSDBA:5220
5.1、首先注册mp实例
//注册当前 MP 实例, MP 的 RAFT 组名可以指定为 NULL 或者‟MP_RAFT‟
SP_CREATE_DPC_INSTANCE('MP_RAFT','MP','MP',1620,5220,'10.100.106.157','NORMAL',1,'MP instance');
5.2、注册BP的RAFT组,每个BP都有各自的RAFT组
SP_CREATE_DPC_RAFT('BP','RAFT_1');
SP_CREATE_DPC_RAFT('BP','RAFT_2');
SP_CREATE_DPC_RAFT('BP','RAFT_3');
5.3、注册BP实例
SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP1', 'BP', 1640, 5240, '10.100.106.157', 'NORMAL', 1, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_2', 'BP2', 'BP', 1640, 5240, '10.100.106.158', 'NORMAL', 1, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_3', 'BP3', 'BP', 1640, 5240, '10.100.106.159', 'NORMAL', 1, 'BP instance');
5.4、注册SP的RAFT组,每个SP也都有各自的RAFT组
SP_CREATE_DPC_RAFT('SP', 'RAFT_SP1');
5.5、注册SP实例
SP_CREATE_DPC_INSTANCE('RAFT_SP1','SP','SP',1630,5230, '10.100.106.159','NORMAL', 2, 'SP instance');

6、启动BP、SP实例

此时MP实例是启动状态的,在各个相应节点启动bp,sp
BP节点是的启动模式是BP还是BS,在dpc_mode后写BS或BP即可
在单副本的BS模式,可以不启动SP实例

cd /dmdata/xdata/bin
./dmserver /dmdata/xdata/dmdpc/bp1/DAMENG/dm.ini dpc_mode=BS
./dmserver /dmdata/xdata/dmdpc/bp2/DAMENG/dm.ini dpc_mode=BS
./dmserver /dmdata/xdata/dmdpc/bp3/DAMENG/dm.ini dpc_mode=BS
./dmserver /dmdata/xdata/dmdpc/sp/DAMENG/dm.ini dpc_mode=SP

7、创建表空间

表空间需要手动创建,指定到相应的RAFT组即可。
每个BP节点可以创建多个表空间。

CREATE TABLESPACE TS1 DATAFILE 'TS1.DBF' SIZE 10240 AUTOEXTEND ON NEXT 128 WITH HUGE PATH 'HTS_TS1' STORAGE(ON RAFT_1) ;
CREATE TABLESPACE TS2 DATAFILE 'TS2.DBF' SIZE 10240 AUTOEXTEND ON NEXT 128 WITH HUGE PATH 'HTS_TS2' STORAGE(ON RAFT_2) ;
CREATE TABLESPACE TS3 DATAFILE 'TS3.DBF' SIZE 10240 AUTOEXTEND ON NEXT 128 WITH HUGE PATH 'HTS_TS3' STORAGE(ON RAFT_3) ;

8、验证

图片.png

多副本的搭建步骤

MP和BP都可以配置多副本,也可以单独配置,即配置Mp单副本+BP多副本、或MP多副本+BP单副本。
由于主副本间要同步数据,因此多副本实例都需要开启归档。
本测例为 Mp单副本+BP多副本
共3台机器,搭建3x3BP的集群,规划如下

IP				   实例名  库服务监听端口	 协调工作的监听端口	路径
192.168.106.157(内:10.100.106.157) MP 	  5220	 	 1620			/dmdata/xdata/sp1

192.168.106.157(内:10.100.106.157) BP11	  5240		 1640			/dmdata/xdata/bp11
192.168.106.158(内:10.100.106.158) BP12	  5241		 1641			/dmdata/xdata/bp12
192.168.106.159(内:10.100.106.159) BP13	  5242		 1642			/dmdata/xdata/bp13

192.168.106.158(内:10.100.106.158) BP21	  5240		 1640			/dmdata/xdata/bp21
192.168.106.159(内:10.100.106.159) BP22	  5241		 1641			/dmdata/xdata/bp22
192.168.106.157(内:10.100.106.157) BP23	  5242		 1642			/dmdata/xdata/bp23

192.168.106.159(内:10.100.106.159) BP31	  5240		 1640			/dmdata/xdata/bp31
192.168.106.157(内:10.100.106.157) BP32	  5241		 1641			/dmdata/xdata/bp32
192.168.106.158(内:10.100.106.158) BP33	  5242		 1642			/dmdata/xdata/bp33
		
192.168.106.159(内:10.100.106.150) SP	  5230		 1630			/dmdata/xdata/sp1
bin目录路径为:/dmdata/xdata/bin
库文件路径为:/dmdata/xdata/dmdpc

以上规划,可让3个BP主库均分到3个节点上。

1、安装库软件

2、始化实例

cd /dmdata/xdata/bin

./dminit path=/dmdata/xdata/sp1 instance_name=SP1 port_num=5230 ap_port_num=1630 dpc_mode=SP
./dminit path=/dmdata/xdata/mp instance_name=MP port_num=5220 ap_port_num=1620 dpc_mode=MP
 
 //初始化 RAFT_1 组中的 BP 实例
./dminit path=/dmdata/xdata/bp11 instance_name=BP11 port_num=5240 ap_port_num=1640 dpc_mode=BP
./dminit path=/dmdata/xdata/bp12 instance_name=BP12 port_num=5241 ap_port_num=1641 dpc_mode=BP
./dminit path=/dmdata/xdata/bp13 instance_name=BP13 port_num=5242 ap_port_num=1642 dpc_mode=BP

  //初始化 RAFT_2 组中的 BP 实例
./dminit path=/dmdata/xdata/bp21 instance_name=BP21 port_num=5240 ap_port_num=1640 dpc_mode=BP
./dminit path=/dmdata/xdata/bp22 instance_name=BP22 port_num=5241 ap_port_num=1641 dpc_mode=BP
./dminit path=/dmdata/xdata/bp23 instance_name=BP23 port_num=5242 ap_port_num=1642 dpc_mode=BP

  //初始化 RAFT_3 组中的 BP 实例
./dminit path=/dmdata/xdata/bp31 instance_name=BP31 port_num=5240 ap_port_num=1640 dpc_mode=BP
./dminit path=/dmdata/xdata/bp32 instance_name=BP32 port_num=5241 ap_port_num=1641 dpc_mode=BP
./dminit path=/dmdata/xdata/bp33 instance_name=BP33 port_num=5242 ap_port_num=1642 dpc_mode=BP

3、配置mp.ini

在所有实例的路径下配置mp.ini文件,文件内容如下

mp_host = 10.100.106.57
mp_port = 9000 #与 MP、 BP 和 SP 上的 ap_port_num 不冲突的端口号

4、启动mp实例

cd  /dmdata/xdata/bin
./dmserver /dmdata/xdata/mp/DAMENG/dm.ini dpc_mode=MP

5、登陆mp,注册实例

cd /dmdata/xdata/bin
./disql SYSDBA/SYSDBA:5220

5.1、注册mp实例

//注册当前 MP 实例, MP 的 RAFT 组名可以指定为 NULL 或者‟MP_RAFT‟
SP_CREATE_DPC_INSTANCE('MP_RAFT','MP','MP',1620,5220,'10.100.106.157','NORMAL',1,'MP instance');

5.2、增加BP节点

//注册 RAFT 组,名为 RAFT_1
SP_CREATE_DPC_RAFT('BP', 'RAFT_1');
//在 RAFT_1 组内注册 BP 实例 BP11、 BP12、 BP13
//所有实例均以 STANDBY 模式、 INVALID 状态注册进 MP,实例启动后,在 RAFT 组内选举出有效主库后,会自动更新 MP 中的模式、状态信息。
SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP11', 'BP', 1640, 5240, '10.100.106.157','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP12', 'BP', 1641, 5241, '10.100.106.158','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP13', 'BP', 1642, 5242, '10.100.106.159','STANDBY', 0, 'BP instance');

//注册 RAFT 组,名为 RAFT_2
SP_CREATE_DPC_RAFT('BP', 'RAFT_2');
//在 RAFT_2 组内注册 BP 实例 BP21、 BP22、 BP23
//所有实例均以 STANDBY 模式、 INVALID 状态注册进 MP,实例启动后,在 RAFT 组内选举出有效主库后,会自动更新 MP 中的模式、状态信息。
SP_CREATE_DPC_INSTANCE('RAFT_2', 'BP21', 'BP', 1640, 5240, '10.100.106.158','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_2', 'BP22', 'BP', 1641, 5241, '10.100.106.159','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_2', 'BP23', 'BP', 1642, 5242, '10.100.106.157','STANDBY', 0, 'BP instance');

//注册 RAFT 组,名为 RAFT_3
SP_CREATE_DPC_RAFT('BP', 'RAFT_3');
//在 RAFT_3 组内注册 BP 实例 BP31、 BP32、 BP33
//所有实例均以 STANDBY 模式、 INVALID 状态注册进 MP,实例启动后,在 RAFT 组内选举出有效主库后,会自动更新 MP 中的模式、状态信息。
SP_CREATE_DPC_INSTANCE('RAFT_3', 'BP31', 'BP', 1640, 5240, '10.100.106.159','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_3', 'BP32', 'BP', 1641, 5241, '10.100.106.157','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_3', 'BP33', 'BP', 1642, 5242, '10.100.106.158','STANDBY', 0, 'BP instance');

5.3、增加SP节点

//增加 SP,也要注册 RAFT 组,参数 1 为空串
SP_CREATE_DPC_RAFT('SP', 'RAFT_SP1');
//在 RAFT_SP1 内注册 SP 实例 SP1
SP_CREATE_DPC_INSTANCE('RAFT_SP1', 'SP', 'SP', 1630, 5230, '10.100.106.159','NORMAL', 2, 'SP instance');

6、开启多副本实例的归档并同步

本测例仅配置BP节点的归档

6.1、修改 BP11 的 dm.ini中的以下参数

ARCH_INI = 1 #打开归档配置

6.2、配置归档文件dmarch.ini,此处先只配本地归档,避免提前发起 RAFT选举

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/xdata/bp11/DAMENG/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位 MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0 表示无限制

6.3、启动BP11到open状态

cd /dmdata/xdata/bin
./dmserver /dmdata/xdata/dmdpc/bp11/DAMENG/dm.ini dpc_mode=BS

6.4、同步RAFT组内数据

6.4.1、退出 BP11 并进行脱机备份
cd /dmdata/xdata/bin
./dmrman CTLSTMT="BACKUP DATABASE '/dmdata/xdata/bp11/DAMENG/dm.ini' FULL TO BACKUP_01 BACKUPSET '/dmdata/xdata/bp11/DAMENG/bak/BACKUP_01'" USE_AP=2

将/dmdata/xdata/bp11/DAMENG/bak/BACKUP_01文件复制到BP12,BP13实例的相应目录下。

6.4.2 将备份文件脱机还原到副本实例

还原,恢复到BP12

//还原数据库:
cd /dmdata/xdata/bin
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/xdata/bp12/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/xdata/bp12/DAMENG/bak/BACKUP_01'" USE_AP=2  
//因为脱机备份没有产生任何 REDO 日志,所以此处省略恢复数据库的操作步骤
//更新数据库:
dmrman CTLSTMT="RECOVER DATABASE '/dmdata/xdata/bp12/DAMENG/dm.ini' UPDATE DB_MAGIC" USE_AP=2

还原恢复到BP13

//还原数据库:
cd /dmdata/xdata/bin
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/xdata/bp13/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/xdata/bp13/DAMENG/bak/BACKUP_01'" USE_AP=2  
//因为脱机备份没有产生任何 REDO 日志,所以此处省略恢复数据库的操作步骤
//更新数据库:
dmrman CTLSTMT="RECOVER DATABASE '/dmdata/xdata/bp13/DAMENG/dm.ini' UPDATE DB_MAGIC" USE_AP=2

6.5、准备其他RAFT组数据

在BP21,BP31也按照6.1 - 6.4 的步骤执行。
并且在BP22、BP23,BP32、BP33的dm.ini中也打开归档配置

ARCH_INI=1		#打开归档配置
ALTER_MODE_STATUS = 0 	#不允许用户直接通过 SQL 语句修改服务器模式

6.6、配置 BP RAFT 归档文件

修改 DMARCH.INI,配置RAFT归档与本地归档,除了本地归档外,其他归档配置项中的 ARCH_DEST 表示当本实例是主库时,需要同步归档数据的目标实例名。

6.6.1、配置BP11的dmarch.ini文件

当前实例为BP11,需要向BP12、BP13同步数据,因此RAFT归档中的 ARCH_DEST分别配置为 BP12、 BP13。

XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 1500 #选举超时时间,三个库设置不同以尽快选出主库
RAFT_SELF_ID = 1 #多副本自身节点 ID

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP12 #归档目标实例名
ARCH_DEST_ID = 2 #归档目标多副本节点 ID

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP13 #归档目标实例名
ARCH_DEST_ID = 3 #归档目标多副本节点 ID

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/xdata/bp11/DAMENG/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位 MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0 表示无限制
6.6.2、配置BP12的dmarch.ini文件

当前实例为BP12,系统配置完成后,可能在各种故障处理中,BP12 可能选为 Leader。而原来的Leader 会切换为Follower。此时 BP12 需要向 BP11 和 BP13 同步数据,因此RAFT 归档的 ARCH_DEST 分别配置为 BP11 和 BP13。

XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 2000 #选举超时时间
RAFT_SELF_ID = 2 #多副本自身节点 ID

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP11 #归档目标实例名
ARCH_DEST_ID = 1 #归档目标多副本节点 ID

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP13 #归档目标实例名
ARCH_DEST_ID = 3 #归档目标多副本节点 ID

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/xdata/bp12/DAMENG/arch #本地归档文件路径D
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位 MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0 表示无限制
6.6.3、配置BP13的dmarch.ini文件

当前实例为BP13,系统配置完成后,可能在各种故障处理中,BP13 可能选为 Leader。而原来的Leader 会切换为Follower。此时 BP13 需要向 BP11 和 BP12 同步数据,因此RAFT 归档的 ARCH_DEST 分别配置为 BP11 和 BP12。

XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 2000 #选举超时时间
RAFT_SELF_ID = 3 #多副本自身节点 ID

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP11 #归档目标实例名
ARCH_DEST_ID = 1 #归档目标多副本节点 ID

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP12 #归档目标实例名
ARCH_DEST_ID = 2 #归档目标多副本节点 ID

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST =  /dmdata/xdata/bp13/DAMENG/arch #本地归档文件路径D
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位 MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0 表示无限制

全部修改完成后, RAFT_1 组中的三个 BP 即配置完成。
RAFT_2和RAFT_3组内的实例按上面同样配置,仅需要对路径、实例名等进行区分。

7、启动BP,SP实例

根据规划登陆相应节点启动相应的实例,一般在BP启动完毕后再启动SP。

cd /dmdata/xdata/bin
./dmserver /dmdata/xdata/dmdpc/bp11/DAMENG/dm.ini dpc_mode=BS
./dmserver /dmdata/xdata/dmdpc/bp12/DAMENG/dm.ini dpc_mode=BS
./dmserver /dmdata/xdata/dmdpc/bp13/DAMENG/dm.ini dpc_mode=BS

./dmserver /dmdata/xdata/dmdpc/bp21/DAMENG/dm.ini dpc_mode=BS
./dmserver /dmdata/xdata/dmdpc/bp22/DAMENG/dm.ini dpc_mode=BS
./dmserver /dmdata/xdata/dmdpc/bp23/DAMENG/dm.ini dpc_mode=BS

./dmserver /dmdata/xdata/dmdpc/bp31/DAMENG/dm.ini dpc_mode=BS
./dmserver /dmdata/xdata/dmdpc/bp32/DAMENG/dm.ini dpc_mode=BS
./dmserver /dmdata/xdata/dmdpc/bp33/DAMENG/dm.ini dpc_mode=BS

./dmserver /dmdata/xdata/dmdpc/sp/DAMENG/dm.ini dpc_mode=SP

8、验证集群搭建是否完成

MP、 SP、 BP 全部正常启动,且均处于 OPEN 状态,才是一个正常的 DMDPC 系统!

select * from dpc_instance;

9、启动服务脚本的配置

上面都是命令行启动,达梦bin目录里都有自己的标准启动服务脚本模板,位于servcice_template目录,文件如下:
图片.png
dpc下启动的都是dmserver服务,那么将DmService文件拷贝出,进入编辑,只需修改头部的几行内容,原文如下:
图片.png
修改为:
图片.png
将文件名改为DmServiceBP1.sh,放入其他任意位置都可。再用os命令将它做成服务,再systemctl将之自启动;不过一般不会做成服务自启动,特别是多副本的,受外在因素影响有可能主库不是预期的副本实例。一般手动执行 ./DmServiceBP1.sh start启动。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服