1.摘要

          学习任何一门技术,都需要反复推敲其原理,然后通过测试、再结合其原理进行仔细揣摩,最终达到精通,这个过程需要时间和精力,同时更需要自己和他人的反复质疑。正所谓:灵感的来源少不了外界的刺激。

          接下来,针对IBM HACMP,我们对其进行全面、彻底的分析和测试,并将其常见故障的解决方法进行整理。


2.HACMP测试

2.1 网卡故障:

     网络接口故障演示:


 a.# netstat -in 查看当前情况下所有网卡IP状态

 b.#ps -ef | grep cluster,确认所有节点上HACMP已经启动

 c.#errclear 0 ,清空所有系统错误日志,避免给后续判断造成干扰

 d.#tail -f /tmp/hacmp.out 实时监控hacmp的运行状态(打开另外一个窗口进行)


#ifconfig en0 down,宕掉en0——service 网卡


 e.#netstat -in 查看en1——stangby网卡IP的变化以及其MAC地址

 f.#ifconfig en1 down,党掉standby 网卡

 g.#ifconfig en0 up,启动en0网卡

 h.#netstat -in 查看各IP是否正常




2.2 网络故障


 a.# netstat -in 查看当前情况下所有网卡IP状态

 b.#ps -ef | grep cluster,确认所有节点上HACMP已经启动

 c.#errclear 0 ,清空所有系统错误日志,避免给后续判断造成干扰

 d.#tail -f /tmp/hacmp.out 实时监控hacmp的运行状态(打开另外一个窗口进行)


断开service网卡连接的网线

  用命令#netstat -in 查看standby网卡是否接管了service网卡的IP地址和MAC地址

 重新连接上与愿service网卡连接的网线

  用命令#netstat  -in ,查看源service 网卡的ip地址和mac地址是否为原standby网卡的IP地址和service地址

 

  断开与愿standby网卡连接的网线

  用命令#netstat -in 查看源service 网卡的ip地址和mac地址是否恢复为原来的service网卡的IP地址和MAC地址,重新连接上与Standby网卡连接的网线

 用命令#netstat  -in 查看最终各IP的变化


2.3 节点故障


模拟*作系统崩溃:
用命令:# ps –ef | grep cluster,确认所有节点上的HACMP已启动。
用命令:# errclear 0,清空系统错误日志。
用命令:# tail –f /tmp/hacmp.out,监控HACMP的运行状态。
用命令:# cat /etc/hosts > /dev/kmem,模拟*作系统崩溃状态。
用命令:# netstat –in、# lsvg –o、# ps –ef APP_PID,查看备份节点是否接管了故障节点的Service地址、共享卷组和应用 程序 。
重新启动故障节点,并启动HACMP。
用命令:# netstat –in、# lsvg –o、# ps –ef APP_PID,查看该节点是否将原属于他的Service地址、共享卷组和应用程序接管回来了。
模拟CPU故障:
用命令:# ps –ef | grep cluster,确认所有节点上的HACMP已启动。
用命令:# errclear 0,清空系统错误日志。
用命令:# tail –f /tmp/hacmp.out,监控HACMP的运行状态。
直接断开某个节点的电源,模拟CPU故障。
用命令:# netstat –in、# lsvg –o、# ps –ef APP_PID,查看备份节点是否接管了故障节点的Service地址、共享卷组和应用程序。
重新启动故障节点,并启动HACMP。
用命令:# netstat –in、# lsvg –o、# ps –ef APP_PID,查看该节点是否将原属于他的Service地址、共享卷组和应用程序接管回来了。








2. HACMP常见故障解决


1、导致集群中节点失效的无反映开关(Deadman Switch)

问题现象:

集群中的节点经历着极端的性能问题,如:大量的I/O传输、过多的错误记录、内存不足等,导致集群管理器(clstrmgr)没有得到足够的CPU处理时间,而引起无反映开关在分配的时间被重置。某个应用程序运行权限高过集群管理器时,会导致此问题。

解决方法:

术语“Deadman Switch”指的是在特定集群条件下,未能及时重置该开关,引起系统宕机和转储的内核扩展部分。无反映开关在超过了特定的时间限制后会宕掉处于挂起状态的节点。此过程导致集群中的其它节点接管处于挂起状态节点的资源。要解决此问题需要解决与之相关的几个性能问题:

1、调整系统I/O pacing

2、增加信息同步(syncd)的频率

3、增加通信子系统使用的内存量

4、更改错误探测速率

1、调整系统使用I/O的步调:

使用I/O pacing调整系统,使得在大量写*作时,系统资源的分配更合理。为HACMP集群激活I/O Pacing是必要的,尤其是在集群中可能会有大量磁盘数据块写*作的时侯。

按下述步骤修改I/O Pacing设置:

# smitty hacmp 

Cluster Configuration 

Advanced Performance Tuning Parameters

Change/Show I/O Pacing

修改HIGH water mark for pending write I/Os per file域,推荐值为33,可用值在0-32767之间 。

修改LOW watermark for pending write I/Os per file域,推荐值为24,可用值在0-32767之间。

不同的系统,以上两个值也不同。修改上两个值只能稍微减少写次数,通常能够解决上述问题。

2、增大syncd的运行频率:

增加syncd的运行频率,使缺省60秒运行一次变为30秒、20秒或10秒运行一次。这样可以强迫增加I/O刷新速率,并减少由于沉重的I/O流量触发无反映开关的可能性。

按下述步骤修改syncd运行频率设置:

# smitty hacmp

Cluster Configuration

Advanced Performance Tuning Parameters

Change/Show syncd frequency

修改syncd frequency in seconds域,推荐值为10秒,可用值在0-32767之间。

3、增加通信子系统可用的内存量:

如果运行命令:# netstat –m,发现请求mbuf被拒绝,或运行命令# errpt发现LOW_MBUFS 错误,则应增加网络参数“thewall”的值。Thewall的缺省值为25%的系统实内存。可以将其增加为50%的系统实内存。

按下述步骤修改thewall值的设置:

# vi /etc/rc.net

在此文件的末尾加入:

no -o thewall= xxxxx

xxxxx是指你希望设置的供通信子系统使用的实内存值。如:,

no -o thewall=10240

4、修改错误探测速率:

如果激活I/O Pacing或增加Syncd运行频率不能解决无反映开关不能重置的问题时,则修改错误探测速率,将其值该为Slow。这样可以延长一个挂起节点调用无反映开关之前,以及接管节点探测到节点故障并获得挂起节点资源之前所需的时间。

注意:

在完成上述步骤之前,I/O Pacing必须先激活。这是因为修改此设置会调整I/O数据的传输量。

八、HACMP 4.4.1及后续版本的改进:

1、首先现要将三个网络地址(Boot、Service、Standby)配置好,并在/etc/hosts文件中,将三个网络地址对应的卡标识编辑好。

2、然后按照:Cluster Topology -> Configure Networks -> Configure IP-Based Network -> Discover Current Network Configuration -> Local Network Configuration的顺序生成本节点上的逻辑接口配置清单。

3、再按照:Cluster Topology -> Configure Networks -> Configure IP-Based Network -> Add a Network的顺序定义IP网络。

4、该菜单中的各域内容如下:

Network Name:用户指定的网络名字。

Network Attribute:指明该网络的类型:Public(TCPIP、Token-Ring、FDDI、SLIP),

Private(ATM)。

Network Type:指明该网络的网络类型(TCPIP、Token-Ring)。

Subnets:按F4从列表中选取Boot和Standby卡对应的子网。

5、网络配置完毕后,按照:Cluster Topology -> Configure Adapters -> Configure IP-based Adapters -> Discover Current Network Configuration的顺序收集当前的网络配置信息。

6、IP网络配置完毕后,按照:Cluster Topology -> Configure Networks -> Configure Non IP-Based Networks -> Add a Network的顺序配置非IP网络(心跳网络)。与IP网络不同的是需要指定一个网络名和网络类型(RS232)。

7、再根据:Cluster Topology -> Configure Adapters -> Configure IP-based Adapters -> Add an Adapter的顺序开始配置网卡。

8、选择一个欲增加网卡的子网,如果先前没有定义网络,则可以使用Add an Adapter on a new Network菜单创建网络。

9、该菜单中的各域内容如下:

Adapter IP Label:按F4从子网列表中选择欲配置的网卡。

Network Type:此域自动生成。

Network Name:此域自动生成。

Adapter Function:表明此网卡的用途:Boot、Service、Standby。

Adapter Identifier:此卡的IP地址或设备名。

Adapter Hardware Address:此卡的硬件地址,通常仅用于Service卡。

Node Name:该卡所在的节点名。

Netmask:该卡的子网掩码。

10、重复以上步骤,知道所有节点上的所有卡均配置完毕。

11、基于IP网络的网卡配置完毕后,再配置基于非IP网络的网卡。按照:Cluster

Topology -> Configure Adapters -> Configure Non IP-based Adapters -> Add an 

Adapter > Choose Network for new Adapter的顺序配置基于非IP网络的网卡(心跳

线)。与基于IP网络的网卡不同之处在于基于非IP网络的网卡需要指定设备名

(Device Name)。