连接当前主库 5236:
/opt/dmdbms/dmhome/bin/disql SYSDBA/<你的密码>@127.0.0.1:5236
使用表 T_DW_TEST ,直接插入:
INSERT INTO T_DW_TEST VALUES(10, 'BEFORE_SWITCH_01_PRIMARY');
COMMIT;
SELECT * FROM T_DW_TEST;
EXIT;
连接当前备库 5237 查询,确认同步正常:
/opt/dmdbms/dmhome/bin/disql SYSDBA/<你的密码>@127.0.0.1:5237
SELECT * FROM T_DW_TEST;
EXIT;
启动非确认监视器:
/opt/dmdbms/dmhome/bin/dmmonitor /opt/dmdbms/dmhome/bin/dmmonitor_manual.ini
在监视器中执行:
show global info
tip
login
登录后执行:
choose switchover GRP1
若返回 GRP1_RT_02 可切换,则执行:
switchover GRP1.GRP1_RT_02
如果只有一个守护组、一个备库,文档允许省略组名或库名;但这里建议显式写完整,避免误操作。 choose switchover 会选出允许切换为 PRIMARY 的备库列表,随后 switchover [group_name[.]] [db_name] 执行切换。
继续在监视器中执行:
show global info
tip
show arch send info GRP1_RT_01
期望结果变成:
GRP1_RT_02 PRIMARY
GRP1_RT_01 STANDBY
这里 show arch send info GRP1_RT_01 是因为切换后 GRP1_RT_01 成了新备库,需要看新主库到它的归档同步状态。该命令用于显示源库到指定备库的日志发送信息,包含 MAL STATUS、ARCH STATUS 等字段。
连接新主库 5237:
/opt/dmdbms/dmhome/bin/disql SYSDBA/<你的密码>@127.0.0.1:5237
INSERT INTO T_DW_TEST VALUES(11, 'AFTER_SWITCH_02_PRIMARY');
COMMIT;
SELECT * FROM T_DW_TEST;
EXIT;
连接新备库 5236:
/opt/dmdbms/dmhome/bin/disql SYSDBA/<你的密码>@127.0.0.1:5236
SELECT * FROM T_DW_TEST;
EXIT;
能查到 AFTER_SWITCH_02_PRIMARY,说明手动切换后,新主到新备同步正常。
监视器中执行:
show global info
tip
login
choose switchover GRP1
switchover GRP1.GRP1_RT_01
show global info
tip
show arch send info GRP1_RT_02
期望恢复为:
GRP1_RT_01 PRIMARY
GRP1_RT_02 STANDBY
这里测试的是主库故障后,备库自动接管为主库。注意这不是 switchover,而是故障场景下的自动 takeover。DM故障自动切换模式下,主库故障后,确认监视器会捕获故障信息,自动选择可接管备库并通知其接管,无需用户手动执行 takeover。
另建一个确认监视器配置文件:
cd /opt/dmdbms/dmhome/bin
cp dmmonitor_manual.ini dmmonitor_confirm.ini
vi dmmonitor_confirm.ini
内容按照现有文件只改确认模式和日志目录:
MON_DW_CONFIRM = 1
MON_LOG_PATH = /opt/dmdbms/data/monitor_confirm_log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 512
MON_LOG_SPACE_LIMIT = 2048
[GRP1]
MON_INST_OGUID = 45331
MON_DW_IP = 192.168.200.192:5436
MON_DW_IP = 192.168.200.192:5437
MON_DW_IP 的端口仍然用环境中的 MAL 守护进程端口:主库 5436、备库 5437。MON_DW_CONFIRM=0 是普通监视器,MON_DW_CONFIRM=1 是确认监视器,并且故障自动切换模式下必须配置确认监视器。
创建日志目录:
mkdir -p /opt/dmdbms/data/monitor_confirm_log
/opt/dmdbms/dmhome/bin/dmmonitor /opt/dmdbms/dmhome/bin/dmmonitor_confirm.ini
进入后检查:
show global info
show
tip
show monitor GRP1.GRP1_RT_01
show monitor GRP1.GRP1_RT_02
show arch send info GRP1_RT_02
重点确认:
MON_CONFIRM TRUE
MODE AUTO
GRP1_RT_01 PRIMARY Open/OK
GRP1_RT_02 STANDBY Open/OK
ARCH STATUS VALID
官方文档给出的 show global info 字段中,MON_CONFIRM 表示监视器是否确认模式,MODE 表示当前切换模式,IMODE 表示数据库模式,ISTATUS 表示数据库状态。
连接当前主库 5236:
/opt/dmdbms/dmhome/bin/disql SYSDBA/<你的密码>@127.0.0.1:5236
INSERT INTO T_DW_TEST VALUES(20, 'BEFORE_AUTO_TAKEOVER_01_PRIMARY');
COMMIT;
SELECT * FROM T_DW_TEST;
EXIT;
连接备库 5237:
/opt/dmdbms/dmhome/bin/disql SYSDBA/<你的密码>@127.0.0.1:5237
SELECT * FROM T_DW_TEST;
EXIT;
现在的环境是单机双实例,所以不能通过“整机宕机”验证真正的物理主机高可用;一旦这台机器宕机,主库、备库和监视器都会一起不可用。
在实验环境中,可以模拟 GRP1_RT_01 这一侧不可用。另开一个 shell,先找主库 watcher 和主库 dmserver 进程:
ps -ef | grep -E "dmwatcher.*/opt/dmdbms/data/DAMENG/dmwatcher.ini|dmserver.*/opt/dmdbms/data/DAMENG/dm.ini" | grep -v grep
确认是 GRP1_RT_01 对应的 /opt/dmdbms/data/DAMENG 路径后,执行:
kill -9 <GRP1_RT_01_watcher_pid> <GRP1_RT_01_dmserver_pid>
回到确认监视器窗口,观察输出,或反复执行:
show global info
tip
show arch send info GRP1_RT_01
我的DW_ERROR_TIME 和 INST_ERROR_TIME 都配置为 20,所以故障判定不会是瞬时的。
自动接管成功后,预期状态应变为:
GRP1_RT_02 PRIMARY
GRP1_RT_01 Error / Shutdown / Startup
也就是说,5237 成为新主库。主库故障、备库接管流程会通知备库 Mount、切换为 PRIMARY、将新主库 Open,并将守护进程切换回 Open 状态。
连接 5237:
/opt/dmdbms/dmhome/bin/disql SYSDBA/<你的密码>@127.0.0.1:5237
INSERT INTO T_DW_TEST VALUES(21, 'AFTER_AUTO_TAKEOVER_02_PRIMARY');
COMMIT;
SELECT * FROM T_DW_TEST;
EXIT;
此时 5236 被模拟故障杀掉,先不要强行打开它。
重新启动原主库 watcher:
/opt/dmdbms/dmhome/bin/DmWatcherServiceGRP1_RT_01 start
因为配置了 INST_AUTO_RESTART=1,实例应由 watcher 自动拉起;守护进程监控实例,超过 INST_ERROR_TIME 未收到实例消息会认定实例故障,若配置自动重启则会拉起实例。
在确认监视器中检查:
show global info
show
tip
check recover GRP1_RT_01
show arch send info GRP1_RT_01
期望最终状态:
GRP1_RT_02 PRIMARY
GRP1_RT_01 STANDBY
ARCH STATUS VALID
主库故障重启后,守护进程会根据 Open 记录、LSN、模式和状态判断恢复策略,可能将原主库改为 STANDBY 后重新加入;如果备库未自动恢复,可以用 check recover 查看不满足恢复条件的原因。
当 GRP1_RT_01 已经稳定为 STANDBY,且 ARCH STATUS=VALID 后,再做计划内回切:
/opt/dmdbms/dmhome/bin/dmmonitor /opt/dmdbms/dmhome/bin/dmmonitor_manual.ini
监视器中执行:
show global info
tip
login
choose switchover GRP1
switchover GRP1.GRP1_RT_01
show global info
tip
show arch send info GRP1_RT_02
回切成功后:
GRP1_RT_01 PRIMARY
GRP1_RT_02 STANDBY
本次测试分别验证了达梦数据守护环境中的手动主备切换(Switchover)和主库故障后的自动接管(Auto Takeover)。手动切换适用于系统维护、演练和计划内回切,执行前应确保主库、备库均处于正常 Open/OK 状态,并通过 choose switchover 确认目标备库具备切换条件。自动接管用于主库异常场景,需要启用确认监视器,并确保守护进程、实例自动重启、故障判定时间及归档同步等配置正确。
测试过程中,应重点关注以下事项:
show arch send info 等命令,确认归档状态为 VALID,避免在数据未同步完成时执行切换。switchover。switchover 适用于主备均正常的情况,自动 takeover 适用于主库故障场景。takeover force 可能绕过部分一致性检查,存在数据丢失、双主或脑裂风险,除非已确认原主库不可恢复且具备完整处置方案,否则不建议使用。STANDBY 稳定加入守护组,检查日志追平、归档状态和数据一致性,待状态完全正常后再执行计划内回切。最终验收标准应包括:主备角色符合预期、数据库实例均处于正常状态、归档同步有效、切换前后测试数据完整、应用连接能够恢复,以及原主库能够重新作为备库加入并完成计划内回切。
文章
阅读量
获赞
