通过使用rhcs搭建oracle与weblogic双机互备系统,感觉rhcs中的fencing device与心跳的配置比较难理解,现将我收集的这方面资料总结到本文中。

 

一、关于fencing device

搜集关于fencing device 见解:

1,为什么要用到fence设备?

因为纯软件并不能实现真正意义上的HA,为了解决脑列现象,所以需要硬件的支持。

2 ,RHCS fence设备的分类?

通常分为2类:

常见的内部fence设备有:

IBM服务器提供的RSAII卡设备
HP服务器提供的iLO卡
DELL服务器提供的DRAC卡
智能平台管理接口IPMI
常见的外部fence设备有:
UPS
SAN SWITCH,
NETWORK SWITCH

对于外部fence 设备,可以做拔电源的测试,因为备机可以接受到fence device返回的信号,备机可以正常接管服务,
对于内部fence 设备,不能做拔电源的测试,因为主机断电后,备机接受不到主板芯片做为fence device返备的信号,就不能接管服务,clustat会看到资源的属主是unknow,查看日志会看到持续报fence failed的信息。

 

rhcs有个奇怪的装置「Fencing Device」,「Fencing Device」可能是大家最
陌生的,因为其它Unix 的HA Solution 并不需要此装置。先不要管Fence 中文意义是什么「栅栏、篱笆」,等一下笔者再解释为什么叫Fencing Device。RHCS中提到的Fencing Device,是一种可以直接对服务器做电源Power ON/Power OFF的装置,注意笔者说的是「电源」,不是去执行操作系统的开关机指令。RHCS支持的Fencing Device 很多,不过有些并不常见,例如有种电源延长线,你可以用telnet 指令,对某一个插座做Power ON/Power OFF 的动作,那么接在这个位置上的服务器不管操作系统是否完全无反应(有时服务器loading 过重,会连ssh也无法登入)都会重开机,这种电源延长线有时我们称作NPS(Network Power Switch)。不过NPS,在台湾使用的人很少,就笔者所接触的案子,客户通常是采购本身有支持IPMI 的服务器,直接用服务器IPMI 的功能,或是额外购买IBMRSAII 卡或是HP iLO 卡。
说了那么多,还是没解释为什么要「Fencing Device」,别急,也看一下原厂文
件的说明。
「Fencing is the disconnection of a node from the cluster's shared storage. Fencing cuts off I/O from shared storage, thus ensuring data integrity. 」
为什么RHCS 需要「Fencing Device」,最主要是避免一种情况发生,什么情况
呢?实务上,尤其是数据库服务器可能会遇到这种情况,就是服务器loading 过
重,完全无反应,连heartbeat 也无法传递,但此时服务器可能不是真的挂掉,
笔者开玩笑的说法是「假死」,经过一段时间,loading 没那么重时,又会活过
来,heartbeat 又可以传递。但是RHCS 的机制,只要发现主服务器的heartbeat不通,读者可以把heartbeat 想成备援服务器每隔时间就会ping 主服务器(实际上RHCS 并不是用ping 的指令),就像是去聆听心跳,如果没有响应(Missedtoo many heartbeats),就判断主服务器死了,那么备援服务器便会着手接管Service。但是万一主服务器是假死,但Service 中有包含File system resource ,那么可能会造成两台服务器同时挂载File system,就会造成文件系统数据不一致,严重的话可能会毁损整个文件系统。
RHCS为了避免这种情况,想出了一个办法,就是「Fencing Device」,当RHCS
发现主服务器的heartbeat 不通(Missed too many heartbeats),第一件事不是着手接管Service,而是利用「Fencing Device」将主服务器重开机Power
ON/Power OFF,笔者常开玩笑说,这样一来,假死就变成真死了,也不可能发
生主服务器还挂载File system resource 的情况。
现在,读者应该可以体会为什么要称为「Fencing Device」,Fencing 有隔离/围起来的意思,就是当服务器假死或是无法umount File system 时,就把它隔离起来让它无法读取File system resource.

 

二、关于心跳

使用RHCS,心跳是存在的。其实就是你的/etc/hosts中指定的主机名称所对应的IP地址就是心跳链路,同时也对应/etc/cluster/cluster.conf中的node名称。

你在添加主机名称的时候,就是让你填写心跳网络。通常rhcs有两块或者两块以上的网卡,你在hosts文件里面写着

10.10.10.1 web1.example.com

10.10.10.2 web2.example.com

那么当你在添加节点时填写web.example.com就等于指定10.10.10.1为心跳网络。