DM8达梦分布式计算数据库集群DPC安装部署学习记录

DM8达梦数据库集群DPC安装部署

文章目录

大家想学习达梦数据库或者解决报错问题,可以去 达梦数据库社区https://eco.dameng.com

一、概述

DMDPC 是基于达梦数据库管理系统研发的一款同时支持在线分析处理和在线事务处理的新型分布式数据库系统。提供了分布式计算集群拥有的高可用、高扩展、高性能、高吞吐量和对用户透明等高级特性。

DPC 集群可通过 DEM 与命令行的方式搭建。

1.1 DMDPC 架构

一个完整的 DMDPC 架构由计划生成节点 SP(SQL Processor,SQL处理器)、数据存储节点 BP (Backend Processor,后端处理器)和元数据服务器节点 MP(Metadata Processor) 三部分组成。

  • SP 对外提供分布式数据库服务,负责接生成计划、划分子计划、按照一定规则计算并行度并调度各个子计划,并最终将执行结果返回给用户。用户可以登录到任意一个 SP 节点,获得完整的数据库服务,SP 节点自身无状态,每个 SP 节点上不存储任何数据字典信息和用户数据

  • BP 负责存储数据,执行 SP 的调度指令并将执行结果返回给 SP;

  • MP 负责存储元数据并向 SP、BP 提供元数据服务,所有 DDL 请求都会经过 SP 转发给 MP 执行,元数据信息全部存储在 MP。一个 DMDPC 集群只能配置一个 MP 节点提供服务。

SP 节点不存储数据,配置成单副本即可。MP 和 BP 节点既可以配置成单副本,也可以配置成多副本系统。其中每一个多副本系统中只有一个作为主节点,其余节点均作为备份节点。

DM 多副本系统由 N 个节点实例组成,N 必须是大于 1 的奇数。只有配置了 RAFT 归档的实例才能加入多副本系统。

多副本实例之间通过 XMAL 模块进行 TCP 消息通讯。各个节点实例之间基于RAFT协议选举出一个领导者作为主库,其他实例作为备库(也就是副本)角色运行,与传统的数据守护集群架构相比,此方案不再依赖守护进程和监视器。主库会自动向备库同步日志,备库接收并重新应用日志,从而达到主备库之间数据保持一致的目的。

在 BP 多副本系统中,可通过V$ARCH_STATUSV$RLOG_RAFT_INFO 来查看整个系统中主备环境的运行状况。

在 MP 多副本系统中,可通过 V$ARCH_STATUSV$RLOG_RAFT_INFO 来查看整个系统中主备环境的运行状况。

RAFT 组:

拥有相同数据的一个或多个节点共同构成一个 RAFT 组。RAFT 组中的节点个数为奇数。多副本系统基于 RAFT 算法,管理组内的节点,并始终维护一个主节点,保持 RAFT 组内的数据一致性。

BP 域:

一个实例或一组实例所在的位置。

表空间组

表空间组是一组位于相同 RAFT 或者不同 RAFT 上的表空间集合,用于用户建表或者指定用户默认的存储位置。

在 DMDPC 中,MP 包含 SYSTEM、MAIN、ROLL、RLOG 和 TEMP 表空间;SP 包含 TEMP 表空间;BP 包含 SYSTEM、ROLL、RLOG、TEMP 和用户表空间。

主要技术指标

  1. 最大的 RAFT 组数(包括 MP/SP/BP)为 1024;
  2. 最大的实例数(包括 MP/SP/BP)为 4096;
  3. 最大副本数为 9;

1.2 DML操作流程

DML 流程分为两种情况:一般流程和优化流程。优化流程是指在实际执行时,优化器会综合多种条件,对符合优化的细节进行优化之后形成的流程。EXPLAIN 查看执行计划时,包含 mpp_opt_flag(1)的即为优化流程下的执行计划,包含 mpp_opt_flag(0)的即为一般流程下的执行计划。

数据查询操作

  1. 客户端发送请求给 SP;
  2. SP 生成执行计划,同时 SP 向 MP 申请获取字典信息;
  3. MP 返回字典信息给 SP;
  4. 相关 BP 在子计划执行完成时将成功与否信息和/或请求调度信息返回 SP;
  5. SP 向客户端返回最终查询结果。

数据插入操作

SP 端的插入操作符计算出待插入数据所属的 BP 站点;

然后以站点为单位逐一发送插入操作符和待插入数据给 BP。

BP 端负责插入。

数据更新操作

一般流程:SP 上查询得到了待更新的记录,计算每条记录所属的 BP 站点,而后以站点为单位发送更新前后的记录

优化流程:查询得到的待更新记录按照更新对象的分布方式进行分发,各个 BP 站点直接进行更新,节省一次 SP 中转。可优化的情况下,支持并发更新数据行时冲突自动重试,一般流程不支持,直接报错处理。

删除更新操作

一般流程:SP 上计算待删除记录的所属 BP 站点,以站点为单位发送待删除记录。

1.3 高性能

查询的执行计划被拆分为一系列子任务,这些子计划被分散到多个 BP,有效利用硬件资源;

通过将业务的不同表、或者同一表的不同分区拆分到多个 BP,甚至于多个主机,在面对高并发的 OLTP 型应用,集群可以极大地提升 IO 能力,分摊并发压力。

在多副本系统中,主库同步日志时不需要等待备库刷盘或重演完成,备库也以异步消息通知主库自己的日志刷盘进度,消除了主备库之间的消息同步等待时间。

1.4 分布式事务一致性

DMDPC 通过两阶段提交技术来保证多个 BP 之间的分布式事务一致性。

SP 作为全局事务的协调者,统一处理全局事务。BP 作为参与者,是被 SP 调度并执行事务的节点。SP 根据 BP 的响应来决定是否真正的执行并提交事务。

所有参与者 BP 要么一起提交要么一起回滚,始终保持事务一致性状态。

  • 第一阶段 预提交: SP 向所有参与者 BP 广播预提交命令,BP 接收到预提交命令之后,将相关操作生成回滚日志写入回滚段并响应 SP

  • 第二阶段 提交:SP 向所有参与者 BP 广播 COMMIT 命令,SP 收到所有参与者 BP 的 COMMIT 成功消息之后,直接响应客户端事务提交成功。二阶段提交时若遇到 BP 与 SP 通信中断,SP 会将提交任务交由异步任务进行处理并立即响应客户端事务提交成功。待故障 BP 与 SP 重新建立连接后,异步任务会自动重新执行二阶段提交,直到提交成功。客户端收到事务提交成功的消息,表示事务执行成功完成。

1.5 分布式事务的数据可见性

分布式集群中,事务常跨多个 BP 节点,各节点提交时序不一致,会破坏事务隔离性。为此达梦引入全局时钟 GTS,供 BP 节点判定数据可见性,保障集群事务隔离。

全局时钟由MP 节点统一管控,BP 节点执行事务语句、预提交及正式提交时,均向 MP 申请全局时钟值。

CA

CA 是BP 节点全局事务信息数组。BP 事务做预提交、提交时,向 MP 申请全局时钟值,同时在 CA 登记事务 TID、事务状态、全局时钟值。事务状态分预提交、提交,对应一阶段、二阶段提交;TID 全局唯一固定,事务状态流转时,CA 同步更新状态与时钟值。

MCA

MCA 是MP 节点维护的事务信息数组。事务提交向 MP 申请全局时钟时,MP 将事务TID、提交时钟值登记到 MCA,MCA 仅记录已完成提交的事务

事务信息登记流程

  • 事务修改数据,日志记录改该数据的事务号 TID;
  • 事务一阶段预提交:CA 登记 TID、预提交状态及预提交时钟;
  • 事务二阶段提交:MCA 登记 TID 与提交时钟,同时 CA 更新为提交状态及对应时钟。

数据可见性判断

  • 只要是当前事务操作时钟值 cur_seq 之前的已提交事务修改的数据,对当前事务都是可见的。
  • 在 CA 中判断:如果 ca_seq≤cur_seq,且 ca_flag 为"提交",说明生成该数据的事务在 cur_seq 之前就已提交,则该数据对当前事务可见。
  • 如果 ca_seq≤cur_seq,但 ca_flag 为"预提交",说明生成该数据的事务在 cur_seq 之前已经成功预提交。那么需要结合 MCA 来进一步判断该事务是否已提交,进入下一步 MCA 中继续判断。如果 MCA 中找到了对应的 TID 和时钟值 mca_seq,且 mca_seg≤cur_seq,则该数据对当前事务可见。
  • 其他情况均为不可见。

1.6 限制

集群中 SP、BP、MP 都有自己的实例名,这些实例名要求全局唯一,每个组件都是一个实例;

非分区表只落在一个 BP 上,分区表可以落在一个或多个 BP 上DMDPC 下,分区列同时也是分布列;

不支持空间索引、位图索引、位图连接索引、全局函数索引;

不支持表级备份;

不支持表空间级备份还原。

DMDPC 集群仅支持联机库级备份与联机归档备份。

二、集群架构

DMDPC 集群规划部署 6 个 SP,4 个 BP 和 1 个 MP。其中,每个 MP 和 BP 节点均带两个副本。集群架构图如下所示:

MP 及其两个副本分别部署在物理 1 至 3 上;SP1 与 SP4 部署在物理机 1 上,SP2 与 SP5 部署在物理机 2 上,SP3 与 SP6 部署在物理机 3 上;BP 节点及其副本交叉部署在物理机 4-7 上,如 BP1_A 部署于物理机 4,BP1_A 的两个副本 BP1_B 与 BP1_C 分别部署在物理机 5 与物理机 6,剩余 BP 节点以此类推。

三、安装前系统调整

操作系统时间不正确会导致产生以下问题:

  1. 试用授权产品,会导致试用授权过期,无法使用;
  2. 集群自动切换场景,可能会导致集群检测节点服务异常,引发误切换;
  3. 数据库运行日志、数据库服务日志、归档日志、备份集等时间记录错误,会导致相关分析和排查工作难度增大。

可以使用命令直接修改,建议配置时钟同步

bash 复制代码
##手动修改时间方法
date -s "yyyy-mm-dd HH:MM:SS"
##修改后需要复核,执行date -s查看。

创建用户和组

bash 复制代码
##创建安装用户组dinstall
groupadd -g 12349 dinstall
##在dinstall组内创建安装用户dmdba
useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
##修改密码
passwd dmdba

修改系统资源限制

bash 复制代码
vi /etc/security/limits.conf
##增加下述内容
dmdba  soft      nice       0
dmdba  hard      nice       0
dmdba  soft      as         unlimited
dmdba  hard      as         unlimited
dmdba  soft      fsize      unlimited
dmdba  hard      fsize      unlimited
dmdba  soft      nproc      131072
dmdba  hard      nproc      131072
dmdba  soft      nofile     131072
dmdba  hard      nofile     131072
dmdba  soft      core       unlimited
dmdba  hard      core       unlimited
dmdba  soft      data       unlimited
dmdba  hard      data       unlimited
dmdba  soft      memlock    unlimited
dmdba  hard      memlock    unlimited

四、使用企业管理器的方式安装部署

使用命令行的方式按照部署步骤可以参考DM8数据库安装完后的doc手册

4.1 企业管理器DEM安装

达梦企业管理器(DM Enterprise Manager,简称为 DEM )提供一个通过 Web 界面来监控、管理并维护 DM 数据库的集中式管理平台。

数据库管理员可通过任意 Web 应用登录 DEM,从而对 DM 数据库进行管理和监控。

DEM 主要有集群部署、自动巡检、监控和告警等功能。

DEM 由以下几个部分组成:

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

软件环境

DEM 监控工具可通过拨打达梦咨询热线 400 991 6599 申请获取。

(1)DEM WAR 包:申请获取;

(2)Tomcat:自备,要求与部署的系统环境相匹配;

(3)JAVA 1.8:DEM 和 dmagent 所在机器需要配置 JAVA 环境,JAVA 版本必须为 JAVA 1.8

bash 复制代码
[dmdba@localhost ~]$ sh login.sh

服务器[127.0.0.1:5236]:处于普通打开状态
登录使用时间 : 2.245(ms)
disql V8

STATUS$
-------
OPEN

服务器[127.0.0.1:5236]:处于普通打开状态
登录使用时间 : 2.205(ms)
disql V8
SQL> start /home/dmdba/dem/dem_init.sql
SQL> /*======================================================================
  File:         dem_init.sql

配置tomcat

因为 DEM 服务器处理的是浏览器的请求,所以在安装 DEM 服务器之前,需要配置一个

WEB 应用服务器 tomcat。WEB 应用服务器专门处理 DEM 服务器和客户端(浏览器)之间的交互。

bash 复制代码
# 确保有java8环境
[root@localhost conf]# java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment Bisheng (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM Bisheng (build 25.312-b07, mixed mode)

#在 conf/server.xml 中<Connector port="8080" protocol="HTTP/1.1"... 追加属
性字段 maxPostSize="-1"

cd /opt/soft/tomcat/apache-tomcat-8.5.84/bin
vim server.xml

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               maxPostSize="-1"
               redirectPort="8443" />

修改jvm启动参数

JAVA_OPTS="-server -Xms256m -Xmx1024m"

bash 复制代码
修改/tomcat/bin/catalina.sh 脚本:
cd /home/apache-tomcat-8.5.84/bin
vi catalina.sh
# Add the JAVA 9 specific start-up parameters required by Tomcat
JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.lang=ALL-UNNAMED"
JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.io=ALL-UNNAMED"
JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.util=ALL-UNNAMED"
JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.util.concurrent=ALL-UNNAMED"
JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED"
export JDK_JAVA_OPTIONS
JAVA_OPTS="-server -Xms256m -Xmx1024m"

启动tomcat配置DEM项目

配置war包的配置文件

bash 复制代码
[root@localhost dem]# pwd
/home/dmdba/dem
[root@localhost dem]# cp dem.war /opt/soft/tomcat/apache-tomcat-8.5.84/webapps/
[root@localhost dem]#

# 解压缩 dem.war 包,获取 db.xml。解压 dem.war 方式有两种:一启动 tomcat,自动解压缩 war 包。二不启动 tomcat,用户手动解压 dem.war 包。
# 启动tomcat
[root@localhost bin]# /opt/soft/tomcat/apache-tomcat-8.5.84/bin/startup.sh
Using CATALINA_BASE:   /opt/soft/tomcat/apache-tomcat-8.5.84
Using CATALINA_HOME:   /opt/soft/tomcat/apache-tomcat-8.5.84
Using CATALINA_TMPDIR: /opt/soft/tomcat/apache-tomcat-8.5.84/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /opt/soft/tomcat/apache-tomcat-8.5.84/bin/bootstrap.jar:/opt/soft/tomcat/apache-tomcat-8.5.84/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.

[root@localhost bin]# ps -ef | grep tomcat
root        5430       1 99 10:22 pts/0    00:00:18 /usr/bin/java -Djava.util.logging.config.file=/opt/soft/tomcat/apache-tomcat-8.5.84/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms256m -Xmx1024m -Dignore.endorsed.dirs= -classpath /opt/soft/tomcat/apache-tomcat-8.5.84/bin/bootstrap.jar:/opt/soft/tomcat/apache-tomcat-8.5.84/bin/tomcat-juli.jar -Dcatalina.base=/opt/soft/tomcat/apache-tomcat-8.5.84 -Dcatalina.home=/opt/soft/tomcat/apache-tomcat-8.5.84 -Djava.io.tmpdir=/opt/soft/tomcat/apache-tomcat-8.5.84/temp org.apache.catalina.startup.Bootstrap start

修改 DEM 服务器配置文件 db.xml

DEM 服务器通过 db.xml 文件来读取 DEM 存储数据库。db.xml 中登记了 DEM 存储数

据库的连接信息:ip、port、用户名、密码、连接池大小以及 SSL 登录信息等。

bash 复制代码
[root@localhost WEB-INF]# pwd
/opt/soft/tomcat/apache-tomcat-8.5.84/webapps/dem/WEB-INF
[root@localhost WEB-INF]# vim db.xml

重启动 tomcat。

登录DEM

DEM 默认用户名和密码为 admin/888888。

bash 复制代码
ALTER USER SYSDBA IDENTIFIED BY "Damen_123";

http://192.168.157.140:8080/dem/

部署 dmagent

获取 dmagent。dmagent 有两种获取方式:

(1)达梦数据库安装目录的 tool 下存有 dmagent。

(2)登录部署好的 DEM,在资源包中下载 dmagent 压缩包。

拷贝 dmagent 到要部署的机器上。

修改 dmagent 配置。配置 dmagent 目录下的 agent.ini:

bash 复制代码
##dem 所在机器的地址
center_url  =  http://192.168.157.140:8080/dem
##dmagent所在服务器的地址 
ip_list     = [192.168.157.141]   

启动dmagent

bash 复制代码
# 手动生成key,可以使用默认的值,否则需要修改配置端的数
[root@localhost dmagent]# sh start.sh UNINSTALL_SERVICE_KEY 999999
tip: if using the deployment feature, it is recommended to start dmagent with th                                                                              e '-d' parameter.
Agent-V7.9.1.47235-2026.02.12-DEV
Key file: "/opt/soft/dmagent/service.key" generated.

[root@localhost dmagent]# sh start.sh -d agent.ini
Starting dmagent.....
dmagent(pid: 41957) started successfully.

4.2 使用企业管理器安装集群

安装DPC、1SP、1MP、2BP总共四个实例的分布式数据库集群

bash 复制代码
mkdir -p /opt/dmdpc/instance/
cd /opt/dmdpc/instance

mkdir sp
mkdir mp
mkdir bp1
mkdir bp2

配置两个分片的分布式集群

操作系统中

bash 复制代码
[dmdba@localhost ~]$ ps -ef | grep dmdpc
dmdba       4994       1  0 15:01 pts/0    00:00:00 /data/dmdpc/instance/dmdpc/dmap/bin/dmap dmap_ini=/data/dmdpc/instance/dmdpc/dmap/dmap.ini
dmdba       5113       1  5 15:01 pts/0    00:00:10 /data/dmdpc/instance/dmdpc/MP_A/bin/dmserver path=/data/dmdpc/instance/dmdpc/MP_A/DAMENG/dm.ini dpc_mode=MP -noconsole
dmdba       5571       1  2 15:01 pts/0    00:00:05 /data/dmdpc/instance/dmdpc/BP1_A/bin/dmserver path=/data/dmdpc/instance/dmdpc/BP1_A/DAMENG/dm.ini dpc_mode=BS -noconsole
dmdba       5592       1  2 15:01 pts/0    00:00:05 /data/dmdpc/instance/dmdpc/BP1_B/bin/dmserver path=/data/dmdpc/instance/dmdpc/BP1_B/DAMENG/dm.ini dpc_mode=BS -noconsole
dmdba       6253       1  1 15:02 pts/0    00:00:02 /data/dmdpc/instance/dmdpc/SP1/bin/dmserver path=/data/dmdpc/instance/dmdpc/SP1/DAMENG/dm.ini dpc_mode=SP -noconsole
dmdba       7759    7533  0 15:04 pts/0    00:00:00 grep dmdpc

[dmdba@localhost ~]$ netstat -ntpl | grep dmserver
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 192.168.157.141:9000    0.0.0.0:*               LISTEN      5113/dmserver
tcp6       0      0 :::5236                 :::*                    LISTEN      6253/dmserver
tcp6       0      0 :::1620                 :::*                    LISTEN      5113/dmserver
tcp6       0      0 :::5240                 :::*                    LISTEN      5571/dmserver
tcp6       0      0 :::5241                 :::*                    LISTEN      5592/dmserver
tcp6       0      0 :::1630                 :::*                    LISTEN      6253/dmserver
tcp6       0      0 :::5220                 :::*                    LISTEN      5113/dmserver
tcp6       0      0 :::1640                 :::*                    LISTEN      5571/dmserver
tcp6       0      0 :::1641                 :::*                    LISTEN      5592/dmserver

查看集群实例信息

sql 复制代码
SQL> select RAFT_ID,NAME,INST_PORT,IP_INTERNAL from DPC_INSTANCE;

行号       RAFT_ID     NAME  INST_PORT   IP_INTERNAL
---------- ----------- ----- ----------- ---------------
1          0           MP_A  5220        192.168.157.141
2          1           BP1_A 5240        192.168.157.141
3          2           BP1_B 5241        192.168.157.141
4          3           SP1   5236        192.168.157.141

查看集群实例信息

sql 复制代码
SQL> select RAFT_ID,NAME,INST_PORT,IP_INTERNAL from DPC_INSTANCE;

行号       RAFT_ID     NAME  INST_PORT   IP_INTERNAL
---------- ----------- ----- ----------- ---------------
1          0           MP_A  5220        192.168.157.141
2          1           BP1_A 5240        192.168.157.141
3          2           BP1_B 5241        192.168.157.141
4          3           SP1   5236        192.168.157.141
相关推荐
難釋懷1 小时前
Redis网络模型-基于epoll的服务器端流程
网络·数据库·redis
空太Jun1 小时前
Git 使用学习笔记
笔记·git·学习
这个DBA有点耶1 小时前
MySQL深分页优化:从LIMIT 1000000,10到毫秒级响应的三种写法
数据库·程序人生·mysql·性能优化·学习方法·dba·改行学it
通往曙光的路上2 小时前
mysql3
数据库
焜昱错眩..2 小时前
力扣周赛难题 3906.统计网格路径中好整数的数目——自我拆解学习与分析(数位dp上下界的奇妙)
学习·算法·leetcode·动态规划
阿坤带你走近大数据2 小时前
什么是 REDO LOG,它在 Oracle 数据库中的作用是什么?
数据库·oracle
空中海2 小时前
Git-01:基础篇 — 版本控制与日常操作
git·学习
东风破1372 小时前
DM8搭建同构(dm-dm)及异构数据库(dm-oracle,dm-mysql)的dblink
数据库·mysql·oracle
happymaker06262 小时前
Spring学习日记——DAY06(事务管理)
java·学习·spring