达梦数据库DM8 MPP集群的搭建与使用

  • 达梦MPP集群简介
  • 一、集群规划
  • 二、配置步骤
  • 1.MPP1_01节点配置
  • 2.MPP1_02节点配置
  • 3.部署总结
  • 三、MPP集群的应用
  • 1.哈希分布
  • 2.随机分布
  • 3.复制分布
  • 4.范围分布
  • 5.LIST 分布
  • 6.数据分布后再分区
  • 四、DM MPP日常管理视图


达梦MPP集群简介


达梦大规模并行处理 MPP(DM Massively Parallel Processing,缩写 DM MPP)是基于达梦数据库管理系统的完全对等无共享式集群组件,支持将多个 DM 数据库实例组织为一个并行计算网络,对外提供统一的数据库服务。 DM MPP 解决方案具有高性价比、高可靠性、功能强大、可动态扩容等优点,最多支持 1024 个 EP 节点,系统中各 EP 的功能完全对等,因此对于用户来说,MPP 系统的处理是完全透明的,用户任意登录 MPP 系统的的任一节点进行操作都可获得完全的 MPP 支持。DM MPP 支持数据的并行装载和操作的并行执行,数据分布式存储在各 EP 中,能支持 TB/PB级数据分析。


DM MPP 采用完全对等不共享架构, 不需要专用硬件,可以采用普通的 PC 服务器组建集群。

达梦arm架构调优 达梦 mpp_big data


达梦arm架构调优 达梦 mpp_数据库_02

DM MPP 的部署比较简单,在实际应用中可能还会结合主备集群综合应用,避免单节点故障导致的服务不可用,本文仅针对MPP集群部署进行介绍,MPP+主备的方案会在后续文章中更新。



数据库的基础安装请点击以下链接:
《达梦数据库DM8安装部署指南》

一、集群规划

业务IP

系统监听IP

实例名

实例端口

MAL端口

MAL守护进程端口

守护进程端口

192.168.177.129

192.168.177.129

MPP1_01

5236

5336

5436

5536

192.168.177.130

192.168.177.130

MPP1_02

5236

5336

5436

5536

特别注意:
在实际的生产环境,业务IP与系统监听IP 建议采用不同的网络,避免系统内部通信与业务网络产生相互的影响。
MPP集群不需要配置守护进程,以上规划端口为后续的主备进行预留。

二、配置步骤

1.MPP1_01节点配置

–初始化实例

[dmdba@~]# /dm8/bin/dminit PATH=/dm8/data/ DB_NAME=MPP1_01 INSTANCE_NAME=MPP1_01 PORT_NUM=5236 PAGE_SIZE=32 LOG_SIZE=100

–启动服务
这里启动服务是为了通过SP_SET_PARA_VALUE函数修改配置文件,如果手工编辑dm.ini 可以不启动数据库

[dmdba@~]# /dm8/bin/dmserver /dm8/data/MPP1_01/dm.ini

–修改dm.ini

[dmdba@localhost ~]$ /dm8/bin/disql SYSDBA/SYSDBA
SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SP_SET_PARA_VALUE (2,'MAL_INI',1);
SP_SET_PARA_VALUE (2,'MPP_INI',1);
SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
---关闭前台实例服务

–配置dmarch.ini

[dmdba@~]# vi /dm8/data/MPP1_01/dmarch.ini
[ARCHIVE_LOCAL]
  ARCH_TYPE                = LOCAL  #本地归档类型
  ARCH_DEST                = /dm8/data/MPP1_01/arch/  #本地归档存放路径
  ARCH_FILE_SIZE           = 1024  #单个归档大小,单位MB
  ARCH_SPACE_LIMIT         = 51200  #归档上限,单位MB

–创建dmmal.ini 和第一个节点保持一致

[dmdba@~]# vi /dm8/data/MPP1_01/dmmal.ini
MAL_CHECK_INTERVAL         = 10  #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定MAL链路断开的时间
MAL_TEMP_PATH              = /dm8/data/malpath/MPP1_01/  #临时文件目录
MAL_BUF_SIZE               = 512  #单个MAL缓存大小,单位MB
MAL_SYS_BUF_SIZE           = 2048  #MAL总大小限制,单位MB
MAL_COMPRESS_LEVEL         = 0  #MAL消息压缩等级,0表示不压缩

[MAL_INST1]
  MAL_INST_NAME            = MPP1_01  #实例名,和 dm.ini中INSTANCE_NAME一致
  MAL_HOST                 = 192.168.177.129  #MAL系统监听TCP连接的IP地址
  MAL_PORT                 = 5336  #MAL系统监听TCP连接的端口
  MAL_INST_HOST            = 192.168.177.129  #实例的对外服务IP地址
  MAL_INST_PORT            = 5236  #实例对外服务端口,和dm.ini中PORT_NUM一致
  MAL_DW_PORT              = 5436  #实例对应的守护进程监听TCP连接的端口
  MAL_INST_DW_PORT         = 5536  #实例监听守护进程TCP连接的端口

[MAL_INST2]
  MAL_INST_NAME            = MPP1_02
  MAL_HOST                 = 192.168.177.130
  MAL_PORT                 = 5336
  MAL_INST_HOST            = 192.168.177.130
  MAL_INST_PORT            = 5236
  MAL_DW_PORT              = 5436
  MAL_INST_DW_PORT         = 5536

–创建dmmpp.ini

[dmdba@~]# vi /dm8/data/MPP1_01/dmmpp.ini
[service_name1]
  mpp_seq_no               = 0
  mpp_inst_name            = MPP1_01
[service_name2]
  mpp_seq_no               = 1
  mpp_inst_name            = MPP1_02

–创建dmmpp.ctl

[dmdba@~]# /dm8/bin/dmctlcvt t2c /dm8/data/MPP1_01/dmmpp.ini /dm8/data/MPP1_01/dmmpp.ctl

–注册服务

[root@~]# /dm8/script/root/dm_service_installer.sh -t dmserver -p MPP1_01 -dm_ini /dm8/data/MPP1_01/dm.ini 
备注:删除自启
[root@~]# /dm8/script/root/dm_service_uninstaller.sh -n DmServiceMPP1_01

2.MPP1_02节点配置

–初始化实例

[dmdba@~]# /dm8/bin/dminit PATH=/dm8/data/ DB_NAME=MPP1_02 INSTANCE_NAME=MPP1_02 PORT_NUM=5236 PAGE_SIZE=32 LOG_SIZE=100

–启动数据库实例

[dmdba@~]# /dm8/bin/dmserver /dm8/data/MPP1_02/dm.ini

–修改dm.ini

[dmdba@localhost ~]$ /dm8/bin/disql SYSDBA/SYSDBA
SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SP_SET_PARA_VALUE (2,'MAL_INI',1);
SP_SET_PARA_VALUE (2,'MPP_INI',1);
SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);

—关闭数据库服务

—替换dmarch.ini

[dmdba@~]# vi /dm8/data/MPP1_02/dmarch.ini
[ARCHIVE_LOCAL]
  ARCH_TYPE                = LOCAL  #本地归档类型
  ARCH_DEST                = /dm8/data/MPP1_02/arch/  #本地归档存放路径
  ARCH_FILE_SIZE           = 1024  #单个归档大小,单位MB
  ARCH_SPACE_LIMIT         = 51200  #归档上限,单位MB

—创建dmmal.ini

[dmdba@~]# vi /dm8/data/MPP1_01/dmmal.ini
MAL_CHECK_INTERVAL         = 10  #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定MAL链路断开的时间
MAL_TEMP_PATH              = /dm8/data/malpath/MPP1_01/  #临时文件目录
MAL_BUF_SIZE               = 512  #单个MAL缓存大小,单位MB
MAL_SYS_BUF_SIZE           = 2048  #MAL总大小限制,单位MB
MAL_COMPRESS_LEVEL         = 0  #MAL消息压缩等级,0表示不压缩

[MAL_INST1]
  MAL_INST_NAME            = MPP1_01  #实例名,和 dm.ini中INSTANCE_NAME一致
  MAL_HOST                 = 192.168.177.129  #MAL系统监听TCP连接的IP地址
  MAL_PORT                 = 5336  #MAL系统监听TCP连接的端口
  MAL_INST_HOST            = 192.168.177.129  #实例的对外服务IP地址
  MAL_INST_PORT            = 5236  #实例对外服务端口,和dm.ini中PORT_NUM一致
  MAL_DW_PORT              = 5436  #实例对应的守护进程监听TCP连接的端口
  MAL_INST_DW_PORT         = 5536  #实例监听守护进程TCP连接的端口

[MAL_INST2]
  MAL_INST_NAME            = MPP1_02
  MAL_HOST                 = 192.168.177.130
  MAL_PORT                 = 5336
  MAL_INST_HOST            = 192.168.177.130
  MAL_INST_PORT            = 5236
  MAL_DW_PORT              = 5436
  MAL_INST_DW_PORT         = 5536

—创建dmmpp.ini

[dmdba@~]# vi /dm8/data/MPP1_02/dmmpp.ini
[service_name1]
  mpp_seq_no               = 0
  mpp_inst_name            = MPP1_01
[service_name2]
  mpp_seq_no               = 1
  mpp_inst_name            = MPP1_02

—创建dmmpp.ctl

[dmdba@~]# /dm8/bin/dmctlcvt t2c /dm8/data/MPP1_02/dmmpp.ini /dm8/data/MPP1_02/dmmpp.ctl

—注册服务

[root@~]# /dm8/script/root/dm_service_installer.sh -t dmserver -p MPP1_02 -dm_ini /dm8/data/MPP1_02/dm.ini 

备注:删除自启
[root@~]# /dm8/script/root/dm_service_uninstaller.sh -n DmServiceMPP1_02

3.部署总结

经过前面几个步骤, DM MPP 环境已经配置完成了。分别启动 MPP1_01 和 MPP1_02 的 DM 数据库实例(顺序不分先后), DM MPP 系统即能正常运行,用户就可以登录任一 EP节点 进行数据库操作了。

需要停止 DM MPP 系统的运行时,只需要停止每个 EP 的 DM 实例即可,没有特别的顺序要求。若在 DM MPP系统的运行过程中,某一 EP 发生故障停机,则整个 MPP 系统将处于不能正常服务的状态。当前所有的用户会话会被系统断开,不能进行全局登录,只能进行本地登录。 因此,为了保证 MPP 系统的高可用性,强烈建议采用 DM MPP 与数据守护相结合的部署方案。

三、MPP集群的应用

DM MPP 支持表数据的哈希分布、随机分布、复制分布、范围分布、 LIST 分布类型,用户可根据实际情况选择合适的分布类型。

1.哈希分布

哈希分布按照表定义中指定的一列或多列对行数据计算一个哈希值,再根据哈希值和哈希映射表,将该行数据分布到映射的节点上。
当表的连接查询中使用的连接键为哈希分布列时, MPP 下的查询计划会进行优化,比如可能减少计划中通讯操作符个数、使用索引、对分组计划优化等,减少数据在节点间的分发,提高查询效率。
使用哈希分布时, 节点间的数据是否均衡,取决于设置的哈希分布列以及表中的数据情况。当节点个数变动时,各个节点的数据需要按照新的哈希映射表重新进行分发。

##创建哈希分布表 T_HASH,分布列为 C1。
CREATE TABLE T_HASH(C1 INT, C2 CHAR(10))DISTRIBUTED BY HASH (C1);

2.随机分布

随机分布表不存在分布列, 插入表数据时会按照一定的随机算法,将数据随机均衡分布到各个节点。
随机分布的优点是数据和节点间不存在映射关系。节点个数变动后,如果没有节点数据均衡的要求,可以不用对节点现有的数据进行变动。
一般来说,随机分布对于复杂查询及存在较多的节点间数据分发情况,性能不如哈希分布高

##创建随机分布表 T_RANDOM。
CREATE TABLE T_RANDOM(C1 INT, C2 CHAR(10))DISTRIBUTED RANDOMLY;

3.复制分布

复制分布表在每个节点上的本地数据都是一份完整的拷贝,查询该表数据时在任意节点上都能单独完成,不需要从其他节点获取数据。
复制分布一般用于数据量不是很大的表

##创建复制分布表 T_FULLY。
CREATE TABLE T_FULLY(C1 INT, C2 CHAR(10))DISTRIBUTED FULLY;

4.范围分布

范围分布按照表定义中指定的一个或多个列的列值范围分布项,决定将一行数据存储到MPP 的哪个相应 EP 上。

##创建范围分布表 T_RANGE,分布列为 C1。
CREATE TABLE T_RANGE (C1 INT, C2 CHAR(10)) DISTRIBUTED BY RANGE (C1) (VALUES EQU OR LESS THAN (100) ON MPP1_01, VALUES LESS THAN(MAXVALUE) ON MPP1_02);

5.LIST 分布

LIST 分布通过指定表中的一个或多个列的离散值集,来确定将一行数据存储到 MPP 的哪个相应 EP 上。 此分布用于表中列值可列举的情况。

##创建 LIST 分布表 T_LIST,分布列为 C1。
CREATE TABLE T_LIST(C1 INT, C2 CHAR(10)) DISTRIBUTED BY LIST (C1) (VALUES(3) ON EP01,VALUES(4) ON EP02);

6.数据分布后再分区

DM MPP 同时支持数据分布与分区表,实现了“数据分布后再分区”。在数据分布到各节点的基础上,再在单个节点上将数据再次分区,可进一步提高查询性能。分布的类型和分区的类型可以混合搭配,比如建立哈希分布表的范围水平分区表。

##创建哈希分布表的范围水平分区表。
CREATE TABLE T_HASH_RANGE_PARTITION(C1 INT, C2 CHAR(10), C3 CHAR(10)) PARTITION BY RANGE(C1)
(
PARTITION PART_1 VALUES LESS THAN(0) ,
PARTITION PART_2 VALUES LESS THAN(10) ,
PARTITION PART_3 VALUES LESS THAN(100) ,
PARTITION PART_4 VALUES LESS THAN(MAXVALUE)
)
DISTRIBUTED BY HASH (C1);

四、DM MPP日常管理视图

  1. 获取会话连接的 EP 的节点序号
SELECT SF_GET_SELF_EP_SEQNO();
  1. 根据 ROWID 获取本行数据来自哪个 EP
SELECT SF_GET_EP_SEQNO(ROWID);
  1. 获取 EP 节点配置信息
SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) =SF_GET_SELF_EP_SEQNO();
  1. 获取当前会话连接的实例名
SELECT NAME FROM V$INSTANCE WHERE SF_GET_EP_SEQNO(ROWID) =SF_GET_SELF_EP_SEQNO();
  1. 获取 MPP 系统内所有 EP 的所有会话
SELECT * FROM V$SESSIONS;
  1. 获取当前连接的实例上的所有会话
SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
  1. 获取实例 EP01 上的所有会话
SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = (SELECT DISTINCT EP_SEQNO FROM V$MPP_CFG_ITEM WHERE INST_NAME ='EP01');
  1. 获取表 TEST 在每个实例上的数据行数
CALL SP_GET_EP_COUNT('SYSDBA','TEST');
  1. 获取所接实例上的表 TEST 的使用空间
SELECT TABLE_USED_PAGES('SYSDBA','TEST');
  1. 获取每个实例上的表 TEST 使用空间
SELECT TABLE_USED_PAGES('SYSDBA','TEST'), NAME FROM V$INSTANCE;
  1. 获取所有实例上表 TEST 的总使用空间
SELECT SUM(TOTAL_SIZE) FROM (SELECT TABLE_USED_PAGES('SYSDBA','TEST') TOTAL_SIZE, NAME FROM V$INSTANCE);

达梦技术社区地址:https://eco.dameng.com