将1主1备,变成1主2备。
如果是生产环境,建议将心跳ip与业务ip隔离使用不同的网段网卡
一、环境规划
| 主库 | 备库 | 监视器 | 扩容新增备库 | |
|---|---|---|---|---|
| 业务ip | 192.168.100.147 | 192.168.100.148 | 192.168.100.149 | |
| 心跳ip | 192.168.100.147 | 192.168.100.148 | 192.168.100.149 | |
| 实例名 | dmpri | dmstb | dmstb2 | |
| 实例端口 | 5236 | 5236 | 5236 | |
| MAL端口 | 5336 | 5336 | 5336 | |
| MAL守护进程端口 | 5436 | 5436 | 5436 | |
| 守护进程端口 | 5536 | 5536 | 5536 | |
| OGUID | 45331 | 45331 | 45331 | |
| 守护组 | GRP1 | GRP1 | GRP1 | |
| 安装目录 | /DM8/dmapp | /DM8/dmapp | /DM8/dmapp | |
| 实例目录 | /DM8/dmdata | /DM8/dmdata | /DM8/dmdata | |
| 归档上限 | 51200 | 51200 | 51200 |
二、软件部署
在新环境上部署达梦软件
步骤略
三、搭建扩容备库
var_dm_pri_name=dmpri #主库
var_dm_stb_name1=dmstb #原备库
var_dm_stb_name2=dmstb2 #新增备库
3.1 原环境做全备
#drman备份,可以是主库,也可以是备库
BACKUP DATABASE BACKUPSET '/DM8/dmbak/${var_dm_pri_name}';
#备份完拷贝到新机器里
scp -r /DM8/dmbak/${var_dm_pri_name}/* dmdba@192.168.100.149:/DM8/dmbak/${var_dm_stb_name2}
#如果有最近的全备也可以不做备份
3.2 新库配置
#初始化备库实例
dminit PATH=/DM8/dmdata/ DB_NAME=${var_dm_stb_name2} INSTANCE_NAME=${var_dm_stb_name2} PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 CHARSET=1
#恢复数据
dmrman CTLSTMT="RESTORE DATABASE '/DM8/dmdata/${var_dm_stb_name2}/dm.ini' FROM BACKUPSET '/DM8/dmbak/${var_dm_stb_name2}'"
dmrman CTLSTMT="RECOVER DATABASE '/DM8/dmdata/${var_dm_stb_name2}/dm.ini' FROM BACKUPSET '/DM8/dmbak/${var_dm_stb_name2}'"
dmrman CTLSTMT="RECOVER DATABASE '/DM8/dmdata/${var_dm_stb_name2}/dm.ini' UPDATE DB_MAGIC"
#编辑dmarch.ini
vi /DM8/dmdata/${var_dm_stb_name2}/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /DM8/dmarc/${var_dm_stb_name2}
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = ${var_dm_pri_name}
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = ${var_dm_stb_name1}
#编辑dm.ini,修改以下4个参数的值
vi /DM8/dmdata/${var_dm_stb_name2}/dm.ini
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
#编辑dmmal.ini
vi /DM8/dmdata/${var_dm_stb_name2}/dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
#MAL_TEMP_PATH = /DM8/dmdata/malpath #临时文件目录,默认放在temp.dbf
MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩
[MAL_INST1]
MAL_INST_NAME = ${var_dm_pri_name} #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.100.147 #MAL 系统监听 TCP 连接的 IP 地址 如192.168.1.1
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.100.147 #实例的对外服务 IP 地址 如172.16.1.1
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = ${var_dm_stb_name1}
MAL_HOST = 192.168.100.148 #192.168.1.2
MAL_PORT = 5336
MAL_INST_HOST = 192.168.100.148 #172.16.1.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
[MAL_INST3]
MAL_INST_NAME = ${var_dm_stb_name2}
MAL_HOST = 192.168.100.149 #192.168.1.2
MAL_PORT = 5336
MAL_INST_HOST = 192.168.100.149 #172.16.1.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
#编辑dmwatcher.ini
vi /DM8/dmdata/${var_dm_stb_name2}/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /DM8/dmdata/${var_dm_stb_name2}/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /DM8/dmapp/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
#切换到root注册服务
/DM8/dmapp/script/root/dm_service_installer.sh -t dmserver -p ${var_dm_stb_name2} -dm_ini /DM8/dmdata/${var_dm_stb_name2}/dm.ini
/DM8/dmapp/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /DM8/dmdata/${var_dm_stb_name2}/dmwatcher.ini
#启动新备库
DmService${var_dm_stb_name2} start mount
disql SYSDBA/SYSDBA@192.168.100.149:5236
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
select OGUID from v$instance;
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.3 收尾工作
#dmpri & dmstb 执行
SF_MAL_CONFIG(1,0);
SF_MAL_INST_ADD('MAL_INST3','${var_dm_stb_name2}','192.168.100.149',5336,'192.168.100.149',5236,5436,0,5536);
SF_MAL_CONFIG_APPLY();
SF_MAL_CONFIG(0,0);
ALTER DATABASE ADD ARCHIVELOG 'DEST= ${var_dm_stb_name2}, TYPE= REALTIME';
#dmpri & dmstb & monit 均对monit Watcher服务器配置追加
echo 'MON_DW_IP = 192.168.100.149:5436 #dmstb2' >> /DM8/dmapp/bin/dmmonitor.ini
echo 'MON_DW_IP = 192.168.100.149:5436 #dmstb2' >> /DM8/dmapp/bin/dmmonitor_manual.ini
#dmpri & dmstb上重启monit Water服务
/DM8/dmapp/bin/DmWatcherServiceWatcher restart
#dmpri
scp -r /DM8/dmapp/bin/dmmonitor.ini dmdba@192.168.100.149:/DM8/dmapp/bin
scp -r /DM8/dmapp/bin/dmmonitor_manual.ini dmdba@192.168.100.149:/DM8/dmapp/bin
#dmstb2
/DM8/dmapp/bin/DmWatcherServiceWatcher start
#Monit服务器上,重启Monit服务
/DM8/dmapp/bin/DmMonitorServiceMonitor restart
3.4 检查
[dmdba@lhq7.9os3:/DM8/dmdata/dmstb2]$ cd /DM8/dmapp/bin
[dmdba@lhq7.9os3:/DM8/dmapp/bin]$ dmmonitor dmmonitor_manual.ini
[monitor] 2024-12-16 19:07:31: DMMONITOR[4.0] V8
[monitor] 2024-12-16 19:07:32: DMMONITOR[4.0] IS READY.
[monitor] 2024-12-16 19:07:32:
#-----------------------------------------------------------------------------------------------#
GET MONITOR CONNECT INFO FROM DMWATCHER(DMSTB), THE FIRST LINE IS SELF INFO.
DW_CONN_TIME MON_CONFIRM MID MON_IP MON_VERSION
2024-12-16 19:07:32 FALSE 1772098120 ::ffff:192.168.100.149 DMMONITOR[4.0] V8
#-----------------------------------------------------------------------------------------------#
[monitor] 2024-12-16 19:07:32: 收到守护进程(DMSTB)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2024-12-16 19:07:32 OPEN OK DMSTB OPEN PRIMARY VALID 10 46578 46578
[monitor] 2024-12-16 19:07:32: 收到守护进程(DMPRI)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2024-12-16 19:07:32 OPEN OK DMPRI OPEN STANDBY VALID 10 46578 46578
[monitor] 2024-12-16 19:07:32: 收到守护进程(DMSTB2)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2024-12-16 19:07:32 OPEN OK DMSTB2 OPEN STANDBY VALID 10 46578 46578
tip
[monitor] 2024-12-16 19:07:41: [!!! 提示:本监视器不是确认监视器,在故障自动切换模式下如果发生主库故障,本监视器无法执行自动接管 !!!]
[monitor] 2024-12-16 19:07:41: 实例DMSTB[PRIMARY, OPEN, ISTAT_SAME:TRUE]不可加入其他实例,守护进程状态:OPEN,Open记录状态:VALID
[monitor] 2024-12-16 19:07:41: 实例DMSTB[PRIMARY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2024-12-16 19:07:41: 实例DMSTB[PRIMARY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2024-12-16 19:07:41: 实例DMPRI[STANDBY, OPEN, ISTAT_SAME:TRUE]可加入实例DMSTB[PRIMARY, OPEN, ISTAT_SAME:TRUE]
[monitor] 2024-12-16 19:07:41: 实例DMPRI[STANDBY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2024-12-16 19:07:41: 实例DMPRI[STANDBY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2024-12-16 19:07:41: 实例DMSTB2[STANDBY, OPEN, ISTAT_SAME:TRUE]可加入实例DMSTB[PRIMARY, OPEN, ISTAT_SAME:TRUE]
[monitor] 2024-12-16 19:07:41: 实例DMSTB2[STANDBY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2024-12-16 19:07:41: 实例DMSTB2[STANDBY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2024-12-16 19:07:41: 组(GRP1)当前活动实例运行正常
[monitor] 2024-12-16 19:07:41: 所有组中的活动实例运行正常!
3.5切换演练
choose switchover GRP1
Can choose one of the following instances to do switchover:
1: DMPRI
2: DMSTB2
switchover GRP1.DMPRI
此操作需谨慎, 将会导致主库发生切换, 是否继续使用GRP1.DMPRI执行SWITCHOVER操作(YES/NO/Y/N)?
yes
[monitor] 2024-12-16 19:38:29: 开始切换实例DMPRI
[monitor] 2024-12-16 19:38:29: 通知守护进程DMSTB切换SWITCHOVER状态
[monitor] 2024-12-16 19:38:29: 守护进程(DMSTB)状态切换 [OPEN-->SWITCHOVER]
[monitor] 2024-12-16 19:38:29: 切换守护进程DMSTB为SWITCHOVER状态成功
[monitor] 2024-12-16 19:38:29: 通知守护进程DMPRI切换SWITCHOVER状态
[monitor] 2024-12-16 19:38:29: 守护进程(DMPRI)状态切换 [OPEN-->SWITCHOVER]
[monitor] 2024-12-16 19:38:29: 切换守护进程DMPRI为SWITCHOVER状态成功
[monitor] 2024-12-16 19:38:29: 实例DMSTB开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor] 2024-12-16 19:38:29: 实例DMSTB执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor] 2024-12-16 19:38:29: 实例DMPRI开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor] 2024-12-16 19:38:29: 实例DMPRI执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor] 2024-12-16 19:38:29: 实例DMSTB开始执行ALTER DATABASE MOUNT语句
[monitor] 2024-12-16 19:38:29: 实例DMSTB执行ALTER DATABASE MOUNT语句成功
[monitor] 2024-12-16 19:38:29: 实例DMPRI开始执行SP_APPLY_KEEP_PKG()语句
[monitor] 2024-12-16 19:38:29: 实例DMPRI执行SP_APPLY_KEEP_PKG()语句成功
[monitor] 2024-12-16 19:38:29: 实例DMPRI开始执行ALTER DATABASE MOUNT语句
[monitor] 2024-12-16 19:38:30: 实例DMPRI执行ALTER DATABASE MOUNT语句成功
[monitor] 2024-12-16 19:38:30: 实例DMSTB开始执行ALTER DATABASE STANDBY语句
[monitor] 2024-12-16 19:38:30: 实例DMSTB执行ALTER DATABASE STANDBY语句成功
[monitor] 2024-12-16 19:38:30: 实例DMPRI开始执行ALTER DATABASE PRIMARY语句
[monitor] 2024-12-16 19:38:30: 实例DMPRI执行ALTER DATABASE PRIMARY语句成功
[monitor] 2024-12-16 19:38:30: 通知实例DMPRI修改所有归档状态无效
[monitor] 2024-12-16 19:38:30: 修改所有实例归档为无效状态成功
[monitor] 2024-12-16 19:38:30: 实例DMSTB开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2024-12-16 19:38:30: 实例DMSTB执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2024-12-16 19:38:30: 实例DMPRI开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2024-12-16 19:38:30: 实例DMPRI执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2024-12-16 19:38:30: 实例DMSTB开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor] 2024-12-16 19:38:30: 实例DMSTB执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor] 2024-12-16 19:38:30: 实例DMPRI开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor] 2024-12-16 19:38:30: 实例DMPRI执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor] 2024-12-16 19:38:30: 通知守护进程DMSTB切换OPEN状态
[monitor] 2024-12-16 19:38:30: 守护进程(DMSTB)状态切换 [SWITCHOVER-->OPEN]
[monitor] 2024-12-16 19:38:30: 切换守护进程DMSTB为OPEN状态成功
[monitor] 2024-12-16 19:38:30: 通知守护进程DMPRI切换OPEN状态
[monitor] 2024-12-16 19:38:30: 守护进程(DMPRI)状态切换 [SWITCHOVER-->OPEN]
[monitor] 2024-12-16 19:38:30: 切换守护进程DMPRI为OPEN状态成功
[monitor] 2024-12-16 19:38:30: 通知组(GRP1)的守护进程执行清理操作
[monitor] 2024-12-16 19:38:30: 清理守护进程(DMPRI)请求成功
[monitor] 2024-12-16 19:38:30: 清理守护进程(DMSTB)请求成功
2024-12-16 19:38:30
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
[monitor] 2024-12-16 19:38:30: 清理守护进程(DMSTB2)请求成功
GRP1 45331 FALSE AUTO FALSE
[monitor] 2024-12-16 19:38:30: 实例DMPRI切换成功
tip
[monitor] 2024-12-16 19:39:30: [!!! 提示:本监视器不是确认监视器,在故障自动切换模式下如果发生主库故障,本监视器无法执行自动接管 !!!]
[monitor] 2024-12-16 19:39:30: 实例DMPRI[PRIMARY, OPEN, ISTAT_SAME:TRUE]不可加入其他实例,守护进程状态:OPEN,Open记录状态:VALID
[monitor] 2024-12-16 19:39:30: 实例DMPRI[PRIMARY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2024-12-16 19:39:30: 实例DMPRI[PRIMARY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2024-12-16 19:39:30: 实例DMSTB[STANDBY, OPEN, ISTAT_SAME:TRUE]可加入实例DMPRI[PRIMARY, OPEN, ISTAT_SAME:TRUE]
[monitor] 2024-12-16 19:39:30: 实例DMSTB[STANDBY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2024-12-16 19:39:30: 实例DMSTB[STANDBY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2024-12-16 19:39:30: 实例DMSTB2[STANDBY, OPEN, ISTAT_SAME:TRUE]可加入实例DMPRI[PRIMARY, OPEN, ISTAT_SAME:TRUE]
[monitor] 2024-12-16 19:39:30: 实例DMSTB2[STANDBY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2024-12-16 19:39:30: 实例DMSTB2[STANDBY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2024-12-16 19:39:30: 组(GRP1)当前活动实例运行正常
[monitor] 2024-12-16 19:39:30: 所有组中的活动实例运行正常!
最后修改时间:2024-12-16 23:26:33
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




