达梦的分布式集群DMDPC既可以通过命令行搭建,也可以通过dem网页进行图形化部署操作;一般来说通过dem网页可以更方便快捷的进行集群搭建,但是只有命令行才可以更直观了解dpc的节点结构,内部关系,今后遇到问题故障也可以做到有的放矢;因此初学者有必要了解一下逐步搭建的过程。
dpc集群的节点有3种类型:
dpc集群在架构上可分为单副本和多副本,顾名思义,多副本就是MP,BP节点可以在实例级别做到冗余,也同样冗余实例下的全部数据;
共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
在各个节点机器上安装DM数据库软件,dpc的库软件版本和常规的DM版本不通用,但在安装上是一致的。
为方便管理,根据实例指定库文件的路径,例如/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
在所有实例的dm.ini同级目录下配个该文件。端口可随意配置不冲突即可。
cat mp.ini
mp_host = 10.100.106.157
mp_port = 7700
cd /dmdata/xdata/bin
./dmserver /dmdata/xdata/dmdpc/mp/DAMENG/dm.ini dpc_mode=mp
cd /dmdata/xdata/bin
./disql SYSDBA/SYSDBA:5220
//注册当前 MP 实例, MP 的 RAFT 组名可以指定为 NULL 或者‟MP_RAFT‟
SP_CREATE_DPC_INSTANCE('MP_RAFT','MP','MP',1620,5220,'10.100.106.157','NORMAL',1,'MP instance');
SP_CREATE_DPC_RAFT('BP','RAFT_1');
SP_CREATE_DPC_RAFT('BP','RAFT_2');
SP_CREATE_DPC_RAFT('BP','RAFT_3');
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');
SP_CREATE_DPC_RAFT('SP', 'RAFT_SP1');
SP_CREATE_DPC_INSTANCE('RAFT_SP1','SP','SP',1630,5230, '10.100.106.159','NORMAL', 2, 'SP instance');
此时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
表空间需要手动创建,指定到相应的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) ;
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个节点上。
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
在所有实例的路径下配置mp.ini文件,文件内容如下
mp_host = 10.100.106.57
mp_port = 9000 #与 MP、 BP 和 SP 上的 ap_port_num 不冲突的端口号
cd /dmdata/xdata/bin
./dmserver /dmdata/xdata/mp/DAMENG/dm.ini dpc_mode=MP
cd /dmdata/xdata/bin
./disql SYSDBA/SYSDBA:5220
//注册当前 MP 实例, MP 的 RAFT 组名可以指定为 NULL 或者‟MP_RAFT‟
SP_CREATE_DPC_INSTANCE('MP_RAFT','MP','MP',1620,5220,'10.100.106.157','NORMAL',1,'MP instance');
//注册 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');
//增加 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');
本测例仅配置BP节点的归档
ARCH_INI = 1 #打开归档配置
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/xdata/bp11/DAMENG/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位 MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0 表示无限制
cd /dmdata/xdata/bin
./dmserver /dmdata/xdata/dmdpc/bp11/DAMENG/dm.ini dpc_mode=BS
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实例的相应目录下。
还原,恢复到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
在BP21,BP31也按照6.1 - 6.4 的步骤执行。
并且在BP22、BP23,BP32、BP33的dm.ini中也打开归档配置
ARCH_INI=1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许用户直接通过 SQL 语句修改服务器模式
修改 DMARCH.INI,配置RAFT归档与本地归档,除了本地归档外,其他归档配置项中的 ARCH_DEST 表示当本实例是主库时,需要同步归档数据的目标实例名。
当前实例为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 表示无限制
当前实例为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 表示无限制
当前实例为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组内的实例按上面同样配置,仅需要对路径、实例名等进行区分。
根据规划登陆相应节点启动相应的实例,一般在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
MP、 SP、 BP 全部正常启动,且均处于 OPEN 状态,才是一个正常的 DMDPC 系统!
select * from dpc_instance;
上面都是命令行启动,达梦bin目录里都有自己的标准启动服务脚本模板,位于servcice_template目录,文件如下:
dpc下启动的都是dmserver服务,那么将DmService文件拷贝出,进入编辑,只需修改头部的几行内容,原文如下:
修改为:
将文件名改为DmServiceBP1.sh,放入其他任意位置都可。再用os命令将它做成服务,再systemctl将之自启动;不过一般不会做成服务自启动,特别是多副本的,受外在因素影响有可能主库不是预期的副本实例。一般手动执行 ./DmServiceBP1.sh start启动。
文章
阅读量
获赞