前置条件与说明

        MPP 主备就是在 MPP 集群的基础上,为每一个 MPP 节点配置一套实时主备系统,这些 实时主备系统一起构成了 MPP 主备系统。章主要涉及实际的配置过程,至于相关理论知识,请移步DM技术社区。

文章主要配置 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 接入内部网络。 三台机器配置信息如下: 机器A :IP地址192.168.127.132/192.168.130.142               主库:GRP1_MPP_EP01   备库:GRP2_MPP_EP22机器B :  IP地址192.168.127.133/192.168.130.143               主库:GRP2_MPP_EP02   备库:GRP1_MPP_EP11机器C 的地址:192.168.127.134 无需配置数据库实例机器事先都安装了 DM,安装路径为’/dm/’,执行程序保存在’/dm/bin’目录中,数据存放路径为’/dm/data/EP01’, ’/dm/data/EP02’。

数据准备

初始化库

首先在A、B两台机器上配置数据库实例:

#使用数据库初始化工具dminit,配置初始化数据库

#A机器上配置到目录/dm/data/EP01

./dminit path=/dm/data/EP01

#B机器上配置到目录/dm/data/EP02

./dminit path=/dm/data/EP02

         

配置本地归档文件: 需要对A、B两台机器上的实例EP01、EP02都配置本地归档。以A机器为例手动配置本地归档操作如下:

配置dm.ini。进入/dm/data/EP01/DAMENG,配置dm.ini,将ARCH_INI修改为1。 ARCH_INI = 1 #打开归档配置 配置dmmarch.ini。第一次需要手动配置dmmarch.ini文件在上述目录下: [ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /dm/data/EP01/DAMENG/arch #本地归档文件存放路径

ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~2147483647M 配置成功后,启动数据库,打开manager客户端工具,可以查看是否配置成功。 具体操作:对象导航中右键“实例连接”,点击管理服务器,在弹出的管理服务器窗口中点击左侧“归档配置”如果显示归档模式为“归档”并且下面显示了归档目标,则表示本地归档配置成功。备份还原。准备数据时,如果主库是新初始化的库,先正常启动并正常退出,然后再使用备份还原方式准备备库数据。 以A机器上的脱机备份还原为例,操作如下: 之后,只要对B上的主库EP02作相同的操作即可。

正常关闭A上的数据库EP01。使用DMRMAN进行脱机备份: #机器A上 EP01的备份

./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/EP01/DAMENG/dm.ini' FULL TO BACKUP_FILE1

BACKUPSET '/dm/data/EP01/DAMENG/BACKUP_FILE_01'" 拷贝备份文件到B上 scp -r /dm/data/EP01/DAMENG/BACKUP_FILE_01/ root@192.168.127.133:/dm/data/EP01/DAMENG 在B上执行脱机数据库的还原与更新: #在机器B上的对A上的主库EP01的还原!并且在上一步操作中,我们已经将备份文件复制到EP01/DAMENG文件夹下。

./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/EP01/DAMENG/dm.ini' FROM BACKUPSET

'/dm/data/EP01/DAMENG/BACKUP_FILE_01'" #因为脱机备份没有产生任何 REDO 日志,所以此处省略恢复数据库的操作步骤。

#更新数据库

./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/EP01/DAMENG/dm.ini' UPDATE DB_MAGIC"

配置主库

配置主库GRP1_MPP_EP01

1、配置dm.ini

        在机器A上配置/dm/data/EP01/DAMENG/dm.ini,配置信息如下,找到修改即可:

INSTANCE_NAME = GRP1_MPP_EP01#实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过 16

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 次的日志发送信

2、配置dmmal.ini

        配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致,MAL_HOST 使用内部网络IP,MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值,MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:

        第一次修改需手动生成dmmal.ini文件,可以使用touch dmmal.ini生成,修改配置如下:

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.127.142 #MAL 系统监听 TCP 连接的 IP 地址

MAL_PORT = 5337 #MAL 系统监听 TCP 连接的端口

MAL_INST_HOST = 192.168.127.132 #实例的对外服务 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.127.143

MAL_PORT = 5337

MAL_INST_HOST = 192.168.127.133

MAL_INST_PORT = 5236

MAL_DW_PORT = 5253

MAL_INST_DW_PORT = 5243

[MAL_INST3] #A的备库(在机器B上)的配置

MAL_INST_NAME = GRP1_MPP_EP11

MAL_HOST = 192.168.127.143

MAL_PORT = 5338

MAL_INST_HOST = 192.168.127.133

MAL_INST_PORT = 5237

MAL_DW_PORT = 5254

MAL_INST_DW_PORT = 5244

[MAL_INST4] #B的备库(在机器A上)

MAL_INST_NAME = GRP2_MPP_EP22

MAL_HOST = 192.168.127.142

MAL_PORT = 5338

MAL_INST_HOST = 192.168.127.132

MAL_INST_PORT = 5237

MAL_DW_PORT = 5254

MAL_INST_DW_PORT = 5244

3、配置dmarch.ini(实时归档)

        修改 dmarch.ini,配置实时归档。同上一样,如果是第一次配置,需要手动创建,不过上文我们在配置本地归档的时候已经建立过了。

        除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。

        GRP1_MPP_EP01(A)是主库,需要向 MPP 备库 GRP1_MPP_EP11 (B)同步数据,因 此实时归档的 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~2147483647M

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME #实时归档类型

ARCH_DEST = GRP1_MPP_EP11 #实时归档目标实例名

4、配置dmmpp.ctl

        dmmpp.ctl 是二进制文件,由 dmmpp.ini 文本通过 dmctlcvt 工具转换而来, dmmpp.ini 配置项如下表:

配置项配置含义[SERVICE_NAME]标识了每个实例的选项名MPP_SEQ_NO实例在MPP系统内的序号MPP_INST_NAME节点实例名

         本例中的dmmpp.ini文件配置如下:

         然后使用dmctlcvt 工具,将其转化为dmmpp.ctl:

./dmctlcvt TYPE=2 SRC=/dm/data/EP01/DAMENG/dmmpp.ini DEST=/dm/data/EP01/DAMENG/dmmpp.ctl

配置主库GRP1_MPP_EP02

       在 B 机器上配置主库的实例名为 GRP2_MPP_EP02。

1、配置 dm.ini

INSTANCE_NAME = GRP2_MPP_EP02 #实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16

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 次的日志发送信息

2、配置dmmal.ini

        上文提到,各主备库的 dmmal.ini 配置必须完全一致,所以直接将上文的dmmal.ini文件复制过来即可。

3、配置 dmarch.ini(实时归档)

[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

4、配置dmmpp.ctl

        同机器A 上的情况,将其dmmpp.ctl复制到对应文件夹下即可

#在机器A上执行命令即可

scp -r /dm/data/EP01/DAMENG/dmmpp.ctl dmdba@192.168.127.133:/dm/data/EP02/DAMENG

配置备库

配置备库GRP1_MPP_EP11

        在 B 机器上配置备库的实例名为 GRP1_MPP_EP11。

1、配置dm.ini

        dm.ini 参数修改如下:

INSTANCE_NAME = GRP1_MPP_EP11 #实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16

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 次的日志重演信息

2、配置dmmal.ini

        同样,直接将上文中A或B上的主库实例的dmmal.ini复制到当前目录即可

#将B机器上实例GRP1_MPP_EP02的dmmal.ini复制过来

cp /dm/data/EP02/DAMENG/dmmal.ini /dm/data/EP01/DAMENG/

3、配置 dmarch.ini(实时归档)

        当前实例 GRP1_MPP_EP11 是备库,守护系统配置完成后,可能在各种故障处理中, GRP1_MPP_EP11 切换为新的主库,正常情况下,GRP1_MPP_EP01 会切换为新的备库, 需要向 GRP1_MPP_EP01 同 步 数 据 , 因 此 实 时 归 档 的 ARCH_DEST 配 置 为 GRP1_MPP_EP01。

4、配置dmmpp.ctl

        可以直接将主库(A上)的dmmpp.ctl复制到目录。

#在机器A上执行。

scp -r /dm/data/EP01/DAMENG/dmmpp.ctl dmdba@192.168.127.133:/dm/data/EP01/DAMENG

配置备库GRP1_MPP_EP22

        在A机器上配置备库的实例名为 GRP2_MPP_EP22。

1、配置dm.ini

        dm.ini参数配置如下:

INSTANCE_NAME = GRP2_MPP_EP22 #实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16

PORT_NUM = 5237 #数据库实例监听端口

DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间

ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID

ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间

MAL_INI = 1 #打开 MAL 系统

ARCH_INI = 1 #打开归档配置

2、配置dmmal.ini

        同上,直接将其他主备库上的dmmal.ini文件拷贝到相应文件夹:

#将A机器上的主库实例GRP_MPP_EP01上的dmmal.ini文件拷贝至相应文件夹下

cp /dm/data/EP01/DAMENG/dmmal.ini /dm/data/EP02/DAMENG/

3、配置 dmarch.ini(实时归档)

[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

4、配置dm.ctl

        同样地,将 A 机器上实例GRP1_MPP_EP01配置的dmmpp.ctl 拷贝到本实例对应的文件夹下:

cp /dm/data/EP01/DAMENG/dm.ctl /dm/data/EP02/DAMENG/

配置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 = 114514 #守护系统唯一 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 = 191981 #守护系统唯一 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 = 114514 #守护系统唯一 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 = 191981 #守护系统唯一 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 #指定备库重演日志的时间阈值,默认关闭

配置监视器

        修改机器C的dmmonitor.ini配置,第一次修改需手动创建该文件,可以创建在/dm/data目录下:        

        然后配置如下信息:

#修改 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 = 114514 #组 GRP1 的唯一 OGUID 值

#以下配置为监视器到组 GRP1 的守护进程的连接信息,以―IP:PORT‖的形式配置

#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT

MON_DW_IP = 192.168.127.142:5253

MON_DW_IP = 192.168.127.143:5254

[GRP2]

MON_INST_OGUID = 191981 #组 GRP2 的唯一 OGUID 值

#以下配置为监视器到组 GRP2 的守护进程的连接信息,以―IP:PORT‖的形式配置

#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT

MON_DW_IP = 192.168.127.143:5253

MON_DW_IP = 192.168.127.142:5254

以mount方式启动主备库

        一定要以 Mount 方式启动数据库实例,否则系统启动时会重构回滚表空间, 生成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。

#f方式启动主库EP01,其他主备库类似

./dmserver /dm/data/EP01/DAMENG/dm.ini mount

        启动成功后,几个主备库都会出现STSTEM IS READY提示:

 设置OGUID与修改数据库模式

        打开disql,主备库打开disql分别为5236、5237:

        主库上运行的语句:

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

SQL>sp_set_oguid(114514);/*在A机器上为114514,在B机器上为191981*/

SQL>alter database primary;

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

        备库上运行的语句:

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

SQL>sp_set_oguid(191981);/*在A机器上为191981,在机器B上为114514*/

SQL>alter database STANDBY;

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

启动守护进程

        分别启动 A、B 机器上的守护进程,例如:

./dmwatcher /dm/data/EP01/DAMENG/dmwatcher.ini

        出现以下提示就是成功:

 启动监视器:

        在/dm/bin下启动监视器:

./dmmonitor /dm/data/dmmonitor.ini

        同样,出现以下提示表示成功:

 关闭MMP集群

        至此,到上一步,MPP主备搭建完成。如果要手动关闭,一定要严格按照以下顺序:

        1. 如果启动了确认监视器,先关闭确认监视器(防止自动接管)         2. 关闭备库守护进程(防止重启实例)         3. 关闭主库守护进程(防止重启实例)         4. Shutdown 主库         5. Shutdown 备库

请上达梦社区了解:https://eco.dameng.com

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。