主备dmserver关闭顺序不正确,主库提示“sys halt 0 段错误”

读写分离集群主备dmserver关闭顺序不正确,主库提示“sys halt 0 段错误”

现状描述

根据官方手册《DM8数据守护与读写分离集群V4.0》搭建dm8读写分离集群,搭建完成后关闭主备守护进程,再关闭备库的dmserver,最后在关闭主库前台命令启动的dmserver实例时,在关闭后提示"sys halt 0 段错误"。

主库显示信息如下:

dmdba@PC:/data/dmdbms/bin$ ./dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini mount
file dm.key not found, use default license!
version info: develop
Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8 1-1-87-20.06.01-122565-ENT  startup...
Database mode = 0, oguid = 0
License will expire on 2021-06-01
file lsn: 35549
ndct db load finished
ndct fill fast pool finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
systables desc init success.
ndct_db_load_info success.
SYSTEM IS READY.
total 1 trx rollbacked, rollback percent: -1%
total 2 trx rollbacked, rollback percent: -1%
total 3 trx rollbacked, rollback percent: -1%
total 4 trx rollbacked, rollback percent: -1%
iid page's trxid[4008]
NEXT TRX ID = 4009
pseg_collect_items, collect 0 active_trxs, 0 cmt_trxs, 0 pre_cmt_trxs, 0 active_pages, 0 cmt_pages, 0 pre_cmt_pages
pseg_process_collect_items end, 0 active trx, 0 active pages, 0 committed trx, 0 committed pages
total 0 active crash trx, pseg_crash_trx_rollback sys_only(0) begin ...
pseg_crash_trx_rollback end
purg2_crash_cmt_trx end, total 0 page purged
set EP[0]'s pseg state to inactive
pseg recv finished
nsvr_process_before_open begin.
nsvr_process_before_open success.
total 0 active crash trx, pseg_crash_trx_rollback sys_only(0) begin ...
pseg_crash_trx_rollback end
exit                   <---------------------这里执行exit退出
Server is stopping...
listener closed  and all sessions disconnected
purge undo records in usegs...OK
full check point starting...
generate force checkpoint, rlog free space[536764928], used space[97792]
sys halt 0             <-------------
段错误                  <-------------
dmdba@PC:/data/dmdbms/bin$ 

原因

经验证,是由于读写分离集群主备库dmserver实例关闭顺序不对导致。
目前未发现由于此种情况出现的 "段错误 " 导致数据库故障或者无法启动的情况。

解决

如果使用手动方式关闭数据守护系统,请严格按照以下顺序执行:

1. 如果启动了确认监视器,先关闭确认监视器(防止自动接管)
2. 关闭备库守护进程(防止重启实例)
3. 关闭主库守护进程(防止重启实例)
4. Shutdown 主库
5. Shutdown 备库

参考《DM8数据守护与读写分离集群V4.0》6.4节中的说明。

总结

关闭守护系统时,必须按照一定的顺序来关闭守护进程和数据库实例。特别是自动切换模式,如果退出守护进程或主备库的顺序不正确,可能会引起主备切换,甚至造成守护进程组分裂。
通过监视器执行 Stop Group 命令关闭数据守护系统,是最简单、安全的方式。命令执行成功后,数据库实例正常关闭。但守护进程并没有真正退出,而是将状态切换为Shutdown 状态。
Stop Group 命令内部流程如下:

1. 通知守护进程切换为 Shutdown 状态
2. 通知主库退出
3. 通知其他备库退出

如果是只关闭主库, 并且不想引发备库自动接管, 有以下两种方法:

方法一:
1.通过 Detach database 命令将所有备库分离
2.通过 Stop database 命令退出主库

方法二: 严格按照以下顺序执行:
1. 通过 Stop dmwatcher 命令关闭所有守护进程监控
2. 手动正常退出主库

如果是只关闭备库, 并且不想引发主库发送日志失败进入 Suspend 状态, 请严格按照以下顺序执行:

1. 通过 Detach database 命令将备库分离出数据守护系统
2. 正常退出备库(手动退出或者通过 Stop database 命令退出)

如果使用手动方式关闭数据守护系统,请严格按照以下顺序执行:

1. 如果启动了确认监视器,先关闭确认监视器(防止自动接管)
2. 关闭备库守护进程(防止重启实例)
3. 关闭主库守护进程(防止重启实例)
4. Shutdown 主库
5. Shutdown 备库

注意:

关闭整个数据守护系统时, 先关闭主库再关闭备库,顺序一定不能错。对于本地守护类型的库,在关闭数据守护系统时,不受此顺序限制。因为主库 Shutdown 过程中,需要 Purge 所有已提交事务,会修改数据,并产生 Redo 日志。如果先 Shutdown 备库,会导致主库发送归档日志失败,并且由于主库已经处于 Shutdown 状态,会导致主库异常关闭。

更多资讯请上达梦技术社区了解:https://eco.dameng.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值