达梦数据库系列—28. 主备集群高可用测试

news2024/9/22 5:34:17

目录

监视器关闭

监视器启动,Detach备库

主备正常,手动switchover

主库故障,自动switchover

主库故障,手动Takeover

主库故障,备库强制takeover

主库重启

备库故障

公网连接异常

主库私网异常

备库私网异常

主备私网同时异常


1.Primary/Standby 模式的库启动后,自动进入 Mount 状态,需要启动守护进程才会open。

2.Standby数据库mount后,DW才会启动主库。

3.如果不停守护进程,数据库stop以后,DW会把进程自动拉起。INST_AUTO_RESTART = 0可以关闭自动拉起功能。

监视器关闭

首先关闭监视器

关闭主库DW02,DW01(备库)仍然是standby,因为没有启动监视器,不会进行switchover。

这个时候,再启动监视器,会把DW01切换为primary吗?不会。

把主库DW02启动,守护组恢复正常。

监视器启动,Detach备库

login

detach database xx

stop dmwatcher database xx

startup dmwatcher database xx

attach database xx

备库DW02 Detach

退出重新进入监视器,show

备库的归档状态是INVALID

此时我们关闭DW01(主库)

可以看到DW02还是standby,detach备库后,备库不会进行接管。

把DW02加入到DW里

对应的主库DW01是停掉的状态,不允许备库DW02加入。

启动DW01

测试一下,是否会数据同步。

发现数据从DW01可以正常同步到DW02,难道DW02自动加入DW组了?

启动主库后,备库自动加入了。

主备正常,手动switchover

假定Choose Switchover选出的可切换备库是 B,Switchover 切换流程如下:

  1. 通知主备库守护进程,切换为 Switchover 状态
  2. 通知主库(A) Mount
  3. 实时或 MPP 主备环境下,通知备库(B) APPLY KEEP_RLOG_PKG
  4. 通知备库(B) Mount
  5. 通知(A) 切换为 Standby 模式
  6. MPP 主备环境下,通知(A)修改 MPP_INI 内存值为 0
  7. 通知(B) 切换为 Primary 模式
  8. 通知(B) 修改所有归档目标的归档状态为无效
  9. MPP 主备需要通知各组活动主库更新 dmmpp.ctl 文件,参考后文说明
  10. 通知新的备库(A) Open
  11. 通知新的主库(B) Open
  12. 通知主备库守护进程切换为 Open 状态
  13. 清理所有守护进程上记录的监视器命令执行信息

需要登录,输入login

登录成功后,执行switchover

主库故障,自动switchover

检测到主库故障的情况下,会自动进行switchover

杀掉DB进程

检测到故障,自动切换

主库故障,手动Takeover

以备库 B 为例,接管的执行流程包括:

  1. 监视器通知守护进程(B)切换为 Takeover 状态
  2. 实时主备或 MPP 主备环境下,通知备库(B) APPLY KEEP_RLOG_PKG
  3. 通知备库(B) Mount
  4. 通知(B) 切换为 Primary 模式
  5. 通知(B) 修改到所有归档目标的归档状态为 Invalid
  6. MPP 主备需要通知活动主库更新 dmmpp.ctl 文件
  7. 通知新的主库(B) Open
  8. 通知守护进程(B)切换为 Open 状态

主库故障的情况下,自动切换失败,可以手动进行切换。

dmwatcher的参数DW_MODE设为MANUAL进行测试:

杀掉DM02进程

可见DW02判断为故障,Dw的状态由open变为startup

show看一下状态

主库DW02状态为error,备库DW01状态正常,DW01没有自动切换,我们让备库DW01接管:

takeover DW01

此时,备库DW01切换成了primary。可以看到此时DW02仍然是primary。

再开启DW02,看实例一DW日志:

DW02由Primary转变为standby,DW的状态也变为了startup

后面,DW和DW02状态会变为OPEN,然后进行DW02的恢复

主库故障,备库强制takeover

与正常 takeover 命令相比,强制接管时系统不会对故障主库与待接管备库的数据一致性进行检查,若接管前主备库的数据是一致的,则强制接管与正常 takeover 效果相同,接管成功后不会出现数据丢失的情况,故障主库重启后也能正常加回集群。若接管前主备库的数据不一致,则强制接管后会存在数据丢失,故障主库重启后无法加回集群,出现集群分裂。

典型的主备库数据一致的场景:REALTIME 归档模式,主库故障前到备库的归档状态为 VALID。由于 REALTIME 归档流程为主库先发送日志到备库,等待收到所有备库的响应消息后再将该日志写入本地的联机日志文件中,所以在主库故障后其联机日志文件中已经写入的日志一定不会备库收到的日志更多。这种场景下执行强制接管后不会出现数据丢失,故障主库重启后也能够作为备库重新加入集群,不会发生集群分裂。

强制接管的条件包括:

  1. 不存在活动主库
  2. 备库守护进程处于 Open 或 Startup 状态
  3. 备库实例运行正常
  4. 备库是 Standby 模式
  5. 备库处于 Open 或 Mount 状态
  6. 备库的 KLSN 必须是所有备库中最大的
  7. 备库守护进程控制文件必须有效

以下继续做测试,杀掉DW01(主库):

强制接管DW02

由于是realtime同步,强制接管前数据是一致的,所以并没有发生守护组分裂。

开启DW01

过程同前面takeover介绍的一样,DW01状态为standby,状态恢复正常。

主库重启

主库重启,守护进程状态会先变成startup,然后再open,Open 成功后继续作为主库

备库故障

手动切换模式

Kill DW01(备库)

先看监视器,DW01 STANDBY故障

看到DW状态由OPEN变为startup

从故障节点的DW日志里,也能看到:

Dw接收不到实例的TCP连接信息,状态置为startup

但是DW02的状态也会发生变化

守护进程(DW02)先由OPEN到STARTUP,再变为FAILOVER,然后OPEN

实例先SUSPEND,再OPEN

公网连接异常

影响:用户无法连接数据库

如果主库公网无法连接,可以手动switchover,将备库切换为主库使用。

主库私网异常

  1. 主备库之间无法通信
  2. 守护进程间无法进行通信

3.REALTIME无法归档

4.守护进程无法与主库进行通信

主库挂起后,连接主库的会话会挂住不切换新主库,设置参数SESS_FREE_IN_SUSPEND配置的时间,会话会自动断开老主库。

关掉主库私网网卡

守护进程间无法进行通信,DW02的守护进程为ERROR

DW01的归档为unkonwn,DW02的归档为invalid

守护进程无法与主库进行通信

监视器检测到Primary实例故障,开始执行takeover自动接管

使用备库DW01自动接管成功

重新开启DW02的网卡

守护进程DW02恢复了OPEN,但是实例DW02还是异常

原来是实例当掉了,我们重新开启DW02实例

实例恢复正常,DW恢复正常。

备库私网异常

1.主备库之间无法通信

2.守护进程间无法进行通信

3.REALTIME归档失败

4.守护进程无法与备库进行通信

停掉DW02(备库)的网卡

首先守护进程间无法通信,,DW02的守护进程为ERROR

主库DW01的归档为unkonwn,备库DW02的归档为unkonwn

守护进程无法与主库进行通信,检测到备库故障

主库实例状态suspend->open,wstatus状态failover->open

重新开启DW02的网卡

DW02的守护进程状态由none变为open

主备私网同时异常

两节点同时关闭网卡

守护进程与DW01和DW02间无法通信

守护进程间无法通信

实例之间无法通信

监视器与守护进程无法通信

主备库不会切换,主库状态变为suspend

打开两节点网卡

守护进程:

DW01   none-> failover->open

DW02 none->open

实例:

DW01 suspend->open

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1927489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp打包成Android时,使用uni.chooseLocation在App端显示的地址列表是空白?一直转圈的解决办法

问题描述: uniapp打包后的测试版app在ios里可以显示高德地图的定位列表,但是安卓手机却不显示定位列表,一直在转圈圈,怎么回事?之前的功能在正式版都能用,真机运行也能用,为什么测试版的安卓手…

【数智化案例展】某省会城市——轨道交通线网云平台建设

‍ 逸迅科技案例 本项目案例由逸迅科技投递并参与数据猿与上海大数据联盟联合推出的《2024中国数智化转型升级创新服务企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 本项目将打造一个先进的线网指挥中心大数据平台,它将作为这座城市轨道…

Kafka基本原理|特性

Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统 它的最大的特性就是可以实时的处理大量数据以满足各种需求场景…

线程安全(五)volatile 修饰共享变量(JIT即时编译器、指令重排序)

目录 一、volatile 简介1.1 定义1.2 volatile 的两个特性二、特性1:保证线程间的可见性示例1:普通场景1)代码示例:2)执行结果:3)总结:示例2:被 JIT 即时编译器优化1)代码示例:2)执行结果:3)原因分析:4)什么是 JIT 即时编译器?4)解决方案一:5)解决方案二:三…

如何用STM32实现modbus-RTU?

Modbus RTU是一种广泛应用于工业自动化领域的通信协议,基于主从架构,通过串行通信进行数据传输。本文将详细介绍Modbus RTU协议的基本原理,并提供在STM32微控制器上实现Modbus RTU通信的完整代码示例。 1. Modbus RTU协议概述 Modbus RTU的定义和特点 Modbus RTU(Remote Te…

【数学建模与优化】:解析与实践

目录 数学建模概述 1. 什么是数学模型 2. 数学模型的分类 2.1 按应用领域分类 2.2 按建模方法分类 2.3 按是否考虑随机因素分类 2.4 按变量的连续性分类 2.5 按对对象内部规律了解程度分类 2.6 按变量的基本关系分类 2.7 按是否考虑时间变化分类 3. 数学规划及优化模…

无人机之机架类型篇

碳纤维机架 具有低密度、高强度和高刚度的特点,非常适合商业或工业级无人机的设计。碳纤维机架在飞行过程中具有良好的减振效果,使飞行更加稳定,但制作工艺复杂,成本较高。 工程塑料机架 以其轻便、耐冲击和易加工等特点受到一…

【轻松拿捏】HashMap-详解及底层实现原理?

目录 1. 基本结构 2. 哈希函数 3. 哈希冲突解决 4. 插入操作(put) 5. 查找操作(get) 6. 删除操作(remove) 7. 扩容(resize) 8.说一下 HashMap 的实现原理?&#…

前端:Vue学习-1

前端:Vue学习-1 1. 指令1. 指令修饰符2. v-bind对样式控制的增强3. v-model应用于其他表单元素 2. 计算属性3. watch侦听器(监视器) 1. 指令 就是带有v-前缀的特殊属性,不同属性对应不同的功能 v-html:动态设置页面的html标签内容…

平替ChatGPT的多模态智能体来了

在人工智能领域,多模态技术的融合与应用已成为推动技术革新的关键。今天,我们用智匠AI实现了完全由国产模型驱动的多模态智能体——智酱v0.1.0,它不仅能够媲美ChatGPT的多模态能力,更在联网搜索、图片识别、画图及图表生成等方面展…

罗技K380无线键盘及鼠标:智慧互联,一触即通

目录 1. 背景2. K380无线键盘连接电脑2.1 键盘准备工作2.2 电脑配置键盘的连接 3. 无线鼠标的连接3.1 鼠标准备工作3.2 电脑配置鼠标的连接 1. 背景 有一阵子经常使用 ipad,但是对于我这个习惯于键盘打字的人来说,慢慢在 ipad 上打字,实在是…

WEB-INF 泄露-RoarCTF-2019-EasyJava(BUUCTF)

题目页面 点开help 这里存在文件下载漏洞,参数选择POST传参(使用HackBar插件) 查看文件内容 下载存有web信息的XML文件,这里补充一点知识点 WEB-INF主要包含一下文件或目录: /WEB-INF/web.xml:Web应用程序…

Qt会议室项目

在Qt中编写会议室应用程序通常涉及到用户界面设计、网络通信、音频/视频处理等方面。以下是创建一个基本会议室应用程序的步骤概述: 项目设置: 使用Qt Creator创建一个新的Qt Widgets Application或Qt Quick Application项目。 用户界面设计&#xff1…

Android Viewpager2 remove fragmen不生效解决方案

一、介绍 在如今的开发过程只,内容变化已多单一的fragment,变成连续的,特别是以短视频或者直播为主的场景很多。从早起的Viewpage只能横向滑动,到如今的viewpage2可以支持横向或者竖向滑动。由于viewpage2的adapter在设计时支持缓…

vue学习day09-自定义指令、插槽

29、自定义指令 (1)概念:自己定义的指令,可以封装一些dom操作,扩展额外的功能。 (2)分类: 1)全局注册 2)局部注册 3)示例: 让表…

CV07_深度学习模块之间的缝合教学(2)--维度转换

教学(1):链接 1.1 预备知识 问题:假如说我们使用的模型张量是三维的,但是我们要缝合的模块是四维的,应该怎么办? 方法:pytorch中常用的函数:(1)view函数(2…

C++基础(三)

1.再探构造函数 之前的构造函数,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式,就是初始化列表,初始化列表的使用方式是以一个冒号开始,接着是一个以逗号分隔开的数据成员列表,每个“成…

系统架构师考点--软件工程(上)

大家好。今天我来总结一下软件工程的相关考点。这部分是考试的重点。在上午场客观题、下午场案例题以及下午场论文都有可能考到,在上午场客观题中大约占12-15分左右。 一、软件工程概述 软件开发生命周期 软件定义时期:包括可行性研究和详细需求分析过…

3d导入模型后墙体变成黑色?---模大狮模型网

在展览3D模型设计领域,技术和设计的融合通常是创意和实现之间的桥梁。然而,有时设计师们会遇到一些技术上的挑战,如导入3D模型后,墙体却突然变成了黑色。这种问题不仅影响了设计的视觉效果,也反映了技术应用中的一些复…

数据结构(4.4)——求next数组

next数组的作用:当模式串的第j个字符失配时,从模式串的第next[j]的继续往后匹配 求模式串的next数组(手算) next[1] 任何模式串都一样,第一个字符不匹配时,只能匹配下一个子串,因此,往后,next[1]都无脑写…