注册
DM MPP介绍与部署
专栏/培训园地/ 文章详情 /

DM MPP介绍与部署

DM_22CD 2024/10/10 611 1 0
摘要

1 有关MPP

  MPP(Massively Parallel Processing,大规模并行处理)是一种并行计算架构,旨在通过将计算任务分配到多个独立的处理单元或节点上来实现高效的并行处理。每个节点通常包含自己的处理器、内存、操作系统和存储资源,节点之间通过高速网络进行通信。MPP 架构能够处理大规模数据集,广泛应用于高性能计算、数据仓库、分布式数据库等领域。
  市面上常见的系统架构见1.1-1.4小节。

1.1 完全共享

  SMP是其典型实现,局限于单节点服务器,性能提升有限,扩展能力收到限制。在SMP中所有处理器共享内存和 I/O 资源。处理器之间没有明确的分工,所有任务由OS进行调度,通常适合中小规模的并行计算任务。
  完全共享架构示意图见图1-1:
image.png

图1-1 完全共享架构

1.2 共享存储

  与其他架构相区别的显著特征是带有多个Database实例,所有实例与共享存储相连;这可以实现多实例并行,但仍需要建设唯一的数据管道总线将I/O信息集合、过滤到共享存储,对数据管道的传输带宽和共享存储磁盘的性能均提出了较高要求,需要特质画的存储设备,实施成本较高。
  共享存储架构示意图见图1-2:
image.png

图1-2 共享存储架构

1.3 完全无共享

  相比于前两种,基于硬件的数据仓库平台一般采用完全无共享体系;该体系的主要特征在于加入了一个主控节点、每个节点都有通向本地磁盘的独立通道,在简化了控制和通信体系的同时保存良好的拓展性。
  在完全无共享架构中,主控节点(Master Node)是分布式系统中常见的角色分配方式之一,负责全局管理和任务调度。它是系统的核心,处理用户的请求,并将这些请求分解为多个小任务,分配给不同的工作节点去执行。主控节点还负责管理系统的全局元数据,如数据分片和数据分布信息,并监控各节点的状态。主控节点的存在简化了集群管理,但是由于它需要集中处理任务调度和查询优化等关键任务;
  随着系统规模的扩大,主控节点可能成为性能瓶颈,进而影响整体系统的扩展性。此外,主控节点一旦发生故障,整个系统将无法提供服务,这使得它成为潜在的单点故障。因此,主控节点需要设计有冗余机制以确保系统的高可用性。
  另一种常见的角色分配方式是主从节点(Master-Slave Nodes)。相比之下,主从节点架构中的 主节点 和 从节点 承担着不同的职责。主节点负责处理所有的写操作和事务管理,它是系统中的数据控制中心,处理数据更新和变更操作。而从节点则是主节点的只读副本,主要处理读取请求,并从主节点同步最新的数据。主从架构的优势在于通过读写分离来提升性能,从节点能够分担主节点的读取压力,提供更高的系统吞吐量。同时,从节点在主节点发生故障时,可以被提升为主节点,从而提高系统的容错性。这样的架构非常适合读写操作需求差异较大的系统,能够有效提升读取性能,并确保系统在主节点故障时仍能继续提供服务。
  对于这两种设计惯例的比较,各有其适用场景。主控节点架构适用于需要集中调度和管理的场景,而主从节点架构则更适合需要读写分离、负载均衡和高可用性的场景。主控节点是分布式系统的“大脑”,管理任务的分配和全局元数据,而主从架构则通过主从复制和角色切换,提升系统性能并增强容错能力。
  完全无共享架构示意图见图1-3:
image.png

图1-3 完全无共享架构

1.4 完全对等无共享

  DM MPP采用的是完全对等无共享架构,在汲取完全无共享架构优点的基础上,摒弃了采用主控制节点来协调所有并行处理的主从式方法,转而令各个节点权责对等;该设计简化了体系实现,也避免了主节点瓶颈问题。
image.png

图1-4 完全对等无共享架构

  DM MPP中的每一个DM数据库实例都作为一个EP(Execution Point)。应用程序Client可以连接到任何一个EP进行操作,所有EP对于Client来说都是对等的;而当客户端与EP间的Session建立后,于该Session而言,该EP为主节点,其他为从节点。
  建立连接后的执行过程如下:主EP接收用户的SQL请求,并在主EP上生成执行计划;主EP将执行计划打包后通过高速MAL网络分发给其他从EP;各EP并行执行、主EP收集各EP(包含自身)的执行结果,汇总结果并发送回用户。
  这样的架构设计和执行步骤赋予了DM MPP的TB/PB级数据分析、高性价比、高可靠性、支持超大规模集群的显著优势;随着通信代价占总体代价的比例越小、系统规模的扩大、并行支路越多时,DM MPP的上述优势更加明显。

2 DM MPP基本概念与原理

2.1 基本概念

2.1.1 执行节点EP

  DM MPP 系统中每一个运行的 DM 数据库服务器实例称为一个执行节点 EP,基于数据守护的 MPP 环境内的备库除外;

2.1.2 主、从EP

  由于完全对等无共享架构,从整个系统的视角来看,每个EP的地位是相同的;但从用户视角出发,用户会话连接的EP为用户会话的主EP,此时系统中其他EP对于用户会话均为从EP;

2.1.3 数据分布

  DM MPP系统中的数据分布在各EP中,其分布类型包括哈希分布、随机分布、复制分布、范围分布、LIST分布等;

2.1.4 哈希分布

  按照表定义中指定的一列或多列,对行数据计算hash值;根据该hash值和hash映射表,将该行数据分布到映射的节点;此类情况下尽量在表的连接查询中使用hash分布列作为连接键,查询计划会自动优化,通过索引、减少计划中通讯操作符等方式,减少数据在节点间的分发,提高查询效率;

2.1.5 随机分布

  随机分布表不存在分布列,插入表数据时会按照一定的随机算法,将数据随机均衡到各个节点;相比于hash分布,随机分布的数据和节点间不存在映射关系,遂在节点数量改变、没有节点数据均衡要求时,可以不用对节点现有的顺序进行变动;随机分布在复杂查询以及存在较多的节点间数据分发情况没有hash分布性能更高;

2.1.6 复制分布

  在每个节点上的本地数据都是一份完整的拷贝,查询该表数据在任意节点上都可以完成;一般用于数据量不大的表。

2.1.7 范围分布

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

2.1.8 LIST分布

  与范围分布概念类似,不同之处在于适用于表中列值可列举的情况;通过指定表中的一个或多个列的离散集,来确定将一行数据哪个相应EP上。
  DM MPP同时支持数据分布与分区表,实现了“数据分布后再分区”。在数据分布到各节点的基础上,再在单个节点上将数据再次分区,可进一步提高查询性能。分布的类型和分区的类型可以混合搭配,比如建立哈希分布表的范围水平分区表。

2.1.9 全局连接与本地连接

  1. 全局连接
      用户只需要登录某个EP,MPP系统会自动建立这个EP与其他EP的连接,故用户实际建立起的是与MPP系统的全局连接,可以在整个MPP系统内查询分布的数据。使用全局连接时,要求MPP系统的所有EP都能正常提供服务,否则无法建立连接;
  2. 本地连接
      使用本地连接时,用户登录到某个EP后,该EP不再建立与其他EP的连接,用户的所有数据库操作仅在该连接上执行;此时,SELECT语句、UPDATE, DELETE语句的WHERE子句仅查询本地EP的数据,同时INSERT语句插入的数据如果按照数据分布定义应该分布在其他EP节点时会报错。
    通常在整个MPP系统正常运行时使用全局连接;DM MPP的快速装载使用本地连接、MPP系统中部分EP故障时也可以使用本地连接;

  DM的各接口驱动程序都提供了“连接属性”用于设置全局连接(登录)和本地连接(登录),缺省为全局连接;DIsql使用登录参数MPP_TYPE来指定全局或本地连接,值分别为GLOBAL和LOCAL。

2.2 MPP并行执行计划

2.3 并行执行计划相关操作符

  DM MPP环境下,各EP执行的是并行计划;并行计划是在单节点执行计划的基础上,按照一定的规则于适当位置插入MPP通讯操作符生成的;这些操作符在表2-1中给出:

表2-1 MPP并行执行计划通讯操作符

操作符名称 功能
MPP GATHER (MGAT) 主EP收集其他EP节点数据;从其他EP发送数据到主EP。
MPP COLLECT (MCLCT) 在MGAT功能的基础上,增加主从EP执行同步功能,避免数据在主EP上堆积;一个计划树中一般只会在较上层出现一个MCLCT,但会有多个MGAT。
MPP DISTRIBUTE (MDIS) 各EP节点间相互分发数据,按照分发列计算行数据的目标节点并发送,目标节点负责接收。
MPP BROADCAST (MBRO) 类似MGAT,收集数据到主EP;该操作符带有聚集函数运算功能,仅与FAGR配合使用。
MPP SCATTER (MSCT) 主EP发送所有完整数据到从EP,保证每个节点数据完整;一般和MGAT配合使用。

2.4 并行计划的生成

  DM计划树执行时,数据总是自底向上流动的。考虑到在MPP环境中,每个EP只保留表的部分数据(除复制分布方式),故计划树叶节点的数据都不是完整的,向上传递的仅是该EP的本地数据;
要想获得完整的正确执行结果,上层节点必须检验下层节点向上传输的数据的完整性,从而决定是否要添加MPP通信操作符,并根据单节点操作符的功能和数据分布情况决定添加何种MPP通信操作符。

3 DM MPP环境搭建与使用

3.1 方案制定

  方案制定过程中需要考虑的几方面因素如下:

  • 应用是否需要MPP特性
      DM MPP解决方案特点包括高性价比、高可靠性等,主要适用于大量数据的OLAP应用;在合理规划下也可用作并发量不大的OLTP或HTAP,但不适合高并发的OLTP应用。
  • MPP规模
      DM MPP最多支持1024个节点;理论上来说,节点数量越多、并行越充分、效率越高,但需要考虑到EP间网络带宽瓶颈影响,并在充分考察应用数据规模、硬件规划、项目预算等情况的基础上做出决策。
  • 硬件资源
      DM MPP采用完全对等不共享架构,不需要专用硬件,组建集群的硬件要求相对较低;考虑到DM MPP系统需要高速网络在各EP间传递数据,网络带宽是其效率提升的关键;建议配置千兆、万兆网络内部网络,具体情况需根据实际需求、配置成本和实际条件等综合决定。
  • 如何设计应用表
      DM MPP系统数据分布在各EP节点中,用户需要根据应用中表数据的分布特点,在hash分布、随机分布、复制分布、范围分布、LIST分布中进行选择;
    此外,DBA还需要根据用户的实际情况确定表的分布列、分布列的数据类型以及是否需要组合分布列等,对于查询连接中使用频率较高的连接键可以考虑作为分布列。
  • 配置MPP系统参数
      DBA配置DM MPP系统参数在dm.ini、dmmal.ini中进行,需要根据应用的实际情况和硬件规格进行适当的配置;各EP需要保持相同的INI参数。

3.2 DM MPP环境搭建

  本节中手动搭建一个两节点的DM MPP。

3.2.1 系统规划

  每个节点具备两个网卡,分别连接到业务网络和MAL系统;两节点实例名分别为EP01和EP02,其配置详情见表3-1:

表3-1 DM MPP系统规划

实例名 MAL_INST_HOST MAL_INST_PORT MAL_HOST MAL_PORT MPP_SEQNO
MPP_Node1 192.168.3.2 5236 192.168.4.2 5269 0
MPP_Node2 192.168.3.3 5236 192.168.4.3 5269 1

  按照系统规划内容,运行如下命令创建business和heartbeat网络:

[root@VM-8-6-centos ~]# docker network create --driver=bridge --subnet=192.168.3.0/24 dmmpp-business
6c06ebd3fe60e6f8c13c7ae3f7776bf25aefb90ca1985d1691505bc4276217a3
[root@VM-8-6-centos ~]# docker network create --driver=bridge --subnet=192.168.4.0/24 dmmpp-heartbeat
93ceb0633390e9390f3e63635b2c2b288261fb869f3ea2df9394ca414a820d7b

  业务网络和心跳网络创建成功后,创建两节点容器并绑定网络IP:

[root@VM-8-6-centos ~]# docker run -d --restart=always --name=MPP_Node1 --network dmmpp-business --ip 192.168.3.2  --privileged=true -e LD_LIBRARY_PATH=/opt/dmdbms/bin -e PAGE_SIZE=32 -e EXTENT_SIZE=32 -e LOG_SIZE=2048 -e UNICODE_FLAG=1 -e INSTANCE_NAME=MPP_Node1 dm8_single:dm8_20240715_rev232765_x86_rh6_64
e98827392765d2378107d336f5ab3ac63705eaf0485bdeb05133f67ef4853096
[root@VM-8-6-centos ~]# docker run -d --restart=always --name=MPP_Node2 --network dmmpp-business --ip 192.168.3.3  --privileged=true -e LD_LIBRARY_PATH=/opt/dmdbms/bin -e PAGE_SIZE=32 -e EXTENT_SIZE=32 -e LOG_SIZE=2048 -e UNICODE_FLAG=1 -e INSTANCE_NAME=MPP_Node2 dm8_single:dm8_20240715_rev232765_x86_rh6_64
e4b371b5c0630a3812b01707dd894244e628a01bc88bc01c829aa1ffd9818414
[root@VM-8-6-centos ~]# docker network connect dmmpp-heartbeat MPP_Node1
[root@VM-8-6-centos ~]# docker network connect dmmpp-heartbeat MPP_Node2

3.2.2 配置dm.ini

  分别在节点MPP_Node1和MPP_Node2上修改dm.ini的部分参数如下:

MAL_INI = 1
MPP_INI = 1

3.2.3 配置dmmal.ini

  为两个EP分别配置dmmal.ini,文件在两个节点上内容相同:

[MAL_INST1]
MAL_INST_NAME           = MPP_Node1
MAL_HOST            	= 192.168.4.2
MAL_PORT            	= 5269
MAL_INST_HOST           = 192.168.3.2
MAL_INST_PORT           = 5236

[MAL_INST2]
MAL_INST_NAME           = MPP_Node2
MAL_HOST            	= 192.168.4.3
MAL_PORT            	= 5269
MAL_INST_HOST           = 192.168.3.3
MAL_INST_PORT           = 5236

3.2.4 配置dmmpp.ctl

  由于dmmpp.ctl是二进制文件、用户不能直接配置,我们需要先配置dmmpp.ini,再使用dmctlcvt工具将其转换为dmmpp.ctl,放置在与dm.ini、dmmal.ini相同的目录下;同时需要保证两个节点上的dmmpp.ctl相同。
  配置dmmpp.ini:

[SERVICE_NAME1]
MPP_SEQ_NO          	= 0
MPP_INST_NAME           = MPP_Node1

[SERVICE_NAME2]
MPP_SEQ_NO          	= 1
MPP_INST_NAME           = MPP_Node2

  使用dmctlcvt工具进行转换;其中,TYPE2参数表示将文本文件转换为控制文件,而TYPE1参数的作用恰好相反:

root@e98827392765:/opt/dmdbms/bin# ./dmctlcvt TYPE=2 SRC=/opt/dmdbms/data/DAMENG/dmmpp.ini DEST=/opt/dmdbms/data/DAMENG/dmmpp.ctl
DMCTLCVT V8
convert txt to ctl success!

root@e4b371b5c063:/opt/dmdbms/bin# ./dmctlcvt TYPE=2 SRC=/opt/dmdbms/data/DAMENG/dmmpp.ini DEST=/opt/dmdbms/data/DAMENG/dmmpp.ctl
DMCTLCVT V8
convert txt to ctl success!

  或者在其中一个节点上生成,再直接将dmmpp.ctl文件拷贝到另一个节点的指定位置也是可以的。

3.2.5 运行MPP

  经过前述的几个步骤后,DM MPP已经配置完成。分别启动MPP_Node1和MPP_Node2的DM数据库实例,DM MPP即可正常运行;用户可登录任一EP进行数据库操作:

3.3 建立分布表

  MPP数据分布类型和具体设置在建表时指定。示例如下:

  1. 创建hash分布表
SQL> CREATE TABLE T_HASH(C1 INT, C2 CHAR(10)) DISTRIBUTED BY HASH(C1);
executed successfully
used time: 19.065(ms). Execute id is 901.
  1. 创建随机分布表
SQL> CREATE TABLE T_RANDOM(C1 INT, C2 CHAR(10)) DISTRIBUTED RANDOMLY;
executed successfully
used time: 9.109(ms). Execute id is 902.
  1. 创建复制分布表
SQL> CREATE TABLE T_FULLY(C1 INT, C2 CHAR(10)) DISTRIBUTED FULLY;
executed successfully
used time: 9.998(ms). Execute id is 903.
  1. 创建范围分布表
SQL> CREATE TABLE T_RANGE(C1 INT, C2 CHAR(10)) DISTRIBUTED BY RANGE(C1) (VALUES EQU OR LESS THAN (100) ON MPP_Node1, VALUES LESS THAN (MAXVALUE) ON MPP_Node2);
executed successfully
used time: 13.294(ms). Execute id is 904.
  1. 创建LIST分布表
SQL> CREATE TABLE T_LIST(C1 INT, C2 CHAR(10)) DISTRIBUTED BY LIST(C1) (VALUES(3) ON MPP_Node1, VALUES(4) ON MPP_Node2);
executed successfully
used time: 10.742(ms). Execute id is 905.
  1. 创建hash分布表的范围水平分区表
SQL> CREATE TABLE T_HASH_RANGE_PARTITION(C1 INT, C2 CHAR(10), C3 CHAR(10))
2   PARTITION BY RANGE(C1) (
3   PARTITION PART_1 VALUES LESS THAN(0),
4   PARTITION PART_2 VALUES LESS THAN(10),
5   PARTITION PART_3 VALUES LESS THAN(100),
6   PARTITION PART_4 VALUES LESS THAN(MAXVALUE))
7   DISTRIBUTED BY HASH(C1);
executed successfully
used time: 28.298(ms). Execute id is 906.

  在创建分区表时,需要注意下述使用限制:

  • 单机模式下创建的分区表和普通表一样,但不能创建指定实例名的分布表(如范围分布表和LIST分布表);
  • 在MPP环境下创建分布表,如果未指定列则默认为RANDOMLY分布表;
  • 分布列类型不支持列表包括 BLOB、CLOB、IMAGE、TEXT、LONGVARCHAR、BIT、BINARY、VARBINARY、LONGVARBINARY、BFILE、时间间隔类型、虚拟列和用户自定义类型;
  • HASH分布、RANGE分布和LIST分布允许更新分布列,并支持包含大字段列的表的分布列更新,但包含INSTEAD OF触发器的表、堆表不允许更新分布列;
  • 对于FULLY分布表,只支持单表查询的更新和删除工作,并且查询项或者条件表达式中都不能包含ROWID伪列表达式;
  • RANGE和LIST分布表,分布列于分布列值列表必须一致,并且指定的实例名不能重复;
  • 引用约束的引用列和被引用列都必须包含分布列,且分布情况完全相同;
  • 随机分布表不支持UNIQUE索引。

3.4 快速数据装载

  DM MPP适用于海量数据的存储和处理,其中dmfldr快速装载工具能够对单机 / DM MPP系统进行海量数据的快速装载;
  dmfldr支持MPP环境下的两种数据加载模式:客户端分发模式和本地分发模式,通过参数MPP_CLIENT进行设置;使用客户端分发模式时,数据在dmfldr客户端进行分发然后直接向指定EP发送数据;使用本地分发模式时,每个EP对应一个dmfldr和一份数据,每个dmfldr只选择出对应本节点的数据并发送,不管其他节点的数据;
  默认情况下使用客户端分发模式。

3.5 停止MPP系统

  停止MPP系统只需关闭每个EP的数据库实例即可,对于其关闭顺序没有特定顺序要求。
  DM MPP运行过程中,任一EP停机都会导致整个MPP系统服务不可用;当前所有的用户会话会被自动断开,禁用全局登录,只能本地登录。因此,为了保证MPP系统的高可用,建议使用DM MPP与DM Data Watch相结合的部署方案。

3.6 MPP相关系统过程与函数

  1. SP_SET_SESSION_MPP_SELECT_LOCAL:设置当前会话是否只查询本节点数据。
  2. SF_GET_SESSION_MPP_SELECT_LOCAL:略;
  3. SP_SET_SESSION_LOCAL_TYPE:设置MPP本地登录时,本会话上是否允许DDL操作;默认不允许。
  4. SF_GET_EP_SEQNO:根据查询出的行数据的ROWID获取本条数据来自哪个EP。
  5. SF_GET_SELF_EP_SEQNO:获取本会话连接的EP序号。
  6. SP_GET_EP_COUNT:统计MPP环境下表在各个节点的数据行数。

3.7 MPP下系统过程与系统视图常见用法

  1. 获取当前用户会话连接的EP节点序号:
SQL> SELECT SF_GET_SELF_EP_SEQNO();

LINEID     SF_GET_SELF_EP_SEQNO()
---------- ----------------------
1          0

used time: 0.627(ms). Execute id is 273095.
  1. 根据ROWID获取本行数据来自哪个EP:
SQL> SELECT SF_GET_EP_SEQNO(ROWID);

LINEID     SF_GET_EP_SEQNO(ROWID)
---------- ----------------------
1          0

used time: 0.717(ms). Execute id is 273097.
  1. 获取EP节点配置信息:
SQL> SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();

LINEID     SERVICE_NAME  INST_NAME EP_SEQNO    STATE
---------- ------------- --------- ----------- -----
1          SERVICE_NAME1 MPP_NODE1 0           OK
2          SERVICE_NAME2 MPP_NODE2 1           OK

used time: 13.440(ms). Execute id is 273099.
  1. 获取当前会话连接的实例名:
SQL> SELECT NAME FROM V$INSTANCE WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();

LINEID     NAME     
---------- ---------
1          MPP_NODE1

used time: 2.687(ms). Execute id is 273101.
  1. 获取MPP系统内所有EP的所有会话(其中一个示例):
SQL> SELECT * FROM V$SESSIONS;

LINEID     SESS_ID              SESS_SEQ    SQL_TEXT                  STATE  N_STMT      N_USED_STMT SEQ_NO      CURR_SCH USER_NAME TRX_ID              
---------- -------------------- ----------- ------------------------- ------ ----------- ----------- ----------- -------- --------- --------------------
           CREATE_TIME                CLNT_TYPE TIME_ZONE CHK_CONS CHK_IDENT RDONLY INS_NULL COMPILE_FLAG AUTO_CMT DDL_AUTOCMT RS_FOR_QRY CHK_NET ISO_LEVEL  
           -------------------------- --------- --------- -------- --------- ------ -------- ------------ -------- ----------- ---------- ------- -----------
           CLNT_HOST    APPNAME CLNT_IP   OSNAME CONN_TYPE   VPOOLADDR            RUN_STATUS MSG_STATUS LAST_RECV_TIME             LAST_SEND_TIME            
           ------------ ------- --------- ------ ----------- -------------------- ---------- ---------- -------------------------- --------------------------
           DCP_FLAG THRD_ID     CONNECTED   PORT_TYPE   SRC_SITE    MAL_ID               CONCURRENT_FLAG CUR_LINENO  CUR_MTDNAME CUR_SQLSTR CLNT_VER 
           -------- ----------- ----------- ----------- ----------- -------------------- --------------- ----------- ----------- ---------- ---------
           SQL_ID      EID                  CLIENT_INFO CLIENT_IDENTIFIER MODULE ACTION HEART_BEAT_INTERVAL HEART_BEAT_TIMEOUT TMP_USED_TYPE
           ----------- -------------------- ----------- ----------------- ------ ------ ------------------- ------------------ -------------
           TMP_USED_EXTENT_NUM
           -------------------
1          140707826318616      676         SELECT * FROM V$SESSIONS; CREATE 64          1           11          SYSDBA   SYSDBA    6762
           2024-09-29 09:58:35.000000 UNKNOWN   +08:00    N        N         N      Y        N            N        Y           N          N       1
                                :0               HOMOGENEOUS 140707826252504      RUNNING    RECEIVE    2024-09-29 11:38:49.522417 2024-09-29 10:20:04.127571
           N        22718       1           3           0           3190391408235        0               117         PROC_HP     NULL       NULL
           -1          -1                                                               0                   0                  NULL
           0
  1. 获取当前连接的实例上的所有会话:
    示例同上。

4 DM MPP主备系统

  MPP主备的目的是为DM MPP集群提供数据可靠性保障,备库只做数据容灾、备份,并不算做MPP集群的一部分,而只是某个节点(主库)的镜像;
  MPP备库不参与MPP操作,与其他MPP备库之间也没有任何关系;备库只能以单节点方式提供只读服务,但不提供全局的MPP只读服务。
  为了提高系统可靠性并节约硬件资源,DM MPP主备可采用交叉守护的方式,即每个EP和其对应的备库实例不在同一台主机上,而是将EP和别的EP的备库放在同一台主机上。
  DM MPP主备系统架构如图4-1所示:
image.png

图4-1 DM MPP主备系统架构

  其部署详情参照《DM8数据守护与读写分离集群V4.0》。

5 DM MPP系统管理

DEM(DM Enterprise Manager)是DM Web版数据库管理工具,提供了图形化部署、监控DM MPP的功能;在DBA完成集群规划后,便可使用集群的部署功能搭建MPP环境、使用DEM的集群功能对MPP集群的运行情况进行监控、DDL克隆和还原等。

5.1 DEM部署

5.1.1 DEM介绍

  DEM达梦企业管理器通过一个Web界面来监控、管理并维护DM数据库的集中式管理平台。DBA可通过任意Web应用登录DEM,从而对DM数据库进行管理和监控;DEM主要有集群部署、自动巡检、监控和告警等功能。其组成部分包括:

  • DEM服务器:指DEM应用服务器,负责处理客户端工具功能逻辑并存储dmagent收集到的数据到DEM存储数据库,同时向客户端展示监控数据;
  • DEM存储数据库:存储DEM元数据和dmagent收集到的监控数据;
  • 数据库实例:需要被管理、监控的数据库实例
  • 数据库代理服务(dmagent):部署在远程机器上的代理;DEM通过dmagent访问远程主机,同时dmagent收集监控信息发送给DEM。

  DEM系统架构图如图5-1所示。
  对DEM工具主要功能的解释如下:

  • 客户端工具:用户能通过DEM进行DM数据库的对象管理、状态监控、SQL查询与调试;
  • 监控与告警:这是DEM的核心功能。通过远程主机部署代理dmagent,能够实现对远程主机状态和远程主机上DM数据库实例状态的监控;DEM监控功能不仅仅局限于单个数据库实例,还能够对数据库集群(MPP、RAC、数据守护等)进行监控和管理。
  • 系统管理:DEM工具提供了工具本身的系统配置与权限管理,方便多用户操作,也可限制非admin用户的权限。
    image.png

图5-1 DEM系统架构

  该工具适用于DM7 / DM8数据库。

5.1.2 部署规划

  在图5-1所示的组件中,DB Instance为DM数据库;代理服务dmagent、存储数据库(后台数据库)和Tomcat都位于与DM数据库同一物理机上;后台数据库是使用DM DBMS新建的一个DB Instance。

5.1.3 配置Tomcat

  获取到DEM WAR包后,首先查看其适配的Java EE版本;由于WAR包的本质是一个ZIP压缩文件,我们使用本地自带的unzip工具将其解压到目录/Users/<USER>/dem-20768-20231103-7.2.0/unzipped_dem;切换到/Users/<USER>/dem-20768-20231103-7.2.0/unzipped_dem/WEB-INF,运行如下命令:

(base) $<User>@Laptop WEB-INF % ls lib | grep jakarta
jakarta.activation-api-2.1.1.jar
jakarta.mail-api-2.1.1.jar

  可以看出,该WAR包使用Jakarta EE实现;要求JDK版本必须为1.8,我们此处选择和官网一致的Tomcat 7.0.75;此处使用数据库自带的JDK即可。在本地,把官网获取Tomcat的tar包发送到CentOS主机的/home/dmdba下:

(base) <User>@Laptop ~ % scp /Users/<User>/Downloads/apache-tomcat-7.0.75.tar dmdba@<ip>:/home/dmdba
dmdba@<ip>'s password: 
apache-tomcat-7.0.75.tar   

  在CentOS中提取tar包,并将其转移到/usr/local下,重命名文件夹为tomcat:

[root@VM-8-6-centos local]# tar -xvf apache-tomcat-7.0.75.tar
[root@VM-8-6-centos local]# mv apache-tomcat-7.0.75 tomcat

  使用数据库自带的JDK配置JAVA环境变量,以供Tomcat引用。使用vim /etc/profile命令增加如下内容:

export JAVA_HOME=/home/dmdba/dmdbms/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

  加入上述内容后,使用source /etc/profile命令使更改立即生效。
  此时,在/usr/local/tomcat/bin下通过如下命令启动Tomcat,检验Tomcat是否正确配置:

[root@VM-8-6-centos bin]# ./startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /home/dmdba/dmdbms/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

  通过浏览器访问CentOS主机的8080端口如图5-2所示,能够访问到Tomcat欢迎页面,即说明Tomcat已成功配置。
image.png

图5-2 Tomcat欢迎页面

  部署成功后执行同目录下脚本shutdown.sh,关闭Tomcat,以备后续部署webapp后重新启动。
  使用crontab命令配置定时任务、与NTP(Network Time Protocol,网络时间协议)服务器每10分钟进行硬件时间同步的步骤略。
  从本地传输dem.war包到CentOS主机的命令如下:

(base) <User>@Laptop ~ % scp /Users/<User>/dem-20768-20231103-7.2.0/dem.war dmdba@<ip>:/home/dmdba
在/usr/local/tomcat/conf下,编辑server.xml;在<Connector port="8080" protocol="HTTP/1.1"... 位置处添加属性字段 maxPostSize="-1",即:
<Connector port="8080" protocol="HTTP/1.1" maxPostSize="-1"
               connectionTimeout="20000"
              redirectPort="8443" />

  编辑/usr/local/tomcat/bin下的catalina.sh,在JAVA_OPTS定义位置的最后添加如下内容:

-server -Xms256m -Xmx1024m -Djava.library.path=/home/dmdba/dmdbms/bin

  这里修改的是JVM的启动参数。其中:

  • -server说明启用服务器模式以优化性能;
  • -Xms256m即初始堆大小Initial Heap Size,设置JVM启动时的最小堆内存为256M,有助于减少JVM频繁扩展堆内存的开销,优化JVM性能;
  • -Xmx1024m即最大堆大小Maximum Heap Size,设置JVM最大堆内存为1024M,确保应用程序的内存使用不会超出此限制,防止过多占用系统内存资源;达到上限后JVM尝试进行垃圾回收,若回收不成功可能报错Out of Memory内存溢出错误;
  • -Djava.library.path指定JVM在运行时查找本地库文件(.so和.ddl文件)的路径,这里指向数据库的bin目录。由于设置该参数的需要,要求Tomcat必须和后台数据库实例在同一机器上。

  上述内容配置完毕后,运行以下命令将位于/home/dmdba目录的dem.war包拷贝到/usr/local/tomcat/webapps下:

[root@VM-8-6-centos webapps]# cp /home/dmdba/dem.war .
&emsp;&emsp;此时启动启动Tomcat,会自动解压war包生成DEM目录。启动Tomcat:
[root@VM-8-6-centos bin]# ./startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /home/dmdba/dmdbms/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

  接下来配置后台数据库连接;编辑文件/usr/local/tomcat/webapps/dem/WEB-INF/db.xml如下;注意端口号是否为5237,修改项包括<Server>、<MaxPoolSize>标签,其他内容如果不需要,保持默认即可:

[root@VM-8-6-centos WEB-INF]# cat db.xml
<?xml version="1.0" encoding="UTF-8"?>
<ConnectPool>
    <Server>你的被监控主机的实际IP,不能使用localhost</Server>
    <Port>5237</Port>
    <User>SYSDBA</User>
    <Password>SYSDBA</Password>
    <InitPoolSize>5</InitPoolSize>
    <CorePoolSize>10</CorePoolSize>
    <MaxPoolSize>50</MaxPoolSize>
    <KeepAliveTime>60</KeepAliveTime>
    <DbDriver></DbDriver>
    <DbTestStatement>select 1</DbTestStatement>
    <SSLDir>../sslDir/client_ssl/SYSDBA</SSLDir>
    <SSLPassword></SSLPassword>
</ConnectPool>

  可选择继续配置DEM日志级别;编辑/usr/local/tomcat/webapps/dem/WEB-INF目录下的log4j.xml,即可进行配置。其中,LOG_LEVEL生产环境下建议保持ERROR级别、调试和查找问题时可以采用DEBUG或ALL参数;
  日志最大大小的计算公式如下,这些参数均可在log4j.xml文件中设置:

日志最大大小= LOG_MAX_SIZE × LOG_MAX_COUNT × LOG_PRESERVE_DURATION;

  完成上述配置后,重启Tomcat以生效。此时进行测试,Tomcat能够正常访问欢迎页面。

5.1.4 配置数据库实例和dmagent

  在/dmdata/data下,使用dbca图形化工具创建一个DM数据库实例作为DEM后台数据库;数据库名和实例名均为DEM_BACKUPSTAGE,端口号5237,字符集UTF-8,大小写不敏感;其它初始化参数不作要求,默认即可:
  创建完成后,同时成功注册系统服务,名称为DmServiceDEM_BACKSTAGE;需要对dm.ini参数配置进行优化,推荐配置如下:

MEMORY_POOL             =  200
BUFFER                  =  1000
KEEP                    =  64
SORT_BUF_SIZE           =  50

  从本地传输初始化脚本dem_init.sql到CentOS主机的命令如下:

(base) <User>@Laptop ~ % scp /Users/<User>/dem-20768-20231103-7.2.0/dem_init.sql dmdba@<ip>:/home/dmdba

  由于该脚本编码格式为UTF-8,故在使用disql执行SQL脚本之前,需要首先设置字符集;注意,我们创建的数据库DEM_BACKSTAGE服务端口为5237,而不是默认的5236:

[root@VM-8-6-centos bin]# ./disql SYSDBA/SYSDBA@localhost:5237

服务器[localhost:5237]:处于普通打开状态
登录使用时间 : 2.087(ms)
disql V8
SQL> set CHAR_CODE UTF8
接着执行dem_init.sql脚本,命令如下:
SQL> start /home/dmdba/dem_init.sql

  脚本执行完毕后,后台数据库中会生成一个DEM的模式,存放DEM运行所需的表和视图,使用manager工具查询模式中的ADMIN_CONFIG表结果如图5-3所示;根据实际的项目需求,还可以考虑设置后台数据库的备份,同时确定备份策略。
image.png

图5-3 查询DEM模式的ADMIN_CONFIG表

  接下来部署dmagent。需要注意的是,数据库自带的dmagent并不总是与DEM自带的dmagent版本相同;为防止出现dmagent与DEM版本不匹配导致无法获取数据库监控信息的问题,在进入DEM后的左侧导航栏倒数第二个选项“资源包”中获取对应的dmagent包,并使用它来配置dmagent。将下载的dmagent包解压到/usr/local/dmagent,其中dmagent目录需要自己使用mkdir命令创建:

[root@VM-8-6-centos dmagent]# unzip /home/dmdba/dmagent-7.2.0.zip
配置agent.ini,主要修改内容是文件头部的两项:
center_url              = http://81.70.96.181:8080/dem
ip_list                 = [81.70.96.181]

  其中,center_url是dem所在服务器的地址;ip_list是dmagent所在服务器的地址;
  与dem相同的是,修改目录/home/dmdba/dmdbms/tool/dmagent下的log4j.xml可以配置dmagent日志级别,修改方法也与dem端相同;这里我们不做改动。
  使用以下命令将dmagent注册为系统服务;注册过程中会确认agent的各项参数,如使用默认,直接回车即可;如需要自定义,输入自定义值后再回车。这里全部使用默认值,连续回车即可:

[root@VM-8-6-centos dmagent]# ./service.sh install
input agent home [/usr/local/dmagent] :
input agent.ini path [/usr/local/dmagent/agent.ini] :
input service user [root] :
installation the service DmAgentService completed.

  上述命令执行完毕后,会在/usr/local/dmagent/service下生成DmAgentService,此时即可以使用服务方式启停dmagent:

[root@VM-8-6-centos service]# ./DmAgentService start
Starting dmagentStarting dmagent.....
dmagent(pid: 3254) started successfully.
 SUCCESS! 

  启动dmagent后,即可在DEM中监控数据库资源。
  至此,DEM的部署结束。在开始检验DEM部署效果之前,罗列出可能造成部署失败的几个检查点

  • DEM Tomcat部署完成后是否采用Chrome而不是Safari登录?采用Safari可能会出现js文件不兼容的报错;
  • 是否采用了从部署好的DEM Tomcat中获取的dmagent包?如果使用的是数据库自带的dmagent包,可能因与DEM的版本不匹配而无法获取到监控信息;
  • 后台数据库服务是否开启;
  • 被监控的目标数据库服务是否开启;
  • 需要使用数字的IPv4地址;如使用localhost会导致jdbc网络通信错误,无法读取监控数据;
  • 若系统服务DmAgentService时是使用带localhost参数值的agent.ini注册的,则修改为IPv4地址后需要采用start.sh -d agent.ini命令启动,使用的是修改后的agent.ini配置文件;
  • 开放防火墙端口,供客户端访问;如果是云服务器,导入新的防火墙规则以放开端口;

5.1.5 检验DEM部署效果

  如图5-4所示为DEM登录页面;默认用户名/密码为admin/888888。
image.png

图5-4 DEM登录页面

  登录后,进入主页面。图5-5显示的是主机监控的负载分析部分:
image.png

图5-5 主机监控 – 负载分析

  图5-6显示的是主机监控的实时监控部分:
image.png

图5-6 主机监控 – 实时监控

  图5-7显示的是数据库监控(单例,DmServiceDEMTEST,5239)的负载分析部分:
image.png

图5-7 数据库监控 – 负载分析

  图5-8显示的是数据库监控的实时监控部分:
image.png

图5-8 数据库监控 – 实时监控

  图5-9显示主机监控中的磁盘分析:
image.png

图5-9 主机监控 – 磁盘分析

  图5-10显示数据库监控中的日志文件、表空间信息的饼状图、柱状图统计:
image.png

图5-10 数据库监控 – 日志和表空间文件的饼状图和柱状图统计

  点击左侧导航栏最后一个元素可进行系统管理,二级菜单系统配置中可以添加邮件/短信告警等功能,如图5-11:
image.png

图5-11 系统管理 – 系统配置

  采集数据管理操作如图5-12所示:
image.png

图5-12 采集数据管理

5.2 使用DEM部署DM MPP

  DEM部署DM MPP可在左侧导航栏中选择“集群部署”,按照DEM的对话框提示进行操作即可;由于字数所限,详细步骤略。

5.3 使用DEM监控DM MPP运行

  MPP的DEM监控类似于数据库单例和其他集群的监控方式,通过“资源监控 – 数据库监控 – 添加 – 集群”进行,如图5-13所示;后续按照引导操作即可。
image.png

图5-13 DEM监控MPP – 添加集群

5.4 MPP 环境的 DDL 克隆与还原

  DDL 克隆可以把系统中的对象定义信息进行备份,之后再还原到别的数据库节点。利用这个功能,可以将一个 MPP 系统的对象定义信息克隆并还原到另一个 MPP 系统中,且两个 MPP 系统的节点数不必一致。
  需要注意的是,由于 MPP 环境下执行 DDL 克隆时会将 dmmpp.ctl 也一并备份还原,若还原的 MPP 环境与备份环境不一致时,会导致还原后的 MPP 系统不能正确启动;
  因此,在执行完还原操作后,需要使用使用 dmctlcvt 工具,将当前环境的 dmmpp.ini 转换为 dmmpp.ctl,替换还原生成的 dmmpp.ctl,MPP集群即可正常启动。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服