------  什么是脑裂(split-brain)

在"双机热备"高可用(HA)系统中,当联系两个节点的"心跳线"断开时(即两个节点断开联系时),本来为一个整体、动作协调的HA系统,就分裂成为两个独立的节点(即两个独立的个体)。由于相互失去了联系,都以为是对方出了故障,两个节点上的HA软件像"裂脑人"一样,"本能"地争抢"共享资源"、争起"应用服务"。就会发生严重后果:1)或者共享资源被瓜分、两边"服务"都起不来了;2)或者两边"服务"都起来了,但同时读写"共享存储",导致数据损坏(常见如数据库轮询着的联机日志出错)。

两个节点相互争抢共享资源,结果会导致系统混乱,数据损坏。对于无状态服务的HA,无所谓脑裂不脑裂,但对有状态服务(比如MySQL)的HA,必须要严格防止脑裂

[但有些生产环境下的系统按照无状态服务HA的那一套去配置有状态服务,结果就可想而知]。

------   集群脑裂产生的原因

一般来说,裂脑的发生,有以下几种原因:

1. 高可用服务器各节点之间心跳线链路发生故障,导致无法正常通信。

2. 因心跳线坏了(包括断了,老化)。

3. 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。

4. 因心跳线间连接的设备故障(网卡及交换机)。

5. 因仲裁的机器出问题(采用仲裁的方案)。

6. 高可用服务器上开启了iptables防火墙阻挡了心跳消息传输。

7. 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。

8. 其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。

提示: Keepalived配置里同一VRRP实例如果virtual_router_id两端参数配置不一致也会导致裂脑问题发生。

------  如何预防HA集群脑裂   [目前达成共识的有下面四种对策]

第一种:添加冗余的心跳线 [即冗余通信的方法]

同时使用串行电缆和以太网电缆连接,同时用两条心跳线路 (即心跳线也HA),这样一条线路坏了,另一个还是好的,依然能传送心跳消息,尽量减少"脑裂"现象的发生几率。

第二种方法:设置仲裁机制

当两个节点出现分歧时,由第3方的仲裁者决定听谁的。这个仲裁者,可能是一个锁服务,一个共享盘或者其它什么东西。例如设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅"心跳"、还兼对外"服务"的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。

第三种方法:fence机制  [即共享资源的方法] [前提是必须要有可靠的fence设备]

当不能确定某个节点的状态时 ,通过fence设备强行关闭该心跳节点,确保共享资源被完全释放!相当于Backup备节点接收不到心跳信息,通过单独的线路发送关机命令关闭主节点的电源。

理想情况下,以上第二、三两者一个都不能少。但是如果节点没有使用共享资源,比如基于主从复制的数据库HA,也可以安全的省掉fence设备,只保留仲裁,而且很多时候线上环境里也也可能没有可用的fence设备,比如在云主机里。

那么可不可以省掉仲裁机制,只留fence设备呢?这是不可以的。因为,当两个节点互相失去联络时会同时fencing对方。如果fencing的方式是reboot,那么两台机器就会不停的重启。如果fencing的方式是power off,那么结局有可能是2个节点同归于尽,也有可能活下来一个。但是如果两个节点互相失去联络的原因是其中一个节点的网卡故障,而活下来的正好又是那个有故障的节点,那么结局一样是悲剧。所以说: 单纯的双节点,无论如何也防止不了脑裂。

第四种:启用磁盘锁

正在服务一方锁住共享磁盘,"裂脑"发生时,让对方完全"抢不走"共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动"解锁",另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了"智能"锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。

检查脑裂脚本

可以ping通主 备份节点上有vip 说明是脑裂了

#!/bin/sh

while true

do

ping -c 2 -w 3 主ip &>/dev/null

if [ $? -eq 0 -a `ip add|grep vip |wc -l` -eq 1 ]

then

echo "ha is split brain.warning."mail -s 异常告警-keepalived  xxxxxx@qq.com

else

echo "ha is ok"

fi

sleep 5

done

mysql脑裂_高可用 脑裂问题相关推荐

  1. mysql横向扩展_高可用MySQL学习笔记-面向横向扩展的MYSQL复制

    负载增加时,有两个解决办法.一个是购买更加强大的服务器来应对增加的负载,称为"纵向扩展"(scale up):二是添加更多的服务器,称为"横向扩展"(scale ...

  2. keepalived mysql双主架构图_基于MySQL双主的高可用解决方案理论及实践

    MySQL在互联网应用中已经遍地开花,但是在银行系统中,还在生根发芽的阶段.本文记录的是根据某生产系统实际需求,对数据库高可用方案从需求.各高可用技术特点对比.实施.测试等过程进行整理,完善Mysql ...

  3. MySQL主流高可用解决方案有_高可用MySQL解决方案概述

    数据库作为最基础的数据存储服务之一,在存储系统中有着非常重要的地位,因此要求其具备高可用性无可厚非.能实现不同SLA(服务水平协定)的解决方案有很多种,这些方案可以保证数据库服务器在硬件或软件出现故障 ...

  4. 《MySQL性能优化和高可用架构实践》简介与推荐序

    #好书推荐##好书奇遇季#<MySQL性能优化和高可用架构实践>,京东当当天猫都有发售.腾讯云架构师宋立桓倾情奉献,定价59元,网店打折销售其实没多少钱. 互联网公司里面几乎很少有公司不用 ...

  5. 基于heartbeat v1配置mysql和httpd的高可用双主模型

    一.配置高可用集群的前提:(以两节点的heartbeat为例) ⑴时间必须保持同步 ⑵节点之间必须用名称互相通信 建议使用/etc/hosts,而不要用DNS 集群中使用的主机名为`uname -n` ...

  6. 《MySQL性能优化和高可用架构实践》阅读总结

    文章目录 介绍 第1章 MySQL架构介绍 1.1 MySQL简介 1.2 MySQL主流的分支版本 1.3 MySQL存储引擎 1.4 MySQL逻辑架构 1.5 MySQL物理文件体系结构 第2章 ...

  7. mysql性能调优 高可用_MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案...

    第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...

  8. mysql 双主 脑裂_MySQL高可用方案——双主

    MySQL高可用方案--双主 发布时间:2020-03-01 20:45:48 来源:51CTO 阅读:253 作者:warrent MySQL的高可用方案有很多种,双主.MHA.MMM等等,这里只是 ...

  9. mysql 解决脑裂_解决keepalived脑裂问题

    解决keepalived脑裂问题 一.介绍 脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共 ...

最新文章

  1. 通过Soul看微内核架构(二)
  2. 4大工业物联网网络的实施战略
  3. 【算法】N Queens Problem
  4. java 调用linux 脚本并获取返回值
  5. 11.4. String 字符串处理
  6. 【数据分析就业实战】——缺失值的常见处理方法
  7. java8 stream().map().collect()用法
  8. Lock应用之 读写锁
  9. 如何使用LDAP用户单点登录到Horizon桌面和应用
  10. 入职抖音之后,我变强了,但是营养也有点跟不上了...
  11. Security+ 学习笔记13 加密基础
  12. AJAX做一个动态进度条
  13. debain服务器系统用什么,建站服务器系统用CentOS还是Debian 适合自己才好
  14. Camera和Image sensor技术基础笔记(3) -- 色彩空间,CFA,bayer数据处理
  15. java基础-异或运算
  16. word方框怎么打勾?
  17. 百度开源地图服务器搭建
  18. otter自定义数据同步踩坑实录
  19. 黑马程序员------毕老师视频笔记第13-17天------集合Collection-Set-(HashSet、TreeSet)
  20. 高级控件——列表类视图——列表视图ListView

热门文章

  1. 04-Python之文件、异常和模块
  2. pycharm4.5.3版本破解
  3. SpringCloud 配置${spring.cloud.client.ipAddress}
  4. 趣题:椭圆焦点到两切线交点的连线平分焦点对两切点的张角
  5. ifttt 编程开发_使用Stamplay构建AngularJS应用:面向开发人员的IFTTT
  6. PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第三篇(分数)
  7. Vue实现自动横向滚动,简单易上手
  8. 字符串映射类not support type错误
  9. 【Electron】酷家乐客户端开发实践分享 — 进程通信
  10. 第八届蓝桥杯单片机省赛