DM MPP 环境搭建与使用

DM MPP 环境搭建

  我们将以一个简单的两节点 MPP 为例,介绍手动配置与搭建 DM MPP 环境的步骤。
DM 提供了 DM web 版数据库管理工具,可以很方便地搭建 DM MPP。

系统规划

本例配置一个两节点 MPP 。两个节点都配置两块网卡,一块接入内部网络交换模块,一
块接入到外部交换机。两节点实例名分别为 EP01 EP02 ,相关的 IP 、端口等规划见下表。
4.1 MPP 系统规划
实例名
MAL_INST_HOST
MAL_INST_PORT
MAL_HOST
MAL 端口
MPP_SEQNO
EP01
192.168.1.11
5236
192.168.0.12 5269
0
EP02
192.168.1.21
5237
192.168.0.22 5270
1
DM MPP EP 使用的 DM 服务器版本应一致,同时还应注意各 EP 所在主
机的操作系统位数、大小端模式、时区及时间设置都应一致,否则可能造
成意想不到的错误。

配置 dm.ini

分别对两个实例的 dm.ini 进行配置。
修改 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 = 192.168.0.12
MAL_PORT = 5269
MAL_INST_HOST = 192.168.1.11
MAL_INST_PORT = 5236
[MAL_INST2]
MAL_INST_NAME = EP02
MAL_HOST = 192.168.0.22
MAL_PORT = 5270
MAL_INST_HOST = 192.168.1.21
MAL_INST_PORT = 5237

配置 dmmpp.ctl

dmmpp.ctl 是一个二进制文件,用户不能直接配置,需要先配置 dmmpp.ini
配置 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 同一个目录。假设 DM 的安装路径为 c
根目录,下面的命令将 dmmpp.ini 转换为 dmmpp.ctl ,命令中的“ TYPE=2 ”参数表示
将文本文件转换成控制文件,也可以使用“ TYPE=1 ”参数进行逆向转换。
dmctlcvt
TYPE=2
SRC=c:\dmdbms\data\dameng\dmmpp.ini
DEST=c:\dmdbms\data\dameng\dmmpp.ctl
将生成的 dmmpp.ctl 拷贝至另一 EP ,保证 MPP 系统中所有 EP dmmpp.ctl 完全
相同。

运行 MPP

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

建立分布表

DM MPP 支持表数据的哈希分布、随机分布、复制分布、范围分布、 LIST 分布类型,
用户可根据实际情况选择合适的分布类型,具体各分布类型的特点见 3.1.3 节。
MPP 的数据分布类型和具体设置在建表时指定,语法如下,建表的其他语法分支可参见
DM8_SQL 语言使用手册》。
CREATE [[GLOBAL] TEMPORARY] TABLE < 表名定义 > < 表结构定义 >;
< 表结构定义 >::=< 表结构定义 1> | < 表结构定义 2>
< 表结构定义 1>::= (< 列定义 > {,< 列定义 >} [,< 表级约束定义 >{,< 表级约束定义 >}]) [ON COMMIT
<DELETE | PRESERVE> ROWS] [<PARTITION 子句 >][< 空间限制子句 >] [<STORAGE 子句 >][<
压缩子句 >] [<ROW MOVEMENT 子句 >][<DISTRIBUTE 子句 >]
< 表结构定义 2>::= [ON COMMIT <DELETE | PRESERVE> ROWS] [< 空间限制子句 >] [<STORAGE
子句 >] [< 压缩子句 >]AS < 不带 INTO SELECT 语句 >[<DISTRIBUTE 子句 >];
<DISTRIBUTE 子句 >::=DISTRIBUTED[<RANDOMLY>|<FULLY>]
|DISTRIBUTED BY [<HASH>](< 列名 > {,< 列名 >})
|DISTRIBUTED BY RANGE (< 列名 > {,< 列名 >})(< 范围分布项 > {,< 范围分布项 >})
|DISTRIBUTED BY LIST (<< 列名 > {,< 列名 >}>)(<LIST 分布项 > {,<LIST 分布项 >})
< 范围分布项 >::= VALUES LESS THAN (< 表达式 >{,< 表达式 >}) ON < 实例名 >
|VALUES EQU OR LESS THAN (< 表达式 >{,< 表达式 >}) ON < 实例名 >
<LIST 分布项 >::= VALUES (< 表达式 >{,< 表达式 >}) ON < 实例名 >
下面给出几个简单的创建不同类型分布表的例子。
1 :创建哈希分布表 T_HASH ,分布列为 C1
CREATE TABLE T_HASH(C1 INT, C2 CHAR(10))DISTRIBUTED BY HASH (C1);
2 :创建随机分布表 T_RANDOM
22 DM 大规模并行处理 MPP
CREATE TABLE T_RANDOM(C1 INT, C2 CHAR(10))DISTRIBUTED RANDOMLY;
3 :创建复制分布表 T_FULLY
CREATE TABLE T_FULLY(C1 INT, C2 CHAR(10))DISTRIBUTED FULLY;
4 :创建范围分布表 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);
5 :创建 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);
6 :创建哈希分布表的范围水平分区表。
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);
在创建分布表时,用户应注意以下一些使用限制:
单机模式下建的分布表和普通表一样,但是不能创建指定实例名的分布表(如范围
分布表和 LIST 分布表);
MPP 模式下创建分布表,如果未指定列则默认为 RANDOMLY( 随机 ) 分布表;
23 DM 大规模并行处理 MPP
分布列类型不支持 BLOB CLOB IMAGE TEXT LONGVARCHAR BIT BINARY
VARBINARY LONGVARBINARY BFILE 、时间间隔类型、虚拟列和用户自定义类
型;
HASH 分布、 RANGE 分布、 LIST 分布允许更新分布列,并支持包含大字段列的表
的分布列更新,但包含 INSTEAD OF 触发器的表、堆表不允许更新分布列;
对于 FULLY (复制)分布表,只支持单表查询的更新和删除操作,并且查询项或者
条件表达式中都不能包含 ROWID 伪列表达式;
RANGE (范围)分布表和 LIST (列表)分布表,分布列与分布列值列表必须一致,
并且指定的实例名不能重复;
引用约束的引用列和被引用列都必需包含分布列,且分布情况完全相同;
随机分布表不支持 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 与数据守护相结合
的部署方案。

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

1. 获取会话连接的 EP 的节点序号
SELECT SF_GET_SELF_EP_SEQNO();
2. 根据 ROWID 获取本行数据来自哪个 EP
SELECT SF_GET_EP_SEQNO(ROWID);
3. 获取 EP 节点配置信息
SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) =
SF_GET_SELF_EP_SEQNO();
4. 获取当前会话连接的实例名
SELECT NAME FROM V$INSTANCE WHERE SF_GET_EP_SEQNO(ROWID) =
SF_GET_SELF_EP_SEQNO();
5. 获取 MPP 系统内所有 EP 的所有会话
SELECT * FROM V$SESSIONS;
6. 获取当前连接的实例上的所有会话
SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
7. 获取实例 EP01 上的所有会话
SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = (SELECT DISTINCT EP_SEQNO
FROM V$MPP_CFG_ITEM WHERE INST_NAME ='EP01');
8. 获取表 TEST 在每个实例上的数据行数
CALL SP_GET_EP_COUNT('SYSDBA','TEST');
9. 获取所接实例上的表 TEST 的使用空间
SELECT TABLE_USED_PAGES('SYSDBA','TEST');
10. 获取每个实例上的表 TEST 使用空间
SELECT TABLE_USED_PAGES('SYSDBA','TEST'), NAME FROM V$INSTANCE;
11. 获取所有实例上表 TEST 的总使用空间
SELECT SUM(TOTAL_SIZE) FROM (SELECT TABLE_USED_PAGES('SYSDBA','TEST')
TOTAL_SIZE, NAME FROM V$INSTANCE);

配置 MPP 主备

为了提高 MPP 系统可靠性,克服由于单节点故障导致整个系统不能继续正常工作, DM
在普通的 MPP 系统基础上,引入主备守护机制,将 MPP 节点作为主库节点,增加备库作为
备份节点,必要时可切换为主库代替故障节点工作,提高系统的可靠性和可用性。

环境说明

本例配置 2 MPP 节点,每个节点作为主库,与其备库组成一个守护组,因此需要配
置两个守护组,取名分别为 GRP1 GRP2 ,主库名为 GRP1_MPP_EP01/ GRP2_MPP_EP02
对应的备库实例名分别为 GRP1_MPP_EP11/GRP2_MPP_EP22
准备 3 台机器 A B C A B 用来交叉部署实例, C 用来部署监视器。其中 A B
配置两块网卡,一块接入内部网络交换模块,一块接入到外部交换机, C 接入内部网络。
机器事先都安装了 DM ,安装路径为 ’/dm’ ,执行程序保存在 ’/dm/bin’ 目录中,数据
存放路径为 ’/dm/data/EP01’, ’/dm/data/EP02’

数据准备  

A 机器上初始化库至目录 /dm/data/EP01
./dminit path=/dm/data/EP01
B 机器上初始化库至目录 /dm/data/EP02
./dminit path=/dm/data/EP02
即完成两个主数据库的初始化,然后按照 数据准备 中的方法分别同步两个备数据
库。
本例中采取机器交叉的方式配置两个备数据库,分别对应存放的目录为:
B 机器的 /dm/data/EP01
A 机器的 /dm/data/EP02

配置主库 GRP1_MPP_EP01

 配置 dm.ini

A 机器上配置主库的实例名为 GRP1_MPP_EP01 dm.ini 参数修改如下:
# 实例名,建议使用 组名 _ 守护环境 _ 序号 的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_MPP_EP01
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0
# 不允许手工方式修改实例模式 / 状态 /OGUID
ENABLE_OFFLINE_TS = 2
# 不允许备库 OFFLINE 表空间
MAL_INI = 1
# 打开 MAL 系统
ARCH_INI = 1
# 打开归档配置
MPP_INI = 1
# 启用 MPP 配置
RLOG_SEND_APPLY_MON
= 64 # 统计最近 64 次的日志发送信息

配置 dmmal.ini

配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致, MAL_HOST 使用内部网
IP MAL_PORT dm.ini PORT_NUM 使用不同的端口值, MAL_DW_PORT 是各实例
对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:
MAL_CHECK_INTERVAL = 5
#MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5
# 判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = GRP1_MPP_EP01 # 实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.0.141 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5337
#MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.1.131 # 实例的对外服务 IP 地址
MAL_INST_PORT = 5236 # 实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT
= 5253 # 实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5243 # 实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = GRP2_MPP_EP02
MAL_HOST = 192.168.0.142
MAL_PORT = 5337
MAL_INST_HOST = 192.168.1.132
MAL_INST_PORT = 5236
MAL_DW_PORT = 5253
MAL_INST_DW_PORT = 5243
[MAL_INST3]
MAL_INST_NAME = GRP1_MPP_EP11
MAL_HOST = 192.168.0.142
MAL_PORT = 5338
MAL_INST_HOST = 192.168.1.132
MAL_INST_PORT = 5237
MAL_DW_PORT = 5254
MAL_INST_DW_PORT = 5244
[MAL_INST4]
MAL_INST_NAME = GRP2_MPP_EP22
MAL_HOST = 192.168.0.141
MAL_PORT = 5338
MAL_INST_HOST = 192.168.1.131
MAL_INST_PORT = 5237
MAL_DW_PORT = 5254
MAL_INST_DW_PORT = 5244

配置 dmarch.ini(实时归档)

修改 dmarch.ini ,配置实时归档。
除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需
要同步归档数据的目标实例名。
当前实例 GRP1_MPP_EP01 是主库,需要向 MPP 备库 GRP1_MPP_EP11 同步数据,因
此实时归档的 ARCH_DEST 配置为 GRP1_MPP_EP11
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
# 实时归档类型
ARCH_DEST = GRP1_MPP_EP11
# 实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/data/EP01/DAMENG/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128
# 单位 Mb ,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb 0 表示无限制,范围 1024~4294967294M

配置 dmmpp.ctl

dmmpp.ctl 是二进制文件,由 dmmpp.ini 文本通过 dmctlcvt 工具转换而来,
dmmpp.ini 配置项如下表:
7.9 dmmpp.ini 配置项
配置项
配置含义
[SERVICE_NAME]
标识每个实例的选项名
MPP_SEQ_NO
实例在 MPP 系统内的序号
MPP_INST_NAME
节点实例名
本例中两节点的 dmmpp.ini 配置如下:
[service_name1]
mpp_seq_no = 0
mpp_inst_name = GRP1_MPP_EP01
[service_name2]
mpp_seq_no = 1
mpp_inst_name = GRP2_MPP_EP02
转换命令如下:
./dmctlcvt
TYPE=2
SRC=/dm/data/EP01/DAMENG/dmmpp.ini
DEST=/dm/data/EP01/DAMENG/dmmpp.ctl

启动主库

Mount 方式启动主库。
./dmserver /dm/data/EP01/DAMENG/dm.ini mount

设置 OGUID

启动命令行工具 DIsql ,使用 MPP 类型为 LOCAL 方式,登录主库设置 OGUID 值。
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(45330);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

修改数据库模式

启动命令行工具 DIsql ,使用 MPP 类型为 LOCAL 方式,登录主库修改数据库为
Primary 模式。
SQL>alter database primary;

配置主库 GRP2_MPP_EP02

配置 dm.ini

B 机器上配置主库的实例名为 GRP2_MPP_EP02 dm.ini 参数修改如下:
# 实例名,建议使用 组名 _ 守护环境 _ 序号 的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP2_MPP_EP02
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0
# 不允许手工方式修改实例模式 / 状态 /OGUID
ENABLE_OFFLINE_TS = 2
# 不允许备库 OFFLINE 表空间
MAL_INI = 1
# 打开 MAL 系统
ARCH_INI = 1
# 打开归档配置
MPP_INI = 1
# 启用 MPP 配置
RLOG_SEND_APPLY_MON
= 64 # 统计最近 64 次的日志发送信息

配置 dmmal.ini

直 接 将 A 机 器 上 实 例 GRP1_MPP_EP01 配置的 dmmal.ini 拷 贝 到
/dm/data/EP02/DAMENG 目录中。

配置 dmarch.ini(实时归档)

修改 dmarch.ini ,配置实时归档。
除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需
要同步归档数据的目标实例名。
当前实例 GRP2_MPP_EP02 是主库,需要向 MPP 备库 GRP2_MPP_EP22 同步数据,因
此实时归档的 ARCH_DEST 配置为 GRP2_MPP_EP22
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
# 实时归档类型
ARCH_DEST = GRP2_MPP_EP22
# 实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/data/EP02/DAMENG/arch#本地归档文件存放路径
ARCH_FILE_SIZE = 128
# 单位 Mb ,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb 0 表示无限制,范围 1024~4294967294M

配置 dmmpp.ctl

配置 dmmpp.ctl ,拷贝 dmmpp.ctl /dm/data/EP02/DAMENG 目录
即可

启动主库

Mount 方式启动主库
./dmserver /dm/data/EP02/DAMENG/dm.ini mount

设置 OGUID

启动命令行工具 DIsql ,使用 MPP 类型为 LOCAL 方式,登录主库设置 OGUID 值。
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(45331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

修改数据库模式

启动命令行工具 DIsql ,使用 MPP 类型为 LOCAL 方式,登录主库修改数据库为
Primary 模式。
SQL>alter database primary;

配置备库 GRP1_MPP_EP11

配置 dm.ini

B 机器上配置备库的实例名为 GRP1_MPP_EP11 dm.ini 参数修改如下:
# 实例名,建议使用 组名 _ 守护环境 _ 序号 的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_MPP_EP11
PORT_NUM = 5237 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0
# 不允许手工方式修改实例模式 / 状态 /OGUID
ENABLE_OFFLINE_TS = 2
# 不允许备库 OFFLINE 表空间
MAL_INI = 1
# 打开 MAL 系统
ARCH_INI = 1
# 打开归档配置
MPP_INI = 1
# 打开 MPP 配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息

配置 dmmal.ini

直 接 将 A 机 器 上 实 例 GRP1_MPP_EP01 配置的 dmmal.ini 拷 贝 到
/dm/data/EP01/DAMENG 目录中

配置 dmarch.ini(实时归档)

修改 dmarch.ini ,配置实时归档。
除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需
要同步归档数据的目标实例名。
当前实例 GRP1_MPP_EP11 是备库,守护系统配置完成后,可能在各种故障处理中,
GRP1_MPP_EP11 切换为新的主库,正常情况下, GRP1_MPP_EP01 会切换为新的备库,
需要向 GRP1_MPP_EP01 同 步 数 据 , 因 此 实 时 归 档 的 ARCH_DEST 配 置 为
GRP1_MPP_EP01
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
# 实时归档类型
ARCH_DEST = GRP1_MPP_EP01
# 实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
# 本地归档类型
ARCH_DEST = /dm/data/EP01/DAMENG/arch#本地归档文件存放路径
ARCH_FILE_SIZE = 128
# 单位 Mb ,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb 0 表示无限制,范围 1024~4294967294M

配置 dmmpp.ctl

数据守护 V2.1 及以上版本中, MPP 备库同样需要配置 dmmpp.ctl 文件,可以直接从
主库上拷贝。
本 例 中 将 A 机 器 上 实 例 GRP1_MPP_EP01 配 置 的 dmmpp.ctl 拷 贝 到
/dm/data/EP01/DAMENG 目录中。

启动备库

Mount 方式启动备库
./dmserver /dm/data/EP01/DAMENG/dm.ini mount

设置 OGUID

启动命令行工具 DIsql ,登录备库设置 OGUID 值。
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(45330);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

修改数据库模式

启动命令行工具 DIsql ,登录实例修改数据库为 Standby 模式。
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>ALTER DATABASE STANDBY;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

配置备库 GRP2_MPP_EP22

配置 dm.ini

A 机器上配置备库的实例名为 GRP2_MPP_EP22 dm.ini 参数修改如下:
# 实例名,建议使用 组名 _ 守护环境 _ 序号 的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP2_MPP_EP22
PORT_NUM = 5237 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0
# 不允许手工方式修改实例模式 / 状态 /OGUID
ENABLE_OFFLINE_TS = 2
# 不允许备库 OFFLINE 表空间
MAL_INI = 1
# 打开 MAL 系统
ARCH_INI = 1
# 打开归档配置
MPP_INI = 1 #打开 MPP 配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息

配置 dmmal.ini

直 接 将 A 机 器 上 实 例 GRP1_MPP_EP01 配置的 dmmal.ini 拷 贝 到
/dm/data/EP02/DAMENG 目录中。

配置 dmarch.ini

修改 dmarch.ini ,配置实时归档。
除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需
要同步归档数据的目标实例名。
当前实例 GRP2_MPP_EP22 是备库,守护系统配置完成后,可能在各种故障处理中,
GRP2_MPP_EP22 切换为新的主库,正常情况下, GRP2_MPP_EP02 会切换为新的备库,
需要向 GRP2_MPP_EP02 同 步 数 据 , 因 此 实 时 归 档 的 ARCH_DEST 配 置 为
GRP2_MPP_EP02
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
# 实时归档类型
ARCH_DEST = GRP2_MPP_EP02
# 实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/data/EP02/DAMENG/arch
# 本地归档文件存放路径
ARCH_FILE_SIZE = 128
# 单位 Mb ,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb 0 表示无限制,范围 1024~4294967294M

配置 dmmpp.ctl

数据守护 V2.1 及以上版本中, MPP 备库同样需要配置 dmmpp.ctl 文件,可以直接从
主库上拷贝。
本 例 中 将 A 机 器 上 实 例 GRP1_MPP_EP01 配 置 的 dmmpp.ctl 拷 贝 到/dm/data/EP02/DAMENG 目录中。

启动备库

Mount 方式启动实例。
./dmserver /dm/data/EP02/DAMENG/dm.ini mount

设置 OGUID

启动命令行工具 DIsql ,登录实例设置 OGUID 值。
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(45331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

修改数据库模式

启动命令行工具 DIsql ,登录实例修改数据库为 Standby 模式 :
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>ALTER DATABASE STANDBY;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

配置 dmwatcher.ini

一般来说,每个单独的实例都是使用一个单独的守护进程守护。比如前面的实时主备和
读写分离集群的配置。
本例中,由于同一台机器上有不同组的两个实例,我们可以只配置一个守护进程,同时
守护两个实例。
A 机器上配置 dmwatcher.ini ,配置为全局守护类型,使用自动切换模式。
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10
# 远程守护进程故障认定时间
INST_RECOVER_TIME = 60 # 主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10
# 本地实例故障认定时间
INST_OGUID = 45330 # 守护系统唯一 OGUID
INST_INI = /dm/data/EP01/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1
# 打开实例的自动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver # 命令行方式启动
RLOG_SEND_THRESHOLD = 0 # 指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 # 指定备库重演日志的时间阈值,默认关闭
[GRP2]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10
# 远程守护进程故障认定时间
INST_RECOVER_TIME = 60 # 主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10
# 本地实例故障认定时间
INST_OGUID = 45331 # 守护系统唯一 OGUID
INST_INI = /dm/data/EP02/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1
# 打开实例的自动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver # 命令行方式启动
RLOG_SEND_THRESHOLD = 0 # 指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 # 指定备库重演日志的时间阈值,默认关闭
B 机器上配置 dmwatcher.ini ,配置为全局守护类型,使用自动切换模式。
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10
# 远程守护进程故障认定时间
INST_RECOVER_TIME = 60 # 主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10
# 本地实例故障认定时间
INST_OGUID = 45330 # 守护系统唯一 OGUID
INST_INI = /dm/data/EP01/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1
# 打开实例的自动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver # 命令行方式启动
RLOG_SEND_THRESHOLD = 0 # 指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 # 指定备库重演日志的时间阈值,默认关闭
[GRP2]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10
# 远程守护进程故障认定时间
INST_RECOVER_TIME = 60 # 主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10
# 本地实例故障认定时间
INST_OGUID = 45331 # 守护系统唯一 OGUID
INST_INI = /dm/data/EP02/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1
# 打开实例的自动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver # 命令行方式启动
RLOG_SEND_THRESHOLD = 0 # 指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 # 指定备库重演日志的时间阈值,默认关闭

配置监视器

配置监视器时可以选择配置单实例监视器或配置多实例监视器,下面将分别介绍配置单
实例监视器以及多实例监视器时 dmmonitor.ini 配置文件中的配置信息。

配置单实例监视器

修改 dmmonitor.ini 配置确认监视器,其中 MON_DW_IP 中的 IP PORT
dmmal.ini 中的 MAL_HOST MAL_DW_PORT 配置项保持一致。
MON_DW_CONFIRM = 1
# 确认监视器模式
MON_LOG_PATH = /dm/data/log
# 监视器日志文件存放路径
MON_LOG_INTERVAL = 60
# 每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32
# 每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0
# 不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 45330 #组 GRP1 的唯一 OGUID
# 以下配置为监视器到组 GRP1 的守护进程的连接信息,以 ―IP:PORT‖ 的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.0.141:5253
MON_DW_IP = 192.168.0.142:5254
[GRP2]
MON_INST_OGUID = 45331
# GRP2 的唯一 OGUID
# 以下配置为监视器到组 GRP2 的守护进程的连接信息,以 ―IP:PORT‖ 的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.0.142:5253
MON_DW_IP = 192.168.0.141:5254

配置多实例监视器

与配置单实例监视器相比,配置多实例监视器时 dmmonitor.ini 中需要添加整个监
视器系统中的实例总数 MON_INST_NUM (取值为 1 3 或者 5 ),各实例通信的心跳校验间
MON_HB_INTERVAL ( 取 值 ( 5~600 ), 单 位 秒 ), 各 实 例 通 信 的 心 跳 间 隔
MON_BRO_INTERVAL (取值( 5~600 ),单位毫秒),各实例通信的基础投票间隔
MON_VOTE_INTERVAL (取值( 5~600 ),单位毫秒),各实例通信的心跳间隔以及基础投
票间隔会在真正使用时进行调整,各实例通信心跳间隔需要比基础投票间隔小(若配置中各
实例通信心跳间隔比基础投票间隔大,内部会将实例通信心跳间隔调整为与基础投票间隔相
同,再进行其他的调整处理 ) ,增加监视器 ID MON_ID (用于区别所有监视器中的不同
实例,每个监视器实例的 MON_ID MON_INST_ID 相同,取值( 1~2147483647 )),增
加监视器系统唯一标识 MON_MID (取值( 1~2147483647 )),多实例监视器系统中的所
有监视器需配置相同的 MON_MID
与配置单实例监视器相比,配置多实例监视器时组的配置信息不做更改,监视器实例的
配置信息需要新增配置参数,通过组和实例的配置信息内容的不同来区分组和实例,如果用
户将组和实例的配置信息混淆,则以配置信息中更加靠前的参数为准来决定当前配置属于组
还是实例,不属于组或实例的配置项将会被忽略。
监视器实例的配置信息包括实例 IP 地址、监听端口号以及实例在系统中的唯一编号,
实例的 IP 地址和监听端口号不应出现冲突,否则该监视器实例可能无法正常使用。所有监
视器实例的 dmmonitor.ini 配置文件中除 MON_ID 参数项外应完全一致,每个监视器的
MON_ID 应互不相同,用于区分同一个监视器系统中的不同监视器实例,若配置相同的
MON_ID 将导致通信无法正常建立。监视器实例监听的 IP 及端口号的正确性由用户保证。
配置多实例监视器时 dmmonitor.ini 配置文件中的内容如下:
MON_LOG_PATH = /dm/data/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
MON_DW_CONFIRM = 1
MON_INST_NUM = 3
# 实例总个数
MON_HB_INTERVAL = 60
# 通信心跳校验间隔
MON_BRO_INTERVAL = 100
#raft 协议中实例通信心跳间隔
MON_VOTE_INTERVAL = 100
#raft 协议中基础投票间隔
MON_ID = 1
# 当前监视器在监视器系统中的 ID
MON_MID = 45614
# 当前监视器系统的唯一标识
[GRP1]
MON_INST_OGUID = 45330
MON_DW_IP = 192.168.0.141:5253
MON_DW_IP = 192.168.0.142:5254
[GRP2]
MON_INST_OGUID = 45331
MON_DW_IP = 192.168.0.142:5253
MON_DW_IP = 192.168.0.141:5254
[GRP3]
[MON1]
MON_HOST = 192.168.0.141
# 系统监听 TCP 连接的 IP 地址
MON_PORT = 8339
# 系统监听 TCP 连接的端口号
MON_INST_ID = 1
# 监视器实例在监视器系统中的 ID
[MON2]
...
[MON3]

启动守护进程

分别启动 A B 机器上的守护进程,例如:
./dmwatcher /dm/data/EP01/DAMENG/dmwatcher.ini
守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始
广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将
本地实例 Open ,并切换为 Open 状态。

启动监视器

启动监视器:
./dmmonitor /dm/data/dmmonitor.ini
监视器提供一系列命令,支持当前守护系统状态查看以及故障处理,可输入 help 命令,
查看各种命令说明使用,结合实际情况选择使用。
至此 MPP 实时主备搭建完毕,在搭建步骤和各项配置都正确的情况下,在监视器上执
show 命令,可以监控到所有实例都处于 Open 状态,所有守护进程也都处于 Open 状态,
即为正常运行状态。
更多信息请访问 eco.dameng.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值