数据库运维
记录DBA学习成长历程

DM8-MPP搭建(两节点)

文章目录

DM MPP 中的每一个DM数据库服务器实例作为一个执行节点,简称EP。客户端可连接任意一个EP节点进行操作,所有EP对客户来说都是对等的。

DM MPP系统内每个EP只负责自身部分数据的读写,执行计划在所有EP并行执行。能充分利用个EP的计算能力及发挥各EP独立存储的优势。数据只在必要时通过DM的告诉邮件MAL系统在EP间传递。当通信代价占整体执行代价的比例较小时,更能体现大规模并行处理的优势,随着系统规模的扩大,并行之路越多,优势越明显。

DM MPP采用的完全对等无共享体系架构,结合了完全无共享体系的有点,在此基础上又前进了一步,不采用增加主控制节点来协调所有并行处理的主从式方法,而是各个几点完全对等,等进一步简化了体系的实现,也消除了系统可能存在的主节点瓶颈问题。

系统规划:

实例名 MAL_INST_HOST MAL_INST_PORT MAL_HOST MAL端口 MPP_SEQN
EP01 10.0.0.200 5236 10.0.0.200 10001 0
EP02 10.0.0.201 5237 10.0.0.201 20001 1

准备两台机器:

ep01:

[root@ep01 bin]# ./dminit path=/dm/data/ db_name=DMDB instance_name=EP01 port_num=5236 SYSDBA_PWD="dameng123" 
initdb V8
db version: 0x7000a
file dm.key not found, use default license!
License will expire on 2021-02-12

log file path: /dm/data/DMDB/DMDB01.log

log file path: /dm/data/DMDB/DMDB02.log

write to dir [/dm/data/DMDB].
create dm database success. 2021-01-29 13:18:34

注册数据库:

[root@ep01 root]# ./dm_service_installer.sh -t dmserver -p DMDB -dm_ini /dm/data/DMDB/dm.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDMDB.service to /usr/lib/systemd/system/DmServiceDMDB.service.
创建服务(DmServiceDMDB)完成

EP02:

[root@ep02 bin]# ./dminit path=/dm/data/ db_name=DMDB instance_name=EP02 port_num=5237 SYSDBA_PWD="dameng123" 
initdb V8
db version: 0x7000a
file dm.key not found, use default license!
License will expire on 2021-02-12

log file path: /dm/data/DMDB/DMDB01.log

log file path: /dm/data/DMDB/DMDB02.log

write to dir [/dm/data/DMDB].
create dm database success. 2021-01-29 13:25:01

注册数据库:

[root@ep02 root]# ./dm_service_installer.sh -t dmserver -p DMDB -dm_ini /dm/data/DMDB/dm.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDMDB.service to /usr/lib/systemd/system/DmServiceDMDB.service.
创建服务(DmServiceDMDB)完成

修改 EP01 的 dm.ini 的以下几个参数如下:

INSTANCE_NAME = EP01
PORT_NUM = 5236
MAL_INI = 1
MPP_INI = 1

修改 EP02 的 dm.ini 的以下几个参数如下:

INSTANCE_NAME = EP02
PORT_NUM = 5237
MAL_INI = 1
MPP_INI = 1

配置 dmmal.ini

为两个 EP 配置 dmmal.ini 如下,配置完全一样,EP 间可互相拷贝。dmmal.ini 与
dm.ini 放在相同的目录下。

[MAL_INST1]
MAL_INST_NAME = EP01
MAL_HOST = 10.0.0.200
MAL_PORT = 10001
MAL_INST_HOST = 10.0.0.200
MAL_INST_PORT = 5236
[MAL_INST2]
MAL_INST_NAME = EP02
MAL_HOST = 10.0.0.201
MAL_PORT = 20001
MAL_INST_HOST = 10.0.0.201
MAL_INST_PORT = 5237

配置 dmmpp.ctl

dmmpp.ctl 是一个二进制文件,用户不能直接配置,需要先配置 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”子目录中。

[root@ep01 bin]# ./dmctlcvt TYPE=2 SRC=/dm/data/DMDB/dmmpp.ini DEST=/dm/data/DMDB/dmmpp.ctl
DMCTLCVT V8
convert txt to ctl success!

将生成的 dmmpp.ctl 拷贝至另一 EP,保证 MPP 系统中所有 EP 的 dmmpp.ctl 完全
相同。

运行 MPP

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

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

行号 SERVICE_NAME INST_NAME EP_SEQNO STATE
---------- ------------- --------- ----------- -----
1 SERVICE_NAME1 EP01 0 OK
2 SERVICE_NAME2 EP02 1 OK

建立分布表

下面给出几个简单的创建不同类型分布表的例子。

例 1:创建哈希分布表 T_HASH,分布列为 C1。

SQL> CREATE TABLE T_HASH(C1 INT, C2 CHAR(10))DISTRIBUTED BY HASH (C1);
操作已执行
已用时间: 16.649(毫秒). 执行号:992.


EP02可以查到

[dmdba@ep02 bin]$ disql sysdba/dameng123:5237

服务器[LOCALHOST:5237]:处于普通打开状态
登录使用时间: 8.227(毫秒)
disql V8
SQL> desc T_HASH;

行号 NAME TYPE$ NULLABLE
---------- ---- -------- --------
1 C1 INTEGER Y
2 C2 CHAR(10) Y

已用时间: 46.399(毫秒). 执行号:305249.

例 2:创建随机分布表 T_RANDOM。

SQL> CREATE TABLE T_RANDOM(C1 INT, C2 CHAR(10))DISTRIBUTED RANDOMLY;
操作已执行
已用时间: 15.748(毫秒). 执行号:993.

SQL> desc T_RANDOM;

行号 NAME TYPE$ NULLABLE
---------- ---- -------- --------
1 C1 INTEGER Y
2 C2 CHAR(10) Y

已用时间: 39.142(毫秒). 执行号:305279.

例 3:创建复制分布表 T_FULLY。

SQL> CREATE TABLE T_FULLY(C1 INT, C2 CHAR(10))DISTRIBUTED FULLY;
操作已执行
已用时间: 22.836(毫秒). 执行号:994.

SQL> desc T_FULLY;

行号 NAME TYPE$ NULLABLE
---------- ---- -------- --------
1 C1 INTEGER Y
2 C2 CHAR(10) Y

已用时间: 36.515(毫秒). 执行号:305309.

例 4:创建范围分布表 T_RANGE,分布列为 C1。

SQL> 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);2 3 
操作已执行
已用时间: 17.970(毫秒). 执行号:995.

SQL> desc T_RANGE;

行号 NAME TYPE$ NULLABLE
---------- ---- -------- --------
1 C1 INTEGER Y
2 C2 CHAR(10) Y

已用时间: 36.516(毫秒). 执行号:305339.

例 5:创建 LIST 分布表 T_LIST,分布列为 C1。

SQL> CREATE TABLE T_LIST(C1 INT, C2 CHAR(10)) DISTRIBUTED BY LIST (C1) (VALUES(3) ON EP01,VALUES(4) ON EP02);
2 操作已执行
已用时间: 30.160(毫秒). 执行号:996.

SQL> desc T_LIST;

行号 NAME TYPE$ NULLABLE
---------- ---- -------- --------
1 C1 INTEGER Y
2 C2 CHAR(10) Y

已用时间: 42.306(毫秒). 执行号:305369.

例 6:创建哈希分布表的范围水平分区表。

SQL> 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);
9 10 操作已执行
已用时间: 47.560(毫秒). 执行号:997.

SQL> desc T_HASH_RANGE_PARTITION;

行号 NAME TYPE$ NULLABLE
---------- ---- -------- --------
1 C1 INTEGER Y
2 C2 CHAR(10) Y
3 C3 CHAR(10) Y

已用时间: 51.757(毫秒). 执行号:305399.

 

在创建分布表时,用户应注意以下一些使用限制:

1、单机模式下建的分布表和普通表一样,但是不能创建指定实例名的分布表(如范围分布表和 LIST 分布表);

2、在 MPP 模式下创建分布表,如果未指定列则默认为 RANDOMLY(随机)分布表;

3、分布列类型不支持 BLOB、CLOB、IMAGE、TEXT、LONGVARCHAR、BIT、BINARY、VARBINARY、LONGVARBINARY、BFILE、时间间隔类型、虚拟列和用户自定义类型;

4、HASH 分布、RANGE 分布、LIST 分布允许更新分布列,并支持包含大字段列的表的分布列更新,但包含 INSTEAD OF 触发器的表、堆表不允许更新分布列;

5、对于 FULLY(复制)分布表,只支持单表查询的更新和删除操作,并且查询项或者条件表达式中都不能包含 ROWID 伪列表达式;

6、RANGE(范围)分布表和 LIST(列表)分布表,分布列与分布列值列表必须一致,并且指定的实例名不能重复;

7、引用约束的引用列和被引用列都必需包含分布列,且分布情况完全相同;

8、随机分布表不支持 UNIQUE 索引。

快速数据装载

DM MPP 特别适合于海量数据的存储和处理,因此在应用中常常面临将大量数据从某个或某些历史数据库中装载到 MPP 系统的需求。为了满足海量数据的快速装载需求,DM 提供了快速装载工具 dmfldr,能够对 DM 单机版和 MPP 系统进行海量数据的快速装载。

dmfldr 支持 MPP 环境下的两种数据加载模式:客户端分发模式和本地分发模式,通过参数 MPP_CLIENT 进行设置。使用客户端分发模式时,数据在 dmfldr 客户端进行分发然后直接向指定 EP 发送数据;使用本地分发模式时,每个 EP 对应一个 dmfldr 和一份数据,每个 dmfldr 只选择出对应本节点的数据并发送,不管其他节点的数据。默认使用客户端分发模式。

停止 MPP 系统

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

赞(1)
MySQL学习笔记 » DM8-MPP搭建(两节点)