MPP(Massively Parallel Processing,大规模并行处理)是一种并行计算架构,旨在通过将计算任务分配到多个独立的处理单元或节点上来实现高效的并行处理。每个节点通常包含自己的处理器、内存、操作系统和存储资源,节点之间通过高速网络进行通信。MPP 架构能够处理大规模数据集,广泛应用于高性能计算、数据仓库、分布式数据库等领域。
市面上常见的系统架构见1.1-1.4小节。
SMP是其典型实现,局限于单节点服务器,性能提升有限,扩展能力收到限制。在SMP中所有处理器共享内存和 I/O 资源。处理器之间没有明确的分工,所有任务由OS进行调度,通常适合中小规模的并行计算任务。
完全共享架构示意图见图1-1:
图1-1 完全共享架构
与其他架构相区别的显著特征是带有多个Database实例,所有实例与共享存储相连;这可以实现多实例并行,但仍需要建设唯一的数据管道总线将I/O信息集合、过滤到共享存储,对数据管道的传输带宽和共享存储磁盘的性能均提出了较高要求,需要特质画的存储设备,实施成本较高。
共享存储架构示意图见图1-2:
图1-2 共享存储架构
相比于前两种,基于硬件的数据仓库平台一般采用完全无共享体系;该体系的主要特征在于加入了一个主控节点、每个节点都有通向本地磁盘的独立通道,在简化了控制和通信体系的同时保存良好的拓展性。
在完全无共享架构中,主控节点(Master Node)是分布式系统中常见的角色分配方式之一,负责全局管理和任务调度。它是系统的核心,处理用户的请求,并将这些请求分解为多个小任务,分配给不同的工作节点去执行。主控节点还负责管理系统的全局元数据,如数据分片和数据分布信息,并监控各节点的状态。主控节点的存在简化了集群管理,但是由于它需要集中处理任务调度和查询优化等关键任务;
随着系统规模的扩大,主控节点可能成为性能瓶颈,进而影响整体系统的扩展性。此外,主控节点一旦发生故障,整个系统将无法提供服务,这使得它成为潜在的单点故障。因此,主控节点需要设计有冗余机制以确保系统的高可用性。
另一种常见的角色分配方式是主从节点(Master-Slave Nodes)。相比之下,主从节点架构中的 主节点 和 从节点 承担着不同的职责。主节点负责处理所有的写操作和事务管理,它是系统中的数据控制中心,处理数据更新和变更操作。而从节点则是主节点的只读副本,主要处理读取请求,并从主节点同步最新的数据。主从架构的优势在于通过读写分离来提升性能,从节点能够分担主节点的读取压力,提供更高的系统吞吐量。同时,从节点在主节点发生故障时,可以被提升为主节点,从而提高系统的容错性。这样的架构非常适合读写操作需求差异较大的系统,能够有效提升读取性能,并确保系统在主节点故障时仍能继续提供服务。
对于这两种设计惯例的比较,各有其适用场景。主控节点架构适用于需要集中调度和管理的场景,而主从节点架构则更适合需要读写分离、负载均衡和高可用性的场景。主控节点是分布式系统的“大脑”,管理任务的分配和全局元数据,而主从架构则通过主从复制和角色切换,提升系统性能并增强容错能力。
完全无共享架构示意图见图1-3:
图1-3 完全无共享架构
DM MPP采用的是完全对等无共享架构,在汲取完全无共享架构优点的基础上,摒弃了采用主控制节点来协调所有并行处理的主从式方法,转而令各个节点权责对等;该设计简化了体系实现,也避免了主节点瓶颈问题。
图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的上述优势更加明显。
DM MPP 系统中每一个运行的 DM 数据库服务器实例称为一个执行节点 EP,基于数据守护的 MPP 环境内的备库除外;
由于完全对等无共享架构,从整个系统的视角来看,每个EP的地位是相同的;但从用户视角出发,用户会话连接的EP为用户会话的主EP,此时系统中其他EP对于用户会话均为从EP;
DM MPP系统中的数据分布在各EP中,其分布类型包括哈希分布、随机分布、复制分布、范围分布、LIST分布等;
按照表定义中指定的一列或多列,对行数据计算hash值;根据该hash值和hash映射表,将该行数据分布到映射的节点;此类情况下尽量在表的连接查询中使用hash分布列作为连接键,查询计划会自动优化,通过索引、减少计划中通讯操作符等方式,减少数据在节点间的分发,提高查询效率;
随机分布表不存在分布列,插入表数据时会按照一定的随机算法,将数据随机均衡到各个节点;相比于hash分布,随机分布的数据和节点间不存在映射关系,遂在节点数量改变、没有节点数据均衡要求时,可以不用对节点现有的顺序进行变动;随机分布在复杂查询以及存在较多的节点间数据分发情况没有hash分布性能更高;
在每个节点上的本地数据都是一份完整的拷贝,查询该表数据在任意节点上都可以完成;一般用于数据量不大的表。
按照表定义中指定的一个或多个列的列值范围分布项,决定将一行数据分布到哪个EP上;
与范围分布概念类似,不同之处在于适用于表中列值可列举的情况;通过指定表中的一个或多个列的离散集,来确定将一行数据哪个相应EP上。
DM MPP同时支持数据分布与分区表,实现了“数据分布后再分区”。在数据分布到各节点的基础上,再在单个节点上将数据再次分区,可进一步提高查询性能。分布的类型和分区的类型可以混合搭配,比如建立哈希分布表的范围水平分区表。
DM的各接口驱动程序都提供了“连接属性”用于设置全局连接(登录)和本地连接(登录),缺省为全局连接;DIsql使用登录参数MPP_TYPE来指定全局或本地连接,值分别为GLOBAL和LOCAL。
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配合使用。 |
DM计划树执行时,数据总是自底向上流动的。考虑到在MPP环境中,每个EP只保留表的部分数据(除复制分布方式),故计划树叶节点的数据都不是完整的,向上传递的仅是该EP的本地数据;
要想获得完整的正确执行结果,上层节点必须检验下层节点向上传输的数据的完整性,从而决定是否要添加MPP通信操作符,并根据单节点操作符的功能和数据分布情况决定添加何种MPP通信操作符。
方案制定过程中需要考虑的几方面因素如下:
本节中手动搭建一个两节点的DM MPP。
每个节点具备两个网卡,分别连接到业务网络和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
分别在节点MPP_Node1和MPP_Node2上修改dm.ini的部分参数如下:
MAL_INI = 1
MPP_INI = 1
为两个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
由于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文件拷贝到另一个节点的指定位置也是可以的。
经过前述的几个步骤后,DM MPP已经配置完成。分别启动MPP_Node1和MPP_Node2的DM数据库实例,DM MPP即可正常运行;用户可登录任一EP进行数据库操作:
MPP数据分布类型和具体设置在建表时指定。示例如下:
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.
SQL> CREATE TABLE T_RANDOM(C1 INT, C2 CHAR(10)) DISTRIBUTED RANDOMLY;
executed successfully
used time: 9.109(ms). Execute id is 902.
SQL> CREATE TABLE T_FULLY(C1 INT, C2 CHAR(10)) DISTRIBUTED FULLY;
executed successfully
used time: 9.998(ms). Execute id is 903.
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.
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.
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.
在创建分区表时,需要注意下述使用限制:
DM MPP适用于海量数据的存储和处理,其中dmfldr快速装载工具能够对单机 / DM MPP系统进行海量数据的快速装载;
dmfldr支持MPP环境下的两种数据加载模式:客户端分发模式和本地分发模式,通过参数MPP_CLIENT进行设置;使用客户端分发模式时,数据在dmfldr客户端进行分发然后直接向指定EP发送数据;使用本地分发模式时,每个EP对应一个dmfldr和一份数据,每个dmfldr只选择出对应本节点的数据并发送,不管其他节点的数据;
默认情况下使用客户端分发模式。
停止MPP系统只需关闭每个EP的数据库实例即可,对于其关闭顺序没有特定顺序要求。
DM MPP运行过程中,任一EP停机都会导致整个MPP系统服务不可用;当前所有的用户会话会被自动断开,禁用全局登录,只能本地登录。因此,为了保证MPP系统的高可用,建议使用DM MPP与DM Data Watch相结合的部署方案。
SQL> SELECT SF_GET_SELF_EP_SEQNO();
LINEID SF_GET_SELF_EP_SEQNO()
---------- ----------------------
1 0
used time: 0.627(ms). Execute id is 273095.
SQL> SELECT SF_GET_EP_SEQNO(ROWID);
LINEID SF_GET_EP_SEQNO(ROWID)
---------- ----------------------
1 0
used time: 0.717(ms). Execute id is 273097.
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.
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.
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
MPP主备的目的是为DM MPP集群提供数据可靠性保障,备库只做数据容灾、备份,并不算做MPP集群的一部分,而只是某个节点(主库)的镜像;
MPP备库不参与MPP操作,与其他MPP备库之间也没有任何关系;备库只能以单节点方式提供只读服务,但不提供全局的MPP只读服务。
为了提高系统可靠性并节约硬件资源,DM MPP主备可采用交叉守护的方式,即每个EP和其对应的备库实例不在同一台主机上,而是将EP和别的EP的备库放在同一台主机上。
DM MPP主备系统架构如图4-1所示:
图4-1 DM MPP主备系统架构
其部署详情参照《DM8数据守护与读写分离集群V4.0》。
DEM(DM Enterprise Manager)是DM Web版数据库管理工具,提供了图形化部署、监控DM MPP的功能;在DBA完成集群规划后,便可使用集群的部署功能搭建MPP环境、使用DEM的集群功能对MPP集群的运行情况进行监控、DDL克隆和还原等。
DEM达梦企业管理器通过一个Web界面来监控、管理并维护DM数据库的集中式管理平台。DBA可通过任意Web应用登录DEM,从而对DM数据库进行管理和监控;DEM主要有集群部署、自动巡检、监控和告警等功能。其组成部分包括:
DEM系统架构图如图5-1所示。
对DEM工具主要功能的解释如下:
图5-1 DEM系统架构
该工具适用于DM7 / DM8数据库。
在图5-1所示的组件中,DB Instance为DM数据库;代理服务dmagent、存储数据库(后台数据库)和Tomcat都位于与DM数据库同一物理机上;后台数据库是使用DM DBMS新建的一个DB Instance。
获取到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已成功配置。
图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的启动参数。其中:
上述内容配置完毕后,运行以下命令将位于/home/dmdba目录的dem.war包拷贝到/usr/local/tomcat/webapps下:
[root@VM-8-6-centos webapps]# cp /home/dmdba/dem.war .
  此时启动启动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能够正常访问欢迎页面。
在/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所示;根据实际的项目需求,还可以考虑设置后台数据库的备份,同时确定备份策略。
图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部署效果之前,罗列出可能造成部署失败的几个检查点:
如图5-4所示为DEM登录页面;默认用户名/密码为admin/888888。
图5-4 DEM登录页面
登录后,进入主页面。图5-5显示的是主机监控的负载分析部分:
图5-5 主机监控 – 负载分析
图5-6显示的是主机监控的实时监控部分:
图5-6 主机监控 – 实时监控
图5-7显示的是数据库监控(单例,DmServiceDEMTEST,5239)的负载分析部分:
图5-7 数据库监控 – 负载分析
图5-8显示的是数据库监控的实时监控部分:
图5-8 数据库监控 – 实时监控
图5-9显示主机监控中的磁盘分析:
图5-9 主机监控 – 磁盘分析
图5-10显示数据库监控中的日志文件、表空间信息的饼状图、柱状图统计:
图5-10 数据库监控 – 日志和表空间文件的饼状图和柱状图统计
点击左侧导航栏最后一个元素可进行系统管理,二级菜单系统配置中可以添加邮件/短信告警等功能,如图5-11:
图5-11 系统管理 – 系统配置
采集数据管理操作如图5-12所示:
图5-12 采集数据管理
DEM部署DM MPP可在左侧导航栏中选择“集群部署”,按照DEM的对话框提示进行操作即可;由于字数所限,详细步骤略。
MPP的DEM监控类似于数据库单例和其他集群的监控方式,通过“资源监控 – 数据库监控 – 添加 – 集群”进行,如图5-13所示;后续按照引导操作即可。
图5-13 DEM监控MPP – 添加集群
DDL 克隆可以把系统中的对象定义信息进行备份,之后再还原到别的数据库节点。利用这个功能,可以将一个 MPP 系统的对象定义信息克隆并还原到另一个 MPP 系统中,且两个 MPP 系统的节点数不必一致。
需要注意的是,由于 MPP 环境下执行 DDL 克隆时会将 dmmpp.ctl 也一并备份还原,若还原的 MPP 环境与备份环境不一致时,会导致还原后的 MPP 系统不能正确启动;
因此,在执行完还原操作后,需要使用使用 dmctlcvt 工具,将当前环境的 dmmpp.ini 转换为 dmmpp.ctl,替换还原生成的 dmmpp.ctl,MPP集群即可正常启动。
文章
阅读量
获赞