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

目录

监视器关闭

监视器启动,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.mzph.cn/web/45505.shtml

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

相关文章

实现给Nginx的指定网站开启basic认证——http基本认证

一、问题描述 目前我们配置的网站内容都是没有限制,可以让任何人打开浏览器都能够访问,这样就会存在一个问题(可能会存在一些恶意访问的用户进行恶意操作,直接访问到我们的敏感后台路径进行操作,风险就会很大&#xff…

Why can‘t I access GPT-4 models via API, although GPT-3.5 models work?

题意:为什么我无法通过API访问GPT-4模型,尽管GPT-3.5模型可以工作? 问题背景: Im able to use the gpt-3.5-turbo-0301 model to access the ChatGPT API, but not any of the gpt-4 models. Here is the code I am using to tes…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【22】【RabbitMQ】

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【22】【RabbitMQ】 Message Queue 消息队列异步处理应用解耦流量控制 消息中间件概念RabbitMQ概念MessagePublisherExchangeQueueBindingConnectionChannelConsumerVirtual HostBroker图…

Django prefetch_related()方法

prefetch_related的作用 prefetch_related()是 Django ORM 中用于优化查询性能的另一个重要方法,尤其在处理多对多(ManyToMany)关系和反向关系时非常有用。它允许你预加载相关对象,从而减少数据库查询次数。 1,创建应…

【香橙派】Orange pi AIpro开发板使用之一键部署springboot项目

前言 最近有幸收到一份新款 OrangePi AIpro 开发板,之前手里也捣鼓过一些板子,这次尝试从零开始部署一个简单的后端服务。OrangePi AIpro 采用昇腾AI技术路线,具体为4核64位处理器AI处理器,可配16GB内存容量,各种复杂应…

数字化赋能,加油小程序让出行更便捷高效

在快节奏的现代生活中,每一次加油不仅是车辆续航的必要步骤,也成为了人们日常生活中不可或缺的一环。随着科技的飞速发展,传统加油模式正逐步向智能化、便捷化转型,其中,加油小程序作为这股浪潮中的佼佼者,…

el-date-picker手动输入日期,通过设置开始时间和阶段自动填写结束时间

需求&#xff1a;根据开始时间&#xff0c;通过填写阶段时长&#xff0c;自动填写结束时间&#xff0c;同时开始时间和节数时间可以手动输入 代码如下&#xff1a; <el-form ref"ruleForm2" :rules"rules2" :model"formData" inline label-po…

yolov5 上手

0 介绍 YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型&#xff0c;由华盛顿大学的约瑟夫-雷德蒙&#xff08;Joseph Redmon&#xff09;和阿里-法哈迪&#xff08;Ali Farhadi&#xff09;开发。YOLO 于 2015 年推出&#xff0c;因其高速度和高精确度而迅速受到…

人工智能算法工程师(中级)课程13-神经网络的优化与设计之梯度问题及优化与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程13-神经网络的优化与设计之梯度问题及优化与代码详解。 文章目录 一、引言二、梯度问题1. 梯度爆炸梯度爆炸的概念梯度爆炸的原因梯度爆炸的解决方案 2. 梯度消失梯度消失的概念梯度…

powerdesigner导出表数据库设计文档excel

1、连接数据库&#xff0c;导出表结构的sql脚本 2、打开powerdesigner&#xff0c;生成项目空间表 sql脚本用第一步的脚本 3、用script脚本生成excel 脚本信息 Option Explicit Dim rowsNum rowsNum 0 -------------------------------------------------------------…

CV12_ONNX转RKNN模型(谛听盒子)

暂时简单整理一下&#xff1a; 1.在边缘设备上配置相关环境。 2.配置完成后&#xff0c;获取模型中间的输入输出结果&#xff0c;保存为npy格式。 3.将onnx格式的模型&#xff0c;以及中间输入输出文件传送到边缘设备上。 4.编写一个python文件用于转换模型格式&#xff0c…

[iOS]内存分区

[iOS]内存分区 文章目录 [iOS]内存分区五大分区栈区堆区全局区常量区代码区验证内存使用注意事项总结 函数栈堆栈溢出栈的作用 参考博客 在iOS中&#xff0c;内存主要分为栈区、堆区、全局区、常量区、代码区五大区域 还记得OC是C的超类 所以C的内存分区也是一样的 iOS系统中&a…

51单片机STC89C52RC——19.1 SG90舵机(伺服电机)

目的/效果 独立按键K1&#xff0c;K2 实现加舵机减角度增减&#xff0c;LCD1602显示舵机转角度数&#xff08;上电默认90度&#xff09; 一&#xff0c;STC单片机模块 二&#xff0c;SG90舵机 2.1 简介 舵机只是我们通俗的叫法&#xff0c;它的本质是一个伺服电机&#xf…

react 案例的实现

先看一下如下效果 效果 这是一个 简单的 效果 左边是用户名进行登录 右边是一个答题还有遮罩 相信大家还有刚刚创建好的 react 脚手架了&#xff0c;没有的话可以运行以下命令 creact-react-app 项目名称 把项目名称四个字 改成 自己想要的一个名字 最好是英文的在 App.js中去…

Web开发:<br>标签的作用

br作用 介绍基本用法常见用途注意事项使用CSS替代 介绍 在Web开发中&#xff0c;<br> 标签是一个用于插入换行符的HTML标签。它是“break”的缩写&#xff0c;常用于需要在文本中强制换行的地方。<br> 标签是一个空标签&#xff0c;这意味着它没有结束标签。 基本…

【Ubuntu】安装使用pyenv - Python版本管理

当我们在Ubuntu上使用Python进行开发的时候&#xff0c;可能会遇到版本不兼容的问题&#xff0c;当然你可以选择使用apt的方式安装不同版本的python环境 但是存在一定的问题&#xff1a;安装不同版本的Python通常不会改变默认的python3命令指向的版本&#xff0c;而且就算你进行…

分布式对象存储minio

本教程minio 版本&#xff1a;RELEASE.2021-07-*及以上 1. 分布式文件系统应用场景 互联网海量非结构化数据的存储需求 电商网站&#xff1a;海量商品图片视频网站&#xff1a;海量视频文件网盘 : 海量文件社交网站&#xff1a;海量图片 1.1 Minio介绍 MinIO 是一个基于Ap…

区块链与云计算的融合:新时代数据安全的挑战与机遇

随着信息技术的迅猛发展&#xff0c;云计算和区块链技术作为两大前沿技术在各自领域内展示出了巨大的潜力。而它们的结合&#xff0c;即区块链与云计算的融合&#xff0c;正在成为数据安全领域的新趋势。本文将探讨这一融合对数据安全带来的挑战和机遇&#xff0c;以及其在企业…

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

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

redis原理之底层数据结构(二)-压缩列表

1.绪论 压缩列表是redis最底层的结构之一&#xff0c;比如redis中的hash&#xff0c;list在某些场景下使用的都是压缩列表。接下来就让我们看看压缩列表结构究竟是怎样的。 2.ziplist 2.1 ziplist的组成 在低版本中压缩列表是由ziplist实现的&#xff0c;我们来看看他的结构…