如何在使用Heartbeat做HA,但有没有stonith硬件设备,想尽可能地避免闹裂,使架构更稳定?很简单,使用冗余心跳线路,使用Ping 服务器等手段。

[client] 172.16.68.129
    |
   eth0 172.16.68.128
[router] eth1 172.16.0.254 <---------------------
   eth2 10.1.1.19          |
   |            |
    |vip:10.1.1.17       |
eth0 10.1.1.21  /————-[web1] 172.16.0.201---|
[Diretor] eth1 172.16.0.3
 | 两条心跳线路       |
eth0 10.1.1.18
[Backup Diretor] eth1 172.16.0.2                  |
   \————-[web2] 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