修复达梦数据库(DM8)读写分离集群的脑裂问题

一、脑裂

1、脑裂的介绍

脑裂是同一个守护进程组中同时出现两个或者多个活动主库,并且这些主库都接收用户 请求,提供完整数据库服务。一旦发生脑裂,将无法保证数据一致性,对数据安全造成严重 后果。
DM 数据守护系统为预防脑裂做了大量工作,例如故障自动切换模式的数据守护必须配置确认监视器。确认监视器启动故障切换之前,会进行严格的条件检查,避免脑裂发生。守护进程一旦检测到脑裂发生,会马上强制退出主库,等待用户干预,避免数据差异进一步扩大。

2、产生脑裂的原因

造成脑裂的主要原因有两个:网络不稳定或错误的人工干预。

3、避免产生脑裂的建议

为了避免出现脑裂,我们建议:
(1) 设置 dm.ini 参数 ALTER_MODE_STATUS=0,限制用户进行直接通过 SQL 修改 数据库模式、状态以及 OGUID。
(2) 提供稳定、可靠的网络环境。
(3) 配置自动切换数据守护时,将确认监视器部署在独立的第三方机器上,不要与某一 个数据库实例部署在一起,避免由于网络问题触发自动故障切换,导致脑裂发生。
(4) 通过人工干预,将备库切换为主库之前,一定要确认主库已经发生故障,避免主库 活动情况下,备库强制接管,人为造成脑裂。

二、修复脑裂的读写分离集群

1、脑裂的现象

(1)监视器

在这里插入图片描述

(2)RWW_01

在这里插入图片描述

(3)RWW_02

在这里插入图片描述
观察监视器可以看到 ‘‘WCTLSTAT’’ 这列是 ‘‘Split’’ 的状态,’‘WCTLSTAT’’ 这列记录的是守护进程控制文件状态,包括 Valid/Split/Invalid 三种状态;并且还能够观察到RWW_01与RWW_02两个实例都为主库;

2修复集群

(1)关掉进程

先将监视器进程停掉,再将集群各节点的dmserver和dmwatcher进程停掉
在这里插入图片描述

(2)删掉分裂库生成的守护进程控制文件

守护进程在检测到本地库分裂时,自动创建 dmwatcher.ctl 文件,保存在本地库的 SYSTEM_PATH 路径下,并且文件中记录的状态一定是 Split 分裂状态。
如果 dmwatcher 加载到 dmwatcher.ctl 文件,则认为对应的库一定是分裂状态。如果需要对分裂库进行重建,则需要手动将 dmwatcher.ctl 文件删除,否则守护进程仍然会认定本地库为分裂库。
在这里插入图片描述

(3)备份RWW_02

[root@localhost bin]# ./dmrman
dmrman V8
RMAN> backup database '/opt/dmdbms/data/DAMENG/dm.ini' backupset '/opt/dmdbms/data/RWW_02_BAK';

在这里插入图片描述

(4)恢复RWW_01

将RWW_02的备份拷贝到RWW_01上
[dmdba@localhost bin]$ ./dmrman
dmrman V8
RMAN> restore database '/opt/dmdbms/data/DAMENG/dm.ini' from backupset '/opt/dmdbms/data/RWW_02_BAK';
RMAN> recover database '/opt/dmdbms/data/DAMENG/dm.ini' from backupset '/opt/dmdbms/data/RWW_02_BAK';
RMAN> recover database '/opt/dmdbms/data/DAMENG/dm.ini' update db_magic;

在这里插入图片描述

(5)配置RWW_01

1. 以mount模式前台启动RWW_01
 [dmdba@localhost bin]$ ./dmserver /opt/dmdbms/data/DAMENG/dm.ini mount
2.修改数据库模式
 [dmdba@localhost bin]$ ./disql
 SQL> alter database standby;
3.退出前台启动
 EXIT

在这里插入图片描述

(6)启动进程

将集群各节点的dmserver和dmwatcher进程启动
在这里插入图片描述
(7)通过监视器观察集群状态
前台启动监视器
在这里插入图片描述
通过观察监视器,可以观察到此时集群已恢复正常状态
(8)启动监视器
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RabbitMQ集群脑裂(Cluster Split Brain)是指在一个RabbitMQ集群中,由于网络分区或节点间通信故障等原因,导致集群中的节点无法正常通信,形成了多个子集群,每个子集群都认为自己是有效的集群,从而导致数据的不一致和消息的丢失。 当发生脑裂时,不同的子集群可能会继续处理消息,并在各自的子集群中进行消息传递和存储。这会导致消息的重复传递、顺序混乱以及数据的不一致性。当网络分区被修复时,不同的子集群可能会试图重新连接并合并,但由于数据和状态的不一致性,可能会导致冲突和错误。 为了避免RabbitMQ集群脑裂问题,可以采取以下措施: 1. 使用心跳机制:RabbitMQ节点之间可以通过定期发送心跳消息来检测彼此的可用性。如果节点在一段时间内未收到其他节点的心跳响应,则可以认为网络出现故障或节点失效,从而避免脑裂问题。 2. 配置集群节点:在搭建RabbitMQ集群时,需要正确配置节点之间的通信参数,包括节点名称、IP地址、端口等。确保节点之间可以正常通信,避免因网络配置错误而导致脑裂问题。 3. 使用Quorum队列:RabbitMQ从3.8版本开始引入了Quorum队列,它使用多数投票算法来避免脑裂问题。Quorum队列提供了更强的数据一致性和容错能力,可以自动处理网络分区和节点失效的情况。 4. 监控和故障排除:定期监控RabbitMQ集群的运行状态,及时发现并处理可能导致脑裂问题的异常情况。同时,建立完善的故障排除机制,快速恢复集群的正常运行。 需要注意的是,尽管采取了预防措施,但在复杂的网络环境中,仍然无法完全排除脑裂问题的发生。因此,在设计分布式系统时应考虑到脑裂问题,并采取相应的容错和恢复策略来确保系统的可用性和数据一致性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值