当前位置: 首页 > news >正文

【达梦MPP(不带主备)集群搭建】

达梦MPP(不带主备)集群搭建

达梦大规模并行处理MPP(DM Massively Parallel Processing,缩写 DM MPP)是基于达梦数据库管理系统研发的完全对等无共享式集群组件,支持将多个DM数据库实例组织为一个并行计算网络,对外提供统一的数据库服务。

一、环境规划

配置一个两节点的MPP集群,实例名为EP01和EP02,相关配置信息如下。

二、环境搭建

创建实例EP01

su - dmdba
cd /home/dmdba/dmdbms/bin
./dminit path=/home/dmdba/dmdbms/data/  PAGE_SIZE=32  EXTENT_SIZE=32  CASE_SENSITIVE=Y DB_NAME=DM  INSTANCE_NAME=EP01 PORT_NUM=5236 LOG_SIZE=2048 SYSDBA_PWD=DaMeng123 SYSAUDITOR_PWD=DaMeng123

创建实例EP02

su - dmdba
cd /home/dmdba/dmdbms/bin
./dminit path=/home/dmdba/dmdbms/data/  PAGE_SIZE=32  EXTENT_SIZE=32  CASE_SENSITIVE=Y DB_NAME=DM  INSTANCE_NAME=EP02 PORT_NUM=5236 LOG_SIZE=2048 SYSDBA_PWD=DaMeng123 SYSAUDITOR_PWD=DaMeng123

注意:两台机器关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

2.1配置EP01库参数

2.1.1 修改dm.ini
cd /home/dmdba/dmdbms/data/DM
vim /home/dmdba/dmdbms/data/DM/dm.ini
#configuration fileMAL_INI       = 1         #dmmal.iniMPP_INI        = 1
2.1.2 创建dmmal.ini
vim /home/dmdba/dmdbms/data/DM/dmmal.ini
[MAL_INST1]
MAL_INST_NAME            = EP01  #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST                 = 192.168.148.128  #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT                 = 5336  #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST            = 192.168.148.128  #实例的对外服务 IP 地址
MAL_INST_PORT            = 5236  #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致[MAL_INST2]
MAL_INST_NAME            = EP02
MAL_HOST                 = 192.168.148.130
MAL_PORT                 = 5336
MAL_INST_HOST            = 192.168.148.130
MAL_INST_PORT            = 5236
2.1.3配置dmmpp.ini
vim /home/dmdba/dmdbms/data/DM/dmmpp.ini
[SERVICE_NAME1] 
MPP_SEQ_NO = 0 
MPP_INST_NAME = EP01[SERVICE_NAME2] 
MPP_SEQ_NO = 1 
MPP_INST_NAME = EP02 

使用DM提供的工具dmctlcvt将dmmpp.ini转换成dmmpp.ctl,dmctlcvt工具在DM安装目录的“bin”子目录中。
转换生成的dmmpp.ctl需要放在与dm.ini同一个目录。下面的命令将dmmpp.ini转换为dmmpp.ctl,命令中的“TYPE=2”参数表示将文本文件转换成控制文件,也可以使用“TYPE=1”参数进行逆向转换。

su - root
chown -R dmdba:2002 /home/dmdba/dmdbms
chmod -R 755 /home/dmdba/dmdbms
cd /home/dmdba/dmdbms/bin
./dmctlcvt TYPE=2 SRC=/home/dmdba/dmdbms/data/DM/dmmpp.ini  DEST=/home/dmdba/dmdbms/data/DM/dmmpp.ctl

2.2 配置EP02库参数

2.2.1修改 dm.ini
#configuration fileMAL_INI       = 1         #dmmal.iniMPP_INI        = 1
创建dmmal.ini
vim /home/dmdba/dmdbms/data/DM/dmmal.ini
[MAL_INST1]
MAL_INST_NAME            = EP01  #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST                 = 192.168.148.128  #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT                 = 5336  #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST            = 192.168.148.128  #实例的对外服务 IP 地址
MAL_INST_PORT            = 5236  #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致[MAL_INST2]
MAL_INST_NAME            = EP02
MAL_HOST                 = 192.168.148.130
MAL_PORT                 = 5336
MAL_INST_HOST            = 192.168.148.130
MAL_INST_PORT            = 5236
2.2.3配置dmmpp.ini
vim /home/dmdba/dmdbms/data/DM/dmmpp.ini
[SERVICE_NAME1] 
MPP_SEQ_NO = 0 
MPP_INST_NAME = EP01[SERVICE_NAME2] 
MPP_SEQ_NO = 1 
MPP_INST_NAME = EP02

使用DM提供的工具dmctlcvt将dmmpp.ini转换成dmmpp.ctl,dmctlcvt工具在DM安装目录的“bin”子目录中。
转换生成的dmmpp.ctl需要放在与dm.ini同一个目录。下面的命令将dmmpp.ini转换为dmmpp.ctl,命令中的“TYPE=2”参数表示将文本文件转换成控制文件,也可以使用“TYPE=1”参数进行逆向转换。

cd /home/dmdba/dmdbms/bin
./dmctlcvt TYPE=2 SRC=/home/dmdba/dmdbms/data/DM/dmmpp.ini  DEST=/home/dmdba/dmdbms/data/DM/dmmpp.ctl

出现权限问题,处理方式通EP01

2.3 服务启动

在两节点分别启动数据库服务

./dmserver  /home/dmdba/dmdbms/data/DM/dm.ini

在这里插入图片描述

三、环境验证

输入以下SQL语句,查看两节点状态是否为OK:

SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();

在这里插入图片描述

四、验证是否根据分布列进行自动分发

4.1建立不同的分布式表

①创建哈希分布表T_HASH,分布列为 C1

CREATE TABLE T_HASH(C1 INT, C2 CHAR(10))DISTRIBUTED BY HASH (C1);-- 插入测试数据
INSERT INTO T_HASH VALUES (1, 'A'), (2, 'B'), (3, 'C'), (4, 'D'), (5, 'E');-- 验证数据分布(正确方法)
--MPP系统下设置当前会话是否只查询本节点数据。如果不设置,表示可以查询全部节点数据,0表示全部,1表示当前节点
SP_SET_SESSION_MPP_SELECT_LOCAL(0);
--查询MPP系统下当前会话是否只查询本节点数据。0表示查询全部节点数据,1表示只查询本节点数据
SELECT SF_GET_SESSION_MPP_SELECT_LOCAL();
--统计 MPP 环境下表在各个节点的数据行数
CALL SP_GET_EP_COUNT('SYSDBA','T_HASH');

在这里插入图片描述
②创建随机分布表 T_RANDOM

CREATE TABLE T_RANDOM(C1 INT, C2 CHAR(10))DISTRIBUTED RANDOMLY;-- 插入数据
INSERT INTO T_RANDOM VALUES 
(1, 'A'), (2, 'B'), (3, 'C'), 
(4, 'D'), (5, 'E'), (6, 'F');-- 验证数据分布(正确方法)
--统计 MPP 环境下表在各个节点的数据行数
CALL SP_GET_EP_COUNT('SYSDBA','T_RANDOM');

在这里插入图片描述
③创建复制分布表 T_FULLY

CREATE TABLE T_FULLY(C1 INT, C2 CHAR(10))DISTRIBUTED FULLY;-- 插入数据
INSERT INTO T_FULLY VALUES 
(1, 'A'), (2, 'B'), (3, 'C'), 
(4, 'D'), (5, 'E'), (6, 'F');--统计 MPP 环境下表在各个节点的数据行数
CALL SP_GET_EP_COUNT('SYSDBA','T_FULLY');

在这里插入图片描述
④创建范围分布表 T_RANGE,分布列为 C1

CREATE TABLE T_RANGE (C1 INT, C2 CHAR(10)) DISTRIBUTED BY RANGE (C1) (VALUES EQU OR LESS THAN (100) ON EP01, VALUES LESS
THAN(MAXVALUE) ON EP02);
-- 插入测试数据
INSERT INTO T_RANGE VALUES (50, 'A'), (150, 'B'), (25, 'C'), (300, 'D'), (75, 'E');--统计 MPP 环境下表在各个节点的数据行数
CALL SP_GET_EP_COUNT('SYSDBA','T_RANGE');

在这里插入图片描述
⑤创建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);-- 插入测试数据
INSERT INTO T_LIST VALUES (3, 'A'), (4, 'B'), (4, 'C'), (3, 'D'), (4, 'E');--统计 MPP 环境下表在各个节点的数据行数
CALL SP_GET_EP_COUNT('SYSDBA','T_LIST');

在这里插入图片描述
⑥创建哈希分布表的范围水平分区表

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);-- 插入测试数据
INSERT INTO T_HASH_RANGE_PARTITION VALUES 
(-5, 'A', 'X'), (5, 'B', 'Y'), (50, 'C', 'Z'), (500, 'D', 'W');--统计 MPP 环境下表在各个节点的数据行数
CALL SP_GET_EP_COUNT('SYSDBA','T_HASH_RANGE_PARTITION');

在这里插入图片描述
总结:
哈希分布:数据均匀分布,相同键值总在同一节点,适合JOIN操作频繁的表
随机分布:数据完全随机分布,适合没有明显JOIN需求的表
复制分布:每个节点有完整数据副本,适合小表、维度表
范围分布:按范围值分布数据,适合范围查询频繁的场景
LIST分布:按离散值分布,适合有明显分类属性的数据
组合分布:可以结合分区和分布策略实现更复杂的数据分布

4.2 以全局方式和本地方式登录集群

4.2.1全局方式操作(通过协调节点)

登录EP01
①可以看到所有节点的数据聚合结果
在这里插入图片描述
②查询会被自动分发到各节点并行执行
③可创建分布式表

4.2.2本地方式操作(直接连接数据节点)

登录EP02

达梦社区地址:

达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台
https://eco.dameng.com

http://www.dtcms.com/a/307329.html

相关文章:

  • 【Linux我做主】进程优先级
  • Linux的库制作与原理
  • e签宝CEO金宏洲受邀出席WAIC世界人工智能大会
  • 对比学习:原理演进、技术突破与跨领域应用全景
  • 【Java23种设计模式】:模板方法模式
  • Java设计模式之《命令模式》
  • SQL理解——INNER JOIN
  • 机器人行业工商注册企业基本信息数据(1958-2023年)
  • MySQL转PostgreSQL迁移实战:从语法错误到完美兼容
  • AWS云安全审计终极实战指南:构建自动化安全防线
  • Golang 调试技巧:在 Goland 中查看 Beego 控制器接收的前端字段参数
  • Sort Merge Join为什么是Spark中最优的join
  • C语言指针(三):数组传参本质、冒泡排序与二级指针详解
  • C++异常处理的成本:理解与优化
  • 超宽带测距+测角+无线通信一体化模组:智能门锁、智能遥控器、AR头戴、智能穿戴
  • yolo目标检测基础知识
  • AWS高级解决方案架构师黄海波:GenAI 时代非结构化数据处理的实践与趋势洞察
  • 【最近公共祖先】ST表法
  • 从渠道渗透到圈层渗透:开源链动2+1模式、AI智能名片与S2B2C商城小程序的协同创新路径研究
  • 联通元景万悟 开源,抢先体验!!!
  • 技术速递|GitHub Copilot for Eclipse 迈出重要一步
  • SpringAI:AI工程应用框架新选择
  • 转码刷 LeetCode 笔记[1]:3.无重复字符的最长子串(python)
  • 一对一交友小程序 / APP 系统架构分析
  • n8n为什么建议在数组的每个item中添加json键?
  • python的异步、并发开发
  • 聊下多线程查询数据库
  • YOLO---01目标检测基础
  • C++从入门到起飞之——智能指针!
  • day 40 打卡-装饰器