在没有stonith设备下使用heartbeat实现高可用的原理和测试
如何在使用Heartbeat做HA,但有没有stonith硬件设备,想尽可能地避免闹裂,使架构更稳定?很简单,使用冗余心跳线路,使用Ping 服务器等手段。172.16.68.129
|
eth0 172.16.68.128
eth1 172.16.0.254 <---------------------
eth2 10.1.1.19 |
| |
|vip:10.1.1.17 |
eth0 10.1.1.21/————- 172.16.0.201---|
eth1 172.16.0.3
| 两条心跳线路 |
eth0 10.1.1.18
eth1 172.16.0.2 |
\————- 172.16.0.202---|
http://www.upl.com–> 10.1.1.17
在双心跳线路的情况下,测试是否会发生资源切换:
ucast eth1 172.16.0.2
ucast eth2 192.168.40.2
1、拔掉主服务器上的电源
资源会切换到备机器
2、测试hb_standby
该指令执行成功,ipfail插件才能工作正常。
手工把资源切换到另外一个节点
/usr/share/heartbeat/hb_standby
手工把资源切换到本机
/usr/share/heartbeat/hb_takeover
3、关闭主服务上生产网络的网卡(vip所在网络)
不能简单判断是否切换,因为还要参考ping server所在网络。
参考思考题3
4、切断两台服务器之间的其中一条心跳线
不会切换。
5、切断两台服务器之间的所有心跳线
备机器由于接受到来自主机器的心跳信号,所以会接管资源,但主机器也不知道备机器已经拥有了资源,所以会出现“脑列”
6、杀死主服务器上所有的heartbeat进程
skill -9 heartbeat
会把资源强过去。主机器上面绑定的vip不会撤销。
正常情况下,如果是通过service heartbeat stop退出,那么退出前会把资源让给备机器,然后在结束进程。
解决:使用看门狗(soft watchdog)
两个节点相同的配置:
# service heartbeat stop
# vim ha.cf
watchdog /dev/watchdog
# service heartbeat start
加载软件看门狗模块
# modprobe softdog
设置看门狗的超时时间(如果超过该时间,heartbeat没有给狗设备信号,就重启计算机)
# echo “10″ > /proc/sys/kernel/panic
验证:在其中节点杀掉所有进程
# skill -9 heartbeat
7、两台服务器都重启
前提:要求heartbeat开机启动。
步骤: 先重启备机器,然后关闭主机器,紧接着备机器的heartbeat已经启动完成并且过来超过两分钟,然后再把主机器启动。
两分钟与 initdead=120
auto_failback=off:
备机器接管了资源,主机器启动后不会接管资源
auto_failback=on:
备机器接管了资源,主机器启动后会主动接管资源,告诉备机器让出资源。
单心跳线路下思考的:
生产网络在:A
心跳网络:B
Ping server
1、如果心跳网络和ping server是同一个网络,那么如果心跳网络有问题,会有什么现象?如何解决?
现象:双方都收不到心跳信号,认为对方已死,所以导致脑裂
解决:
方法1: 双心跳网络。
方法2:添加硬件的stonith(fence)。
原理:由一开始,就是由主机器发送心跳给备机器,心跳网络出问题,备机器认为主机器死了,然后备机器会发指令让stonith设备重启或者关闭主机器,方向是单向,只能备机器关闭主机器。
2、如果ping server是处于生产网络上的,而心跳网络现在出问题。又会现出什么现象?如何解决?
跟上面的结果是一样。解决方法也是一样。在这种情况,ping server不起作用。
结论:整个架构还是以心跳信号作为故障判断主要依据。
3、ping server处于生产网络,而心跳网络没有问题,但生产网络出现故障。会出现什么现象?
ping server 到底是什么一个角色?
作用: 辅助判断是否是出现网络故障。用到的插件ipfail.
如果节点node1与ping server失去联系(生产网络故障),该节点node1就会通过心跳网络问另外一个节点node2是否与ping server通信正常。如果另外一个节点node2能够通信正常,那么该节点node1就知道自己出现网络故障,就会把资源主动让给另一个节点node2
页:
[1]