达梦数据库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 服务器组建集群。
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日常管理视图
- 获取会话连接的 EP 的节点序号
SELECT SF_GET_SELF_EP_SEQNO();
- 根据 ROWID 获取本行数据来自哪个 EP
SELECT SF_GET_EP_SEQNO(ROWID);
- 获取 EP 节点配置信息
SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) =SF_GET_SELF_EP_SEQNO();
- 获取当前会话连接的实例名
SELECT NAME FROM V$INSTANCE WHERE SF_GET_EP_SEQNO(ROWID) =SF_GET_SELF_EP_SEQNO();
- 获取 MPP 系统内所有 EP 的所有会话
SELECT * FROM V$SESSIONS;
- 获取当前连接的实例上的所有会话
SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
- 获取实例 EP01 上的所有会话
SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = (SELECT DISTINCT EP_SEQNO FROM V$MPP_CFG_ITEM WHERE INST_NAME ='EP01');
- 获取表 TEST 在每个实例上的数据行数
CALL SP_GET_EP_COUNT('SYSDBA','TEST');
- 获取所接实例上的表 TEST 的使用空间
SELECT TABLE_USED_PAGES('SYSDBA','TEST');
- 获取每个实例上的表 TEST 使用空间
SELECT TABLE_USED_PAGES('SYSDBA','TEST'), NAME FROM V$INSTANCE;
- 获取所有实例上表 TEST 的总使用空间
SELECT SUM(TOTAL_SIZE) FROM (SELECT TABLE_USED_PAGES('SYSDBA','TEST') TOTAL_SIZE, NAME FROM V$INSTANCE);
达梦技术社区地址:https://eco.dameng.com