文章目录
mpp主备集群搭建
规划
机器名 | MAL_INST_HOST | MAL_HOST | 主库实例名 | 备库实例名 |
---|---|---|---|---|
A机器 | 192.168.56.11 | 172.16.1.11 | EP01 | EP12 |
B机器 | 192.168.56.12 | 172.16.1.12 | EP02 | EP11 |
C机器 | 192.168.56.13 | 172.16.1.3 | 监视器 |
端口规划
实例名 | PORT_NUM | MAL_INST_HOST | MAL_INST_DW_PORT | MAL_HOST | MAL_PORT | MAL_DW_PROT | MPP_SEQNO |
---|---|---|---|---|---|---|---|
EP01 | 5236 | 192.168.56.11 | 5243 | 172.16.1.11 | 5337 | 5253 | 0 |
EP02 | 5236 | 192.168.56.12 | 5243 | 172.16.1.12 | 5337 | 5253 | 1 |
EP11 | 5237 | 192.168.56.12 | 5244 | 172.16.1.12 | 5338 | 5254 | 对应主库EP01 |
EP12 | 5237 | 192.168.56.11 | 5244 | 172.16.1.11 | 5338 | 5254 | 对应主库EP02 |
一.数据准备
1.初始化
A 机器上初始化主库EP01
/home/dmdba/dmdbms/bin/dminit PATH=/home/dmdba/dmdbms/data/ DB_NAME=EP01 INSTANCE_NAME=EP01 PORT_NUM=5236
初始化备库EP12
/home/dmdba/dmdbms/bin/dminit PATH=/home/dmdba/dmdbms/data/ DB_NAME=EP12 INSTANCE_NAME=EP12 PORT_NUM=5237
B 机器上初始化主库EP02:
/home/dmdba/dmdbms/bin/dminit PATH=/home/dmdba/dmdbms/data/ DB_NAME=EP02 INSTANCE_NAME=EP02 PORT_NUM=5236
初始化备库EP11
/home/dmdba/dmdbms/bin/dminit PATH=/home/dmdba/dmdbms/data/ DB_NAME=EP11 INSTANCE_NAME=EP11 PORT_NUM=5237
开启服务:
开启主库EP01
/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/EP01/dm.ini
开启备库EP12
/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/EP12/dm.ini
开启主库EP02
/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/EP02/dm.ini
开启主库EP11
/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/EP11/dm.ini
然后exit退出
2.脱机备份
给A机器上EP01进行备份 文件名backup20220816
/home/dmdba/dmdbms/bin/dmrman ctlstmt="backup database '/home/dmdba/dmdbms/data/EP01/dm.ini' full to backup20220816 backupset '/home/dmdba/dmdbms/data/EP01/bak/backup20220816'"
给B机器上EP02进行备份 文件名backupfile
/home/dmdba/dmdbms/bin/dmrman ctlstmt="backup database '/home/dmdba/dmdbms/data/EP02/dm.ini' full to backupfile backupset '/home/dmdba/dmdbms/data/EP02/bak/backupfile'"
拷贝到备库
A至B
scp -r /home/dmdba/dmdbms/data/EP01/bak/backup20220816/ 192.168.56.12:/home/dmdba/dmdbms/data/EP11/bak
B至A
scp -r /home/dmdba/dmdbms/data/EP02/bak/backupfile/ 192.168.56.11:/home/dmdba/dmdbms/data/EP12/bak
还原
在B机器上还原A机器上的主库EP01
/home/dmdba/dmdbms/bin/dmrman ctlstmt="restore database '/home/dmdba/dmdbms/data/EP11/dm.ini' from backupset '/home/dmdba/dmdbms/data/EP11/bak/backup20220816'"
在A机器上还原B机器上的主库EP02
/home/dmdba/dmdbms/bin/dmrman ctlstmt="restore database '/home/dmdba/dmdbms/data/EP12/dm.ini' from backupset '/home/dmdba/dmdbms/data/EP12/bak/backupfile'"
恢复
在B机器上恢复A机器上的主库EP01
/home/dmdba/dmdbms/bin/dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/EP11/dm.ini' from backupset '/home/dmdba/dmdbms/data/EP11/bak/backup20220816'"
在A机器上恢复B机器上的主库EP02
/home/dmdba/dmdbms/bin/dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/EP12/dm.ini' from backupset '/home/dmdba/dmdbms/data/EP12/bak/backupfile'"
更新DB_MAGIC
在B机器上还原A机器上的主库EP01
/home/dmdba/dmdbms/bin/dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/EP11/dm.ini' update db_magic"
在A机器上还原B机器上的主库EP02
/home/dmdba/dmdbms/bin/dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/EP12/dm.ini' update db_magic"
二.DM MPP配置
1.dm.ini配置
EP01,EP02,EP11,EP12按照各自的实例端口规划进行配置
vi /home/dmdba/dmdbms/data/EP01/dm.ini
INSTANCE_NAME = 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次的日志
检查:
grep -E 'INSTANCE_NAME|PORT_NUM|DW_INACTIVE_INTERVAL|ALTER_MODE_STATUS|MAL_INI|ARCH_INI|MPP_INI|RLOG_SEND_APPLY_MON' /home/dmdba/dmdbms/data/EP*/dm.ini
2.dmmal.ini配置
vi /home/dmdba/dmdbms/data/EP01/dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = EP01 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 172.16.1.11 #MAL系统监听TCP连接的IP地址
MAL_PORT = 5337 #MAL 系统监听TCP连接的端口
MAL_INST_HOST = 192.168.56.11 #实例的对外服务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 = EP02
MAL_HOST = 172.16.1.12
MAL_PORT = 5337
MAL_INST_HOST = 192.168.56.12
MAL_INST_PORT = 5236
MAL_DW_PORT = 5253
MAL_INST_DW_PORT = 5243
[MAL_INST3]
MAL_INST_NAME = EP11
MAL_HOST = 172.16.1.12
MAL_PORT = 5338
MAL_INST_HOST = 192.168.1.12
MAL_INST_PORT = 5237
MAL_DW_PORT = 5254
MAL_INST_DW_PORT = 5244
[MAL_INST4]
MAL_INST_NAME = EP12
MAL_HOST = 172.16.1.11
MAL_PORT = 5338
MAL_INST_HOST = 192.168.56.11
MAL_INST_PORT = 5237
MAL_DW_PORT = 5254
MAL_INST_DW_PORT = 5244
将文件拷贝到实例EP12中
cp /home/dmdba/dmdbms/data/EP01/dmmal.ini /home/dmdba/dmdbms/data/EP12/dmmal.ini
将文件传输到实例EP02中
scp /home/dmdba/dmdbms/data/EP01/dmmal.ini 192.168.56.12:/home/dmdba/dmdbms/data/EP02/dmmal.ini
将文件传输到实例EP11中
scp /home/dmdba/dmdbms/data/EP01/dmmal.ini 192.168.56.12:/home/dmdba/dmdbms/data/EP11/dmmal.ini
3.dmarch.ini配置
vi /home/dmdba/dmdbms/data/EP01/dmarch.ini
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = EP11 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/dmdbms/data/EP01/bak #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 1024 #单位 Mb,0 表示无限制,范围 1024~4294967294M
注意更改实时归档目标名以及本地归档存放路径
cd /home/dmdba/dmdbms/data/EP12/
cd /home/dmdba/dmdbms/data/EP02/
cd /home/dmdba/dmdbms/data/EP11/
4.dmmpp.ctl配置
dmmpp.ctl是二进制文件,由dmmpp.ini文本通过dmctlcvt工具转换而来先配置dmmpp.ini
vi /home/dmdba/dmdbms/data/EP01/dmmpp.ini
[service_name1]
mpp_seq_no = 0
mpp_inst_name = EP01
[service_name2]
mpp_seq_no = 1
mpp_inst_name = EP02
转换dmmpp.ini为dmmpp.ctl(bin目录下):
/home/dmdba/dmdbms/bin/dmctlcvt TYPE=2 SRC=/home/dmdba/dmdbms/data/EP01/dmmpp.ini DEST=/home/dmdba/dmdbms/data/EP01/dmmpp.ctl
将文件拷贝到实例EP12中
cp /home/dmdba/dmdbms/data/EP01/dmmpp.ctl /home/dmdba/dmdbms/data/EP12/dmmpp.ctl
将文件传输到实例EP02中
scp /home/dmdba/dmdbms/data/EP01/dmmpp.ctl 192.168.56.12:/home/dmdba/dmdbms/data/EP02/dmmpp.ctl
将文件传输到实例EP11中
scp /home/dmdba/dmdbms/data/EP01/dmmpp.ctl 192.168.56.12:/home/dmdba/dmdbms/data/EP11/dmmpp.ctl
5.配置主库EP01
以mount方式启动主库
/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/EP01/dm.ini mount
配置OGUID
/home/dmdba/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.56.11:5236#"{mpp_type=local}"
Sql下执行:
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
sp_set_oguid(15301);
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
alter database primary;
6.配置备库EP12
以mount方式启动备库
/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/EP12/dm.ini mount
配置OGUID
/home/dmdba/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.56.11:5237#"{mpp_type=local}"
Sql下执行:
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
sp_set_oguid(15302);
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
alter database standby;
7.配置主库EP02
以mount方式启动主库
/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/EP02/dm.ini mount
配置OGUID
/home/dmdba/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.56.12:5236#"{mpp_type=local}"
Sql下执行:
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
sp_set_oguid(15302);
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
alter database primary;
8.配置备库EP11
以mount方式启动备库
/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/EP11/dm.ini mount
配置OGUID
/home/dmdba/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.56.12:5237#"{mpp_type=local}"
Sql下执行:
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
sp_set_oguid(15301);
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
alter database standby;
9.守护进程配置
在A机器上配置
/home/dmdba/dmdbms/data/EP01/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 15301 #守护系统唯一OGUID值
INST_INI = /home/dmdba/dmdbms/data/EP01/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 = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 15302 #守护系统唯一OGUID值
INST_INI = /home/dmdba/dmdbms/data/EP12/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
将文件拷贝到EP11中:
scp /home/dmdba/dmdbms/data/EP01/dmwatcher.ini @192.168.56.12:/home/dmdba/dmdbms/data/EP11
在B机器上配置
/home/dmdba/dmdbms/data/EP02/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 15301
INST_INI = /home/dmdba/dmdbms/data/EP11/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 = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 15302
INST_INI = /home/dmdba/dmdbms/data/EP02/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
将文件拷贝到EP12中:
scp /home/dmdba/dmdbms/data/EP02/dmwatcher.ini @192.168.56.11:/home/dmdba/dmdbms/data/EP12
10.启动守护进程
自动将实例open
A:
/home/dmdba/dmdbms/bin/dmwatcher /home/dmdba/dmdbms/data/EP01/dmwatcher.ini
B:
/home/dmdba/dmdbms/bin/dmwatcher /home/dmdba/dmdbms/data/EP02/dmwatcher.ini
11.配置监视器
vi /home/dmdba/dmdbms/data/dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /home/dmdba/dmdbms/data/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 15301 #组 GRP1 的唯一 OGUID 值 #以下配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 172.16.1.11:5253
MON_DW_IP = 172.16.1.12:5254
[GRP2]
MON_INST_OGUID = 15302 #组 GRP2 的唯一 OGUID 值 #以下配置为监视器到组 GRP2 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 172.16.1.12:5253
MON_DW_IP = 172.16.1.11:5254
启动监视器
/home/dmdba/dmdbms/bin/dmmonitor /home/dmdba/dmdbms/data/dmmonitor.ini
12.注册服务
A
注册主库实例EP01服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/data/EP01/dm.ini -m mount -p EP01
注册主库EP01守护进程服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /home/dmdba/dmdbms/data/EP01/dmwatcher.ini -p EP01
注册备库实例EP12服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/data/EP12/dm.ini -m mount -p EP12
注册备库EP12守护进程服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /home/dmdba/dmdbms/data/EP12/dmwatcher.ini -p EP12
B
注册主库实例EP02服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/data/EP02/dm.ini -m mount -p EP02
注册主库EP02守护进程服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /home/dmdba/dmdbms/data/EP02/dmwatcher.ini -p EP02
注册备库实例EP11服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/data/EP11/dm.ini -m mount -p EP11
注册备库EP11守护进程服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /home/dmdba/dmdbms/data/EP11/dmwatcher.ini -p EP11
C监视器
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -monitor_ini /home/dmdba/dmdbms/data/dmmonitor.ini -p EP
三.验证集群
GRP1验证
连接主库EP01的disql
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA@192.168.56.11:5236
SQL> create table grp1(id int);
SQL> insert into grp1 values(1);
SQL> commit;
连接备库EP11的disql
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA@192.168.56.12:5237
select * from grp1;
GRP2验证
连接主库EP02的disql
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA@192.168.56.12:5236
SQL> create table grp2(id int);
SQL> insert into grp2 values(1);
SQL> commit;
连接备库EP12的disql
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA@192.168.56.11:5237
select * from grp;
更多达梦相关知识:https://eco.dameng.com