分布式系统

Heartbeat 裂脑

2017-01-24  本文已影响495人  _阿聪

什么是裂脑

由于某些原因,导致两台高可用服务器之间在指定时间内,无法互相检测到对方心跳而各自启动故障转移功能,取得了资源及服务的所有权,而此时的两台高可用服务器都还活着并在正常运行,这样就会导致同一个IP或服务在两端同时启动而发生冲突的严重问题,最严重的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这样可能会导致服务器两端的数据不一致或造成数据丢失,这种情况就被称为裂脑,也有人称其为分区集群或大脑垂直分割,英文为 split brain。

导致裂脑发生的多种原因

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

提示: 另外的高可用软件 keepalived 配置里如 virtual_router_id 参数,两端配置不一致也会导致裂脑问题发生

防止裂脑发生的几种方法

发生裂脑时,对业务的影响是及其严重的,有时甚至是致命的,如:两台高可用服务器之间发生裂脑,导致互相争用同一 IP 资源,就如同我们在局域网内常见的 IP 地址冲突一样,两个机器就会有一个或者两个都不正常,影响用户正常访问服务器。如果是应用在数据库或者存储服务这种极重要的高可用上,那就可能会导致用户发布的数据间断的写在两台不同服务器上的恶果,最终数据恢复极困难或难以恢复(当然,有NAS等公共存储的硬件也许会好一些)

实际生产环境中,我们可以从以下几个方面来防止裂脑问题的发生:

小结:如何开发程序判断裂脑

仲裁机制

仲裁机制就是通过第三方来控制HA 主节点和备节点的电源,防止裂脑情况发生,相当于法院的角色

小结:
在HA节点之间无法通信(心跳出现问题)的时候做以下操作:

Stonith介绍

Stonith 是“shoot the other node in the head” 的首字母简写,它是 Heartbeat 软件包的一个组件,它允许使用一个远程或“智能的”连接到健康服务器的电源设备自动重启失效服务器的电源,Stonith 设备可以关闭电源并响应软件命令,运行Heartbeat 的服务器可以通过串口线或网线向 Stonith 设备发送命令,它控制高可用服务器对其他服务器的电力供应,也就是主服务器可以复位备用服务器的电源,备用服务器也可以复位主服务器的电源。

注意: 尽管理论上连接到远程或“智能的”循环电源系统电力设备的数量是没有限制的,但大多数 Stonith 实现只使用两台服务器,因为双服务器 Stonith 配置是最简单的,最容易理解,它能够长时间运行且不会降低系统的可靠性和高可用性。

Stonith 事件触发工作步骤
上一篇 下一篇

猜你喜欢

热点阅读