DM MPP大规模并行交叉主备集群部署

 

  1. 简介

MPP 主备就是在 MPP 集群的基础上,为每一个 MPP 节点配置一套实时主备系统,这些实时主备系统一起构成了 MPP 主备系统。MPP 主备系统包含多个守护进程组,每个守护进程组都是一个相对独立的实时主备系统,具备实时主备的基本功能,可以进行主备切换、备库接管等操作。

MPP 主备的主要目的是为 DM MPP 集群提供数据可靠性保障,备库只做数据容灾、备份,MPP 备库并不是 MPP 集群的一部分,只是某个 MPP 节点(主库)的镜像。MPP 备库不参与 MPP 操作,与其他 MPP 备库之间也没有任何关系,MPP 备库只能以单节点方式提供只读服务,但不提供全局的 MPP 只读服务。

MPP 主备系统中,一个守护进程 dmwatcher 可以监控、管理多个守护进程组的数据库实例。一般来说,一台物理机器上,可以部署 1 MPP 节点的主库和多个其他 MPP 节点的备库,充分利用硬件资源,节省投资。Global 守护类型的 MPP 主备库需要在 dm.ini 中配置 MPP_INI 1,并且 MPP 主备库的本地数据文件目录下都需要有 dmmpp.ctl 文件,如果 Global 守护类型的备库没有上述配置,守护进程和监视器无法正常使用,守护进程会切换到 Shutdown 状态,监视器上无法正常执行命令,会打印配置不一致的提示信息。

下图以三个 MPP 节点,每个节点配备两个备库为例,说明 MPP 主备系统的结构。

1-1 DM MPP主备图解说明

  1. 部署环境

2‑1 部署环境

系统版本

Centos7.9

CPU型号

Intel(R) i5-7200U CPU (2核)

磁盘空间

40G

内存大小

2G

2‑2 磁盘规划

数据

/dev/mapper/vg_dm-lv_dmdata

备份

/dev/mapper/vg_dm-lv_dmbak

归档

/dev/mapper/vg_dm-lv_arch

2‑3 目录规划

数据库软件安装目录

/home/dmdba/dmdbms

实例安装目录

/dmdata

归档存放目录

/dmdata/arch

备份存放目录

/dmdata/dmbak/

2‑4 IP端口规划

实例名

IP

MAL端口

系统监听端口

实例本地的守护进程监听端口

实例监听守护进程端口

mpp1

192.168.254.144

5236

7336

7436

7536

mpp2

192.168.254.147

5236

7336

7436

7536

mpp11(mpp1备库)

192.168.254.147

5237

7337

7437

7537

mpp22(mpp2备库)

192.168.254.144

5237

7337

7437

7537

  1. DM MPP大规模并行交叉主备集群部署

    1. 安装DM 8并初始化实例

安装过程本文略

 

//mpp1初始化

./dminit path=/dmdata DB_NAME=mpp1 INSTANCE_NAME=mpp1 PORT_NUM=5236

//mpp22初始化

./dminit path=/dmdata DB_NAME=mpp22 INSTANCE_NAME=mpp22 PORT_NUM=5237

//mpp2初始化

./dminit path=/dmdata DB_NAME=mpp2 INSTANCE_NAME=mpp2 PORT_NUM=5236

//mpp11初始化

./dminit path=/dmdata DB_NAME=mpp11 INSTANCE_NAME=mpp11 PORT_NUM=5237

 

//将初始化后的数据库需要先启动一次,出现system is ready后停止数据库

cd /home/dmdba/dmdbms/bin

./dmserver /dmdata/mpp1/dm.ini

./dmserver /dmdata/mpp22/dm.ini

./dmserver /dmdata/mpp2/dm.ini

./dmserver /dmdata/mpp11/dm.ini

//查询是否都开启了DmAPService服务,若没有开启则手动开启./DmAPService start

ps -ef|grep dmap

  1. 数据库归档配置

//mpp1下

SQL> alter database mount;

SQL> alter database add archivelog 'dest=/dmdata/arch/mpp1 ,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=10240';

SQL> alter database archivelog;

SQL> alter database open;

 

//mpp22下

SQL> alter database mount;

SQL> alter database add archivelog 'dest=/dmdata/arch/mpp22 ,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=10240';

SQL> alter database archivelog;

SQL> alter database open;

 

//mpp2下

SQL> alter database mount;

SQL> alter database add archivelog 'dest=/dmdata/arch/mpp2 ,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=10240';

SQL> alter database archivelog;

SQL> alter database open;

 

//mpp11下

SQL> alter database mount;

SQL> alter database add archivelog 'dest=/dmdata/arch/mpp11 ,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=10240';

SQL> alter database archivelog;

SQL> alter database open;

 

  1. 主备库做备份还原

//主库mpp1下进行备份

cd /home/dmdba/dmdbms/bin

./dmrman

RMAN> backup database '/dmdata/mpp1/dm.ini' backupset '/home/dmdba/bakfull';

 

////主库mpp2下进行备份

RMAN> backup database '/dmdata/mpp2/dm.ini' backupset '/home/dmdba/bakfull2';

 

//备份成功后退出RMAN模式进行SCP发送备份到备库mpp11与mpp22下

scp -r /home/dmdba/bakfull dmdba@备库ip:/home/dmdba

31 主库数据备份成功

32 通过SCP发送成功

 

//备库mpp11上进行数据恢复

mkdir -p /home/dmdba/bakfull

cd /home/dmdba/dmdbms/bin

./dmrman

RMAN> restore database '/dmdata/mpp11/dm.ini' from backupset '/home/dmdba/bakfull';

RMAN> recover database '/dmdata/mpp11/dm.ini' from backupset '/home/dmdba/bakfull';

RMAN> recover database '/dmdata/mpp11/dm.ini' update db_magic;

 

//备库mpp22上进行数据恢复

mkdir -p /home/dmdba/bakfull

cd /home/dmdba/dmdbms/bin

./dmrman

RMAN> restore database '/dmdata/mpp22/dm.ini' from backupset '/home/dmdba/bakfull';

RMAN> recover database '/dmdata/mpp22/dm.ini' from backupset '/home/dmdba/bakfull';

RMAN> recover database '/dmdata/mpp22/dm.ini' update db_magic;

33 备库数据恢复成功

 

  1. 修改dm.ini文件

vi /dmdata/mpp*/dm.ini

//mpp1修改以下参数

INSTANCE_NAME = mpp1

PORT_NUM  = 5236

MAL_INI = 1

ARCH_INI = 1

MPP_INI = 1

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2

 

//mpp22修改以下参数

INSTANCE_NAME = mpp22

PORT_NUM  = 5237

MAL_INI = 1

ARCH_INI = 1

MPP_INI = 1

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2

 

//mpp2修改以下参数

INSTANCE_NAME = mpp2

PORT_NUM  = 5236

MAL_INI = 1

ARCH_INI = 1

MPP_INI = 1

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2

//mpp11修改以下参数

INSTANCE_NAME = mpp11

PORT_NUM  = 5237

MAL_INI = 1

ARCH_INI = 1

MPP_INI = 1

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2

  1. 配置归档配置文件dmarch.ini

vi /dmdata/mpp*/dmarch.ini

//主库mpp1内容

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME

ARCH_DEST = mpp11

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = /dmdata/arch/mpp1

ARCH_FILE_SIZE = 1024

ARCH_SPACE_LIMIT = 5120

//备库mpp11内容

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME

ARCH_DEST = mpp1

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = /dmdata/arch/mpp11

ARCH_FILE_SIZE = 1024

ARCH_SPACE_LIMIT = 5120

//主库mpp2内容

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME

ARCH_DEST = mpp22

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = /dmdata/arch/mpp2

ARCH_FILE_SIZE = 1024

ARCH_SPACE_LIMIT = 5120

//备库mpp22内容

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME

ARCH_DEST = mpp2

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = /dmdata/arch/mpp22

ARCH_FILE_SIZE = 1024

ARCH_SPACE_LIMIT = 5120

  1. 配置dmmal参数文件

//根据需求修改对应参数,MAL_DW_PORT参数和dmmonitor.ini文件内相匹配

vi /dmdata/mpp*/dmmal.ini //主备两库都一致

 

MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔

MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间

[MAL_INST1]

MAL_INST_NAME = mpp1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致

MAL_HOST = 192.168.254.144 #MAL 系统监听 TCP 连接的 IP 地址

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

MAL_INST_HOST = 192.168.254.144 #实例的对外服务 IP 地址

MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致

MAL_DW_PORT = 7436 #实例对应的守护进程监听 TCP 连接的端口

MAL_INST_DW_PORT = 7536 #实例监听守护进程 TCP 连接的端口

 

[MAL_INST2]

MAL_INST_NAME = mpp2 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致

MAL_HOST = 192.168.254.147 #MAL 系统监听 TCP 连接的 IP 地址

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

MAL_INST_HOST = 192.168.254.147 #实例的对外服务 IP 地址

MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致

MAL_DW_PORT = 7436 #实例对应的守护进程监听 TCP 连接的端口

MAL_INST_DW_PORT = 7536 #实例监听守护进程 TCP 连接的端口

 

[MAL_INST3]

MAL_INST_NAME = mpp11 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致

MAL_HOST = 192.168.254.147 #MAL 系统监听 TCP 连接的 IP 地址

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

MAL_INST_HOST = 192.168.254.147 #实例的对外服务 IP 地址

MAL_INST_PORT = 5237 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致

MAL_DW_PORT = 7437 #实例对应的守护进程监听 TCP 连接的端口

MAL_INST_DW_PORT = 7537 #实例监听守护进程 TCP 连接的端口

 

[MAL_INST4]

MAL_INST_NAME = mpp22 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致

MAL_HOST = 192.168.254.144 #MAL 系统监听 TCP 连接的 IP 地址

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

MAL_INST_HOST = 192.168.254.144 #实例的对外服务 IP 地址

MAL_INST_PORT = 5237 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致

MAL_DW_PORT = 7437 #实例对应的守护进程监听 TCP 连接的端口

MAL_INST_DW_PORT = 7537 #实例监听守护进程 TCP 连接的端口

  1. 配置dmmpp.ctl

//首先配置dmmpp.ini再利用dmctlcvt工具转换成.ctl文件,在主库mpp1和mpp2中分别配置ini后转换ctl发送至各自备库

[service_name1]

mpp_seq_no = 0

mpp_inst_name = mpp1

[service_name2]

mpp_seq_no = 1

mpp_inst_name = mpp2

 

./dmctlcvt TYPE=2 SRC=/dmdata/mpp1/dmmpp.ini DEST=/dmdata/mpp1/dmmpp.ctl

 

./dmctlcvt TYPE=2 SRC=/dmdata/mpp2/dmmpp.ini DEST=/dmdata/mpp2/dmmpp.ctl

  1. mount方式启动数据库,修改设置

//mpp1需使用 MPP 类型为LOCAL方式登陆,否则报错

//mpp1下配置

./disql SYSDBA/SYSDBA@localhost:5236#"{mpp_type=local}"

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

SQL> SP_SET_OGUID (112233);

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

SQL> ALTER DATABASE PRIMARY;

 

//mpp11下配置

./disql SYSDBA/SYSDBA@localhost:5237

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

SQL> SP_SET_OGUID (112233);

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

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

SQL>ALTER DATABASE STANDBY;

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

 

//mpp2下配置

./disql SYSDBA/SYSDBA@localhost:5236

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

SQL> SP_SET_OGUID (445566);

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

SQL> ALTER DATABASE PRIMARY;

 

//mpp22下配置

./disql SYSDBA/SYSDBA@localhost:5237

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

SQL> SP_SET_OGUID (445566);

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

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

SQL>ALTER DATABASE STANDBY;

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

34 不使用local登陆方式报错

  1. 配置守护进程dmwatcher.ini

//一般来说,每个单独的实例都是使用一个单独的守护进程守护。比如前面的实时主备和读写分离集群的配置。本例中,由于同一台机器上有不同组的两个实例,我们可以两台机子各自只配置一个守护进程,同时守护两个实例。

vi /dmdata/mpp1/dmwatcher.ini        //根据需求修改相关参数,主备两库一致

[GRP1]

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = MANUAL #自动切换模式

DW_ERROR_TIME = 10 #远程守护进程故障认定时间

INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME = 10 #本地实例故障认定时间

INST_OGUID = 112233 #守护系统唯一 OGUID 值

INST_INI = /dmdata/mpp1/dm.ini #dm.ini 配置文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动

RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

[GRP2]

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = MANUAL #自动切换模式

DW_ERROR_TIME = 10 #远程守护进程故障认定时间

INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME = 10 #本地实例故障认定时间

INST_OGUID = 445566 #守护系统唯一OGUID值

INST_INI = /dmdata/mpp22/dm.ini #dm.ini 配置文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动

RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

 

vi /dmdata/mpp2/dmwatcher.ini        //根据需求修改相关参数,主备两库一致

[GRP1]

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = MANUAL #自动切换模式

DW_ERROR_TIME = 10 #远程守护进程故障认定时间

INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME = 10 #本地实例故障认定时间

INST_OGUID = 112233 #守护系统唯一 OGUID 值

INST_INI = /dmdata/mpp11/dm.ini #dm.ini 配置文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动

RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

[GRP2]

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = MANUAL #自动切换模式

DW_ERROR_TIME = 10 #远程守护进程故障认定时间

INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME = 10 #本地实例故障认定时间

INST_OGUID = 445566 #守护系统唯一OGUID值

INST_INI = /dmdata/mpp2/dm.ini #dm.ini 配置文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动

RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

 

//配置完成后,可以进行注册守护进程服务的服务,然后分别启动mpp1,mpp2的守护进程,守护进程启动后,进入Startup状态,此时实例都处于Mount状态。守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将本地实例open,并切换为open状态。

./dm_service_installer.sh -t dmwatcher -p mpp1 -watcher_ini /dmdata/mpp1/dmwatcher.ini

./dm_service_installer.sh -t dmwatcher -p mpp2 -watcher_ini /dmdata/mpp2/dmwatcher.ini

./DmWatcherServicempp1 start

./DmWatcherServicempp2 start

 

 

 

  1. 配置监视器文件

//在一个集群中,确认监视器只有唯一一个且在集群外的机器上部署,称为仲裁机器,非确认监视器可以有很多个,dmmonitor.ini为确认监视器,dmmonitor0.ini为非确认监视器

// MON_DW_CONFIRM的值为0时为非确认监视器

// MON_LOG_PATH监视器日志文件存放路径

// MON_LOG_INTERVAL每隔 60 s 定时记录系统信息到日志文件

//MON_LOG_FILE_SIZE每个日志文件最大 32 MB

// MON_LOG_SPACE_LIMIT不限定日志文件总占用空间

// MON_INST_OGUID需与dmwatcher.ini一致

// MON_DW_IP与 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT对应

cd /home/dmdba/dmdbms/bin

vi /home/dmdba/dmdbms/bin/dmmonitor0.ini

 

MON_DW_CONFIRM = 0

MON_LOG_PATH = /home/dmdba/dmdbms/log

MON_LOG_INTERVAL = 60

MON_LOG_FILE_SIZE = 32

MON_LOG_SPACE_LIMIT = 0

[GRP1]

MON_INST_OGUID = 112233

MON_DW_IP = 192.168.254.144:7436

MON_DW_IP = 192.168.254.147:7437

[GRP2]

MON_INST_OGUID = 445566

MON_DW_IP = 192.168.254.147:7436

MON_DW_IP = 192.168.254.144:7437

./dmmonitor /home/dmdba/dmdbms/bin/dmmonitor0.ini        //添加后执行此指令启动监控器,并在监控器下输入show查看集群状态

 

//手动切换主备

login

switchover 组名 .切换的实例名

35 监视器启动成功

36 MPP集群验证

 

  1. 配置Sql日志

//所有节点都需要修改,FILE_PATH按需求修改

vi /dmdata/mpp*/sqllog.ini

 

BUF_TOTAL_SIZE = 10240

BUF_SIZE = 1024

BUF_KEEP_CNT = 6

[SLOG_ALL]

FILE_PATH = ../log

PART_STOR = 1

SWITCH_MODE = 2

SWITCH_LIMIT = 512

ASYNC_FLUSH = 1

FILE_NUM = 5

ITEMS = 0

SQL_TRACE_MASK = 2:3:25

MIN_EXEC_TIME = 1500

USER_MODE = 0

USERS =

  1. 主备集群重启

//优化了dm.ini参数或者需要重启都需要严格按照此顺序

关闭确认监视器:systemctl stop DmMonitorServiceconfirm

关闭备库守护进程:systemctl stop DmWatcherServicerw

关闭主库守护进程:systemctl stop DmWatcherServicerw

关闭主库实例:systemctl stop DmServicerw

关闭备库实例:systemctl stop DmServicerw

启动备库实例:systemctl start DmServicerw

启动主库实例:systemctl start DmServicerw

启动主库守护进程:systemctl start DmWatcherServicerw

启动备库守护进程:systemctl start DmWatcherServicerw

启动确认监视器:systemctl start DmMonitorServiceconfirm

 

 

 

 

技术社区地址:https://eco.dameng.com

posted @   zzzzz887  阅读(178)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示