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