前置条件与说明
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
好文链接
发表评论