Linux高可用性方案之Heartbeat的Stonith配置
前言
前一阵,在为广发银行搭建HA集群时,客户总希望在出现脑裂问题后能很好的解决。当时由于没有深刻的理解heartbeat的各个模块,crm、ccm、ipfail各个插件试试得我是晕头转向的,最后的解决方式是加了两根心跳线。说白了,还是没解决,只是在心跳监测方面更加强壮而已,这里笔者介绍Stonith这个模块,以解决脑裂问题。
脑裂
当群集发生裂脑的状况时候,因为无法进行任何沟通而误会对方无法运作,所以主与备份服务器都会启动浮动IP和相关服务,此时若两部服务器对外连线亦未短线,那么势必导致有些使用者存取的是主要服务器,另外一些则存取备份服务器的情形。此外,如果两部服务器共享一个存储装置,发生裂脑时两部服务器会同时挂载该存储装置,亦同时存取相同的档案,因此若共享存储装备缺乏良好的锁定机制,更可能使得存储装置上的档案因同时读写而损坏。更有可能导致硬盘中写入不一致的信息,导致后期数据错误,甚至整个数据库损坏,后果不堪设想。
避免裂脑的方法有两个:第一个方法是在服务器间使用多重连线;第二个则是使用heartbeat的STONITH功能。
Stonith概述
stonith是“shoot the other node in the head”的首字母简写,它是Heartbeat软件包的一个组件,它允许使用一个远程或“智能的”连接到健康服务器的电源设备自动重启失效服务器的电源,stonith设备可以关闭电源并响应软件命令,运行Heartbeat的服务器可以通过串口线或网线向stonith设备发送命令,它控制高可用服务器对中其他服务器的电力供应,换句话说,主服务器可以复位备用服务器的电源,备用服务器也可以复位主服务器的电源。
注意:尽管理论上连接到远程或“智能的”循环电源系统的电力设备的数量是没有限制的,但大多数stonith实现只使用两台服务器,因为双服务器stonith配置是最简单的,最容易理解,它能够长时间运行且不会降低系统的可靠性和高可用性。
查看当前支持Stonith设备清单的命令:
#/usr/sbin/stonith -L
想要使用stonith功能需要安装 heartbeat-pils-*.rpm和rpm -ivh hearbeat-stonith-*.rpm
配置stonith设备
在Heartbeat中使用stonith和stonith_host这两个指令来配置stonith设备
stonith语法如下
stonith {stonith-device-type} {stonith-configuration-file}
其中stonith-device-type为stonith设备的类型,而stonith-configuration-file为stonith设备的配置信息文件。例如:
stonith baytech /etc/ha.d/conf/stonith.baytech.
stonith_host语法如下
stonith_host {hostfrom} {stonith_type} {params...}
其中 hostfrom为和stonith设备相连的主机可以使用*代表所有主机,stonith_type为stonith设备的类型,可通过stonith -L查看, params为stonith设备所需要的参数。例如
stonith_host smart403 apcsmart smart404 /dev/ttyS1
单个Stonith设备
正常情况下,高可用配置使用两个stonith设备构造(一个连接到主服务器,一个连接到备用服务器)但是,这里我们先来探讨如何使用单个stonith设备部署Heartbeat,它将在你的高可用配置中引入两个重要的限制:
1、 所有资源必须运行在主服务器上(在主服务器在线时不允许在备用服务器上运行资源)。
2、 故障转移事件只能发生一次,并只能朝一个方向转移,也就是说,运行在主服务器上的资源只能故障转移到备用服务器一次,当备用服务器取得了资源的所有权时,关闭主服务器,要恢复到主服务器正常运行必须要操作员干预。
当你只使用一个stonith设备时,你必须在主服务器上运行所有的高可用资源,因为主服务器不能复位备用服务器的电源(当主服务器从故障中恢复后想要取回资源的所有权时,它需要复位备用服务器的电源),也就是说,备用服务器上的资源在没有第二个stonith设备时不是高可用的,在使用单个stonith设备时,故障转移后,也需要操作员干预,因为主服务器将关闭。
正常情况下,主服务器广播它的心跳,备用服务器听到心跳就知道一切都运行正常,但当备用服务器听不到主服务器的心跳时,它向stonith设备发送恰当的软件命令循环主服务器上的电源
Stonith事件序列
1、当备用服务器听不到心跳时Stontih事件开始。
注意:这并不一定意味着主服务器没有发送心跳,心跳可能有多种原因而没有抵达备用服务器,这就是为什么建议至少需要两条物理路径传输心跳以避免出现假象的原因了。
2、备用服务器发出一个Stonith复位命令到Stonith设备。
3、Stonith设备关闭主服务器的电力供应。
4、一经切断主服务器的电源,它就不能再访问集群资源,也不能再为客户端提供资源,保证客户端计算机不能访问主服务器上的资源,排除可能发生的头脑分裂状态。
5、然后备用服务器获得主服务器的资源,Heartbeat用start参数运行资源脚本,并执行ARP欺骗广播以便客户端计算机发送它们的请求到它的网络接口上。
一旦主服务器完成重启,它会尝试回收它的资源,要求备用服务器释放资源,除非两台服务器都关闭了auto_failback选项
推荐阅读: