http://blog.csdn.net/heianemo/article/details/8439813

split brain实际上是指在某种情况下,造成drbd的两个节点断开了连接,都以primary的身份来运行。当drbd某

primary节点连接对方节点准备发送信息的时候如果发现对方也是primary状态,那么会会立刻自行断开连接,并认定

当前已经发生split brain了,这时候他会在系统日志中记录以下信息:“Split-Brain detected,dropping

connection!”当发生split brain之后,如果查看连接状态,其中至少会有一个是StandAlone状态,另外一个可能也是

StandAlone(如果是同时发现split brain状态),也有可能是WFConnection的状态。

mfs-master�0�2为主,mfs-log为辅;我个人觉得这个DRBD脑裂的行为,也应该是前期人为或是故障切换造成的,

如HA。今天在做HA+DRBD+MFS的时候,模拟mfs-master宕机看是否会自动切换的时候出现了drbd错误

在mfs-master机上�0�2断开primary�0�2�0�2down机或是断开网线

查看secondary机器的状态

查看挂载

[root@mfs-log mfs]# �0�2mount
/dev/drbd1 on /usr/local/mfs type ext3 (rw)
挂载也成功了,但是数据有问题,所以就先恢复mfs-master的drbd,我这里也就是启用网卡

原来的primary机器好了,出现脑裂了drbd1现在是standalone,这个时候,主跟辅是不会相互联系的

[root@mfs-master ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by mockbuild@builder10.centos.org, 2012-
05-07 11:56:36
m:res cs ro ds p mounted fstype
1:r0 StandAlone Primary/Unknown UpToDate/DUnknown r----- ext3
这个时候,如果尝试把drbd2的drbd服务重启的话,你就会发现根本无法起来!

[root@mfs-log mfs]# service drbd start
Starting DRBD resources: [ ]..........
***************************************************************
DRBD's startup script waits for the peer node(s) to appear.
- In case this node was already a degraded cluster before the
reboot the timeout is 0 seconds. [degr-wfc-timeout]
- If the peer was available before the reboot the timeout will
expire after 0 seconds. [wfc-timeout]
(These values are for resource 'r0'; 0 sec -> wait forever)
To abort waiting enter 'yes' [ 487]:
原因分析

由于节点重启导致数据不一致,而配置文件中没有配置自动修复错误的内容,因而导致握手失败,数据无法同步。

split brain有两种解决办法:手动处理和自动处理。

手动处理:

两端节点上停止heartbeat

Heartbeat会锁定资源,只有停止后才能释放

[root@mfs-master ~]#�0�2/etc/init.d/heartbeat stop
在作为mfs-log的节点上放弃该资源的数据

[root@mfs-log ~]# drbdadm disconnect r0
[root@mfs-log ~]# drbdadm secondary r0
[root@mfs-log ~]# drbdadm -- --discard-my-data connect r0
然后在mfs-master(drbd1)上重连接资源:

[root@mfs-master ~]# drbdadm disconnect r0
[root@mfs-master ~]# drbdadm connect r0
把mfs-master设置为主节点

[root@mfs-master ~]# drbdadm primary r0
启动mfs-log(drbd2)上的drbd服务

[root@mfs-log mfs]# service drbd start
Starting DRBD resources: [ n(r0) ].
(实际采用的恢复方法)

先选择好一个备机,在备机上执行:

drbdadm secondary r0
drbdadm disconnect r0
drbdadm -- --discard-my-data connect r0
在主上执行:

drbdadm connect r0
查看主节点的状态�0�2显示为Primary,已经恢复了正常

[root@mfs-master ~]# cat /proc/drbd
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by mockbuild@builder10.centos.org, 2012-
05-07 11:56:36
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:28672 nr:0 dw:1 dr:28805 al:1 bm:4 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
然后查看备份机的状态:显示Secondary,恢复正常

[root@mfs-log ~]# cat /proc/drbd
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by mockbuild@builder10.centos.org, 2012-
05-07 11:56:36
1: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:0 nr:28672 dw:28672 dr:0 al:0 bm:4 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
自动处理

通过/etc/drbd.conf配置中设置自动处理策略,在发生数据不一致时自动处理。自动处理策略定义如下:

1 after-sb-0pri.
当两个节点的状态都是secondary时,可以通过after-sb-0pri策略自动恢复。

1)disconnect
默认策略,没有自动恢复,简单的断开连接。

2)discard-younger-primary
在split brain发生前从主节点自动同步。

3)discard-older-primary
在split brain发生时从变成primary的节点同步数据。

4)discard-least-changes
在split brain发生时从块最多的节点同步数据。

5)discard-node-NODENAME
自动同步到名字节点

2 after-sb-1pri
当两个节点的状态只有一个是primary时,可以通过after-sb-1pri策略自动恢复。

1)disconnect
默认策略,没有自动恢复,简单的断开连接。

2)consensus
丢弃secondary或者简单的断开连接。

3)discard-secondary
丢弃secondary数据。

4)call-pri-lost-after-sb
按照after-sb-0pri的策略执行。

3 after-sb-2pri
当两个节点的状态都是primary时,可以通过after-sb-2pri策略自动恢复。

1)disconnect
默认策略,没有自动恢复,简单的断开连接。

2)violently-as0p
按照after-sb-0pri的策略执行。

3)call-pri-lost-after-sb
按照after-sb-0pri的策略执行,并丢弃其他节点。

配置自动恢复

编辑/etc/drbd.conf,找到resource r0部分添加到net选项里面,配置策略如下,所有节点完全一致。

#after-sb-0pri disconnect;
after-sb-0pri discard-younger-primary;
注:当两个节点的状态都是secondary时,可以通过after-sb-0pri策略自动恢复

在split brain发生前从主节点自动同步。

#after-sb-1pri disconnect;
after-sb-1pri discard-secondary;
注:当两个节点的状态只有一个是primary时,可以通过after-sb-1pri策略自动恢复。

丢弃secondary数据。

#after-sb-2pri disconnect;
after-sb-2pri call-pri-lost-after-sb;
注:当两个节点的状态都是primary时,可以通过after-sb-2pri策略自动恢复。

按照after-sb-0pri的策略执行,并丢弃其他节点。

drbd脑裂问题处理的更多相关文章

  1. drbd脑裂

    环境: Primary    节点:node1Secondary  节点:node2 DRBD产生脑裂的原因:    (1. 采用HA环境的时候自动切换导致脑裂;    (2. 人为操作或配置失误,导 ...

  2. centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课

    centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课 heartbeat是Linu ...

  3. [译]如何防止elasticsearch的脑裂问题

    本文翻译自blog.trifork.com的博文 地址是http://blog.trifork.com/2013/10/24/how-to-avoid-the-split-brain-problem- ...

  4. 如何防止ElasticSearch集群出现脑裂现象(转)

    原文:http://xingxiudong.com/2015/01/05/resolve-elasticsearch-split-brain/ 什么是“脑裂”现象? 由于某些节点的失效,部分节点的网络 ...

  5. 高可用性中的脑裂问题(split-brain problem in HA)(转)

    欢迎关注我的社交账号: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://gith ...

  6. Zookeeper 脑裂

    转自 http://blog.csdn.net/u010185262/article/details/49910301 Zookeeper zookeeper是一个分布式应用程序的协调服务.它是一个为 ...

  7. AIX下解决POWERHA的脑裂问题

    一.安装创建并发vg时必需的软件包clvm包,该包安装.升级.后必须重启os clvm包的描述:Enhanced Concurrent Logical Volume Manager 软件包在aix61 ...

  8. Elasticsearch笔记八之脑裂

    Elasticsearch笔记八之脑裂 概述: 一个正常es集群中只有一个主节点,主节点负责管理整个集群,集群的所有节点都会选择同一个节点作为主节点所以无论访问那个节点都可以查看集群的状态信息. 而脑 ...

  9. ZooKeeper 03 - ZooKeeper集群的脑裂问题 (Split Brain问题)

    目录 1 ZooKeeper的主从机制 2 什么是ZooKeeper的脑裂 2.1 脑裂现象的表现 2.2 为什么会出现脑裂 3 ZooKeeper如何解决"脑裂" 3.1 3种可 ...

随机推荐

  1. ShellExecute函数的问题

    情境:自己写了一个loading画面,定时器到时间后调用shellexecute函数调用真正的程序. 问题:调用时出错,说找不到dll资源,但是用鼠标双击确可以打开. 经过分析之后,应该是路径的问题, ...

  2. Struts2工作原理及流程

    Struts2是基于MVC设计模式的JavaWeb 框架技术. 基于Struts2开发Java Web项目的主要步骤如下: (1)在web.xml中配置FilterDispatcher. (2)设计和 ...

  3. DevExpress WPF入门指南:DXWindow应用

    [DevExpress v17.2 版本更新公开课]点击免费报名 DevExpress WPF Window control有一点非常棒,就是可以和其他视觉主题保持统一性.DXWindow class ...

  4. NodeJS 难点(网络,文件)的 核心 stream 二:stream是什么

    对于大部分有后端经验的的同学来说 Stream 对象是个再合理而常见的对象,但对于前端同学 Stream 并不是那么理所当然,github 上甚至有一篇 9000 多 Star 的文章介绍到底什么是 ...

  5. Linux上安装编译工具链

    在Linux上安装编译工具链,安装它会依赖dpkg-dev,g++,libc6-dev,make等,所以安装之后这些依赖的工具也都会被安装.ubuntu软件库中这么描述 Informational l ...

  6. E - 追求

    经历了那晚的竹林深处相识后静竹对数学念念不忘,产生了好感!为了追求数学,她想到了一招,要想搞定女友,搞定闺中密友.于是,她秘密与数学的好友斐波那契见面了.学数学的真是不一样,斐波那契的出现前提也是需要 ...

  7. 各大公司java后端开发面试题

    各大公司Java后端开发面试题总结 ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量.采用空间换时间,它用于线程间的数据隔离 ...

  8. HDU 4185

    http://acm.hdu.edu.cn/showproblem.php?pid=4185 两个挨着的'#'可以配成一对,求最多能配成几对 挨着的'#'就连边,然后求一次最大匹配,答案是最大匹配除以 ...

  9. 日志的处理 —— 使用 log4j

    通过 log4j,日志信息不仅打印到 console,而且输出到指定文件,根据配置信息: <dependency> <groupId>log4j</groupId> ...

  10. 强化学习 reinforcement learning: An Introduction 第一章, tic-and-toc 代码示例 (结构重建版,注释版)

    强化学习入门最经典的数据估计就是那个大名鼎鼎的  reinforcement learning: An Introduction 了,  最近在看这本书,第一章中给出了一个例子用来说明什么是强化学习, ...