HA 脑裂原理

“裂脑”,乃一个形象的术语,系HA系统危机情景。

引子:“裂脑”是治疗“癫痫”病的一种手术。医生们认为癫痫病发作是由于大脑“异常放电”所至。为了阻止“异常放电”波及整个大脑(左、右半脑),就用手术来割断病人左右脑的连接神经。使病人在发病时至少还有半个大脑正常、能控制行为。但施行过手术的所谓“裂脑人”在术后有一段不适应期,表现得行为分裂,仿佛体内存在着2个人,时常要发生冲突。例如,右脑想让一只手去脸上挠痒痒,左脑却不认同、以为是谁的手要“登鼻子上脸”就让另一只手去阻止,于是明明是自己的2只手,却互不相让、扭在一起扳起了手腕...传说中的左右手互博就这样诞生了!!

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

对付HA系统“裂脑”的对策,目前达成共识的的大概有以下几条:
1)添加冗余的心跳线,例如:双线条线(心跳线也HA),尽量减少“裂脑”发生几率;
2)启用磁盘锁。正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。
3)设置仲裁机制。例如设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。

最新文章

  1. 提取bmp图片的颜色信息,可直接framebuffer显示(c版本与python版本)
  2. TCPL 札记
  3. MVP的PV模式与SC模式
  4. iOS 隐藏/去掉 导航栏返回按钮中的文字
  5. javaweb学习总结(四)——Http协议
  6. Python 基础语法(二)
  7. mfc110ud.dll not found
  8. String.Format格式说明
  9. Android学习之路——简易版微信为例(二)
  10. jQuery+PHP掷色子抽奖
  11. 【异构计算】GPU与CPU
  12. JQ万能轮播图
  13. [面试]StringBuilder StringBuffer源码粘贴(并非源码分析, 请绕道)
  14. 基于jQuery实现点击列表加载更多效果
  15. MySQL中使用like查找汉字 Incorrect string value 解决办法
  16. overflow的使用
  17. javascript/css压缩工具---yuicompressor使用方法
  18. 理清Processor, Processor Sockets, Processor Cores, Logical Processors, Hyperthreading这些概念吧
  19. HDUOJ----(1175)连连看
  20. 使用cocostudio 需要在Android.mk文件的配置

热门文章

  1. 创建动作action类:
  2. Spring入门之通过注解 处理 数据库事务
  3. mac与phy怎样实现网络自适应
  4. 【转载】C#时间差的计算,精确输出“年月天时分秒”
  5. java微信开发API解析(四)-自己定义菜单以及个性化菜单实现
  6. LoadRunner 测试java代码
  7. 在ios中运用core animation暂停和继续动画
  8. hdu5646(数学)
  9. n++ ++n
  10. oracle 创建表并添加注释