首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

达梦数据库踩坑系统之即时归档

环境说明:

版本:达梦 8.1.3.26架构:达梦守护集群

问题说明:

由于服务器资源有限,将monitor监控器部署在了备库服务器上,DM8数据守护架构归档模式支持多种类型,实时归档、即时归档等,搭建数据库时,考虑到实时归档需要单独维护KEEP_RLOG_PKG部分,猜想出问题的概率可能会更大一些,所以选择了即时归档,数据库使用一段时间,有一天突然发现主备服务器之间心跳网卡故障了,守护集群发生了组分裂(或称为脑裂):

show global info2023-10-12 15:22:33 #================================================================================#GROUP OGUID MON_CONFIRM MODE MPP_FLAG GRP1             123456      FALSE           AUTO            FALSEDW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT 192.16.12.11        33333        2023-10-12 15:22:33  GLOBAL    VALID     OPEN     CJC01             OK        1     1     OPEN        PRIMARY   DSC_OPEN       TIMELY    VALIDERROR DATABASE:DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT 192.16.12.12        33333        2023-10-12 15:21:30  GLOBAL    SPLIT     STARTUP        CJC02             OK        1     1    MOUNT       PRIMARY   DSC_OPEN       TIMELY    VALID#================================================================================#

其中备库WCTLSTAT为SPLIT,WSTATUS为STARTUP,ISTATUS为MOUNT,IMODE为PRIMARY,出现了双主的情况。

影响范围:

1.主备同步中断。

测试通过dm_svc.conf服务名进行连接数据库,LOGIN_MODE=(1)只连接主库,多次测试可以连接到正常的PRIMARY,理论上对应用访问数据库没影响。

修复:

待心跳网络恢复后,备库没有自动恢复,沟通原厂技术,此类问题只能通过重建备库来解决。

问题原因:

timely即时归档模式下,数据先写到本地,再发送备库,如果在发送期间心跳网络故障,主、备库之间无法通信,由于本次案例的监控器在备库,监控器可以正常和备库通信,无法和主库通信,会判断主库故障,发生主、备切换,但由于主从数据不一致,所以备库角色虽然切换为PRIMARY,但状态只能到MOUNT,无法OPEN,从而发生了SPLIT。

解决方案:

如何避免类似问题再次发生。

1.监控器放在独立的服务器,不能主、备数据库部署在一起。2.归档模式从即时归档更改为实时归档。

实时归档说明:

与本地归档写入保存在磁盘中的日志文件不同,实时归档(Realtime)将主库产生的 Redo 日志通过 MAL 系统传递到备库,实时归档是实时主备和 MPP 主备的实现基础。实时归档只在主库生效,一个主库可以配置 1~8 个实时备库。

实时归档的执行流程是,主库在 Redo 日志(RLOG_PKG)写入联机日志文件前,将 Redo 日志发送到备库,备库收到 Redo 日志(RLOG_PKG)后标记为 KEEP_RLOG_PKG,将原 KEEP_RLOG_PKG 加入日志重演任务系统,并马上响应主库(高性能模式),不需要等待 Redo 日志重演结束后再响应主库。主库收到备库的响应消息,确认备库已经收到 Redo 日志后,再将 Redo 日志写入联机日志文件中。

什么是KEEP_RLOG_PKG呢,有什么作用?

KEEP_RLOG_PKG 介绍

主库的 RLOG_PKG 日志通过实时归档机制发送到备库后,备库将最新收到的 RLOG_PKG 保存在内存中,不马上启动重演,这个 RLOG_PKG 我们称之为 KEEP_RLOG_PKG。

引入 KEEP_RLOG_PKG 的主要目的是,避免下述场景中,主库故障重启后不必要的主备切换,减少用户干预。

场景说明(实时主备或 MPP 主备):

1.用户登录主库 A 执行

CREATE TABLE TX(C1 INT);INSERT INTO TX VALUES(1);COMMIT;

其中 COMMIT 操作将触发实时归档,发送 RLOG_PKG 到备库 B。

2.备库 B 收到 RLOG_PKG,响应主库 A,并启动日志重演。

3.主库 A 在 RLOG_PKG 写入联机日志文件之前故障。

4.主库 A 重新启动后,由于 RLOG_PKG 没有写入联机日志文件,之前插入 TX 表的数据丢失;但此时备库 B 已经重演日志成功,TX 表中已经插入一行数据。

上述场景中,主备库数据不再保持一致,必须将备库 B 切换为主库,并重新从 B 同步数据到 A。

如果配置的是手动切换模式,则必须要有用户干预,进行备库接管后,才能恢复数据库服务。

引入 KEEP_RLOG_PKG 后,备库 B 收到主库 A 发送的 RLOG_PKG,并不会马上启动日志重演,主库 A 重启后,守护进程 A 检测到备库 B 存在 KEEP_RLOG_PKG,通知备库 B 丢弃 KEEP_RLOG_PKG 后,直接 Open 主库 A,就可以继续提供数据库服务。

并且,这些操作是由守护进程自动完成,不需要用户干预。

如果备库自动接管、或者用户发起备库接管命令,那么备库的 KEEP_RLOG_PKG 将会启动重演,不管主库是否已经将 KEEP_RLOG_PKG 对应的 Redo 日志写入联机日志文件中,备库接管时的 APPLY_LSN 一定是大于等于主库的 FILE_LSN。

当故障主库重启后,仍然可以作为备库,自动重新加入数据守护系统。

注意

即时归档在RLOG_PKG写入主库联机Redo日志文件后,再发送RLOG_PKG到备库,因此即时备库没有KEEP_RLOG_PKG。

归档类型

测试实时归档下心跳网卡中断场景,实验如下:

归档模式更改为REALTIME

监控器在备库上

ip a3: enp0s8: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:d1:e6:01 brd ff:ff:ff:ff:ff:ff inet 192.16.12.12/24 brd 192.16.12.255 scope global noprefixroute enp0s8

[root@cjc-db-04 root]# ifdown enp0s8Device 'enp0s8' successfully disconnected.

备库确认监控器信息

主、备库WSTATUS状态为ERROR,备库IMODE还是STANDBY,没有切换为PRIMARY,没有发生SPLIT。

#================================================================================#[monitor]         2023-10-12 15:19:08: Clean request of dmwatcher processer CJC02 success[monitor] 2023-10-12 15:19:08: Switchover instance CJC01 success

[monitor] 2023-10-12 15:19:09: Dmwatcher process CJC01 status switching [OPEN-->RECOVERY] WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-10-12 15:19:09 RECOVERY OK CJC01 OPEN PRIMARY VALID 11 49962 49962

[monitor] 2023-10-12 15:19:11: Dmwatcher process CJC01 status switching [RECOVERY-->OPEN] WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-10-12 15:19:11 OPEN OK CJC01 OPEN PRIMARY VALID 11 49963 49963

[monitor] 2023-10-12 15:21:52: Received message timeout from(CJC01) WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-10-12 15:21:30 ERROR OK CJC01 OPEN PRIMARY VALID 11 50009 50009

[monitor] 2023-10-12 15:21:52: Received message timeout from(CJC02) WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-10-12 15:21:30 ERROR OK CJC02 OPEN STANDBY VALID 11 50009 50009

show global info2023-10-12 15:24:06 #================================================================================#GROUP OGUID MON_CONFIRM MODE MPP_FLAG GRP1 123456 TRUE AUTO FALSE

ERROR DATABASE:

DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT 192.16.12.11 33333 2023-10-12 15:21:30 GLOBAL VALID ERROR CJC01 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID

DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT 192.16.12.12        33333        2023-10-12 15:21:30  GLOBAL    VALID     ERROR          CJC02             OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID#================================================================================#

监控器信息

主库变为SUSPEND状态,因为监控器在备库服务器上。 

[monitor] 2023-10-12 15:21:51: Dmwatcher process CJC01 status switching [OPEN-->STARTUP] WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-10-12 15:21:51 STARTUP OK CJC01 SUSPEND PRIMARY VALID 11 50009 50016

[monitor] 2023-10-12 15:21:51: Dmwatcher process CJC01 status switching [STARTUP-->MON CONFIRM] WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-10-12 15:21:51 MON CONFIRM OK CJC01 SUSPEND PRIMARY VALID 11 50009 50016

[monitor] 2023-10-12 15:21:52: [!!! Instance CJC02 dmwatcher's DW_MODE is configured as AUTO, but this dmmonitor is not in CONFIRM mode, cannot takeover instance CJC02 automatically !!!]

[monitor] 2023-10-12 15:21:52: Received message timeout from(CJC02) WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-10-12 15:21:30 ERROR OK CJC02 OPEN STANDBY VALID 11 50009 50009

show global info2023-10-12 15:22:33 #================================================================================#GROUP OGUID MON_CONFIRM MODE MPP_FLAG GRP1 123456 FALSE AUTO FALSE

DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT 192.16.12.11 33333 2023-10-12 15:22:33 GLOBAL VALID MON CONFIRM CJC01 OK 1 1 SUSPEND PRIMARY DSC_OPEN REALTIME VALID

ERROR DATABASE:DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT 192.16.12.12 33333 2023-10-12 15:21:30 GLOBAL VALID ERROR CJC02 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID #================================================================================#

主库是SUSPEND 状态

SQL> select name,status$,mode$ from v$instance;LINEID name status$ mode$ ---------- ---- ------- -------1 CJC01 SUSPEND PRIMARY

used time: 157.881(ms). Execute id is 600.

备库

[dmdba@cjc-db-04 ~]$ disql SYSDBA/***:portSQL> select name,status$,mode$ from v$instance;LINEID name status$ mode$ ---------- ---- ------- -------1 CJC02 OPEN STANDBY

used time: 4.023(ms). Execute id is 2000.

恢复备库心跳网卡

[root@cjc-db-04 root]# ifup enp0s8Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/11)

主、备库自动恢复,无需人为干预

#================================================================================#[monitor] 2023-10-12 15:26:20: Dmwatcher process CJC02 status switching [NONE-->OPEN] WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-10-12 15:26:20 OPEN OK CJC02 OPEN STANDBY VALID 11 50009 50009

[monitor] 2023-10-12 15:26:20: Dmwatcher process CJC01 status switching [NONE-->MON CONFIRM] WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-10-12 15:26:20 MON CONFIRM OK CJC01 SUSPEND PRIMARY VALID 11 50009 50018

[monitor] 2023-10-12 15:26:20: Dmwatcher process CJC01 status switching [MON CONFIRM-->FAILOVER] WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-10-12 15:26:20 FAILOVER OK CJC01 SUSPEND PRIMARY VALID 11 50009 50018

[monitor] 2023-10-12 15:26:23: Dmwatcher process CJC01 status switching [FAILOVER-->OPEN] WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-10-12 15:26:22 OPEN OK CJC01 OPEN PRIMARY VALID 11 50018 50018

[monitor] 2023-10-12 15:26:23: Dmwatcher process CJC01 status switching [OPEN-->RECOVERY] WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-10-12 15:26:22 RECOVERY OK CJC01 OPEN PRIMARY VALID 11 50018 50018

[monitor] 2023-10-12 15:26:27: Dmwatcher process CJC01 status switching [RECOVERY-->OPEN] WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-10-12 15:26:27 OPEN OK CJC01 OPEN PRIMARY VALID 11 50019 50019

show global info2023-10-12 15:26:38 #================================================================================#GROUP OGUID MON_CONFIRM MODE MPP_FLAG GRP1 123456 TRUE AUTO FALSE

DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT 192.16.12.11 33333 2023-10-12 15:26:37 GLOBAL VALID OPEN CJC01 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID

DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT 192.16.12.12        33333        2023-10-12 15:26:37  GLOBAL    VALID     OPEN           CJC02             OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID#================================================================================#

参考:

https://eco.dameng.com/document/dm/zh-cn/pm/data-watch-overview.htmlhttps://eco.dameng.com/document/dm/zh-cn/pm/data-watch-overview.html

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Oft3V9UdLvL62ZWAk7iFL3ug0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券