(转)PowerHA完全手册(一,二,三)liujiacai

2.2.1.安装PowerHA6.1(需要在所有节点上安装)27

2.2.2.打补丁28

2.2.3.安装确认30

2.3.配置准备31

2.3.1.修改.rhosts31

2.3.2.修改/etc/hosts32

2.3.3.添加共享vg:32

2.3.4.建立文件系统33

2.3.5.修改loglv33

2.3.6.整理vg35

2.3.7.修改网络参数及IP地址36

2.3.8.编写初步启停脚本37

2.3.9.配置tty心跳网络/磁盘心跳38

2.4.首次配置(不带应用的HACMP配置)39

2.4.1.创建集群39

2.4.2.增加节点39

2.4.3.创建IP网络及接口40

2.4.4.添加心跳网络及接口(二选一)41

2.4.5.察看确认拓扑(toplog)结构44

2.5.创建资源46

2.5.1.添加高可用资源46

2.5.2.检查和同步HACMP配置49

2.6.最后的其他配置50

2.6.1.再次修改/etc/hosts50

2.6.2.修改syncddaemon的数据刷新频率50

2.6.3.配置clinfo51

2.6.4.启动HACMP:52

2.6.5.确认HACMP配置完成53

2.7.集成实施中的配置54

2.7.1.增加组和用户54

2.7.2.增加lv和文件系统56

2.7.3.安装和配置应用58

2.8.最终配置(带应用的HACMP配置)58

2.8.1.起停脚本已经编写完备并本机测试58

2.8.2.同步脚本和用户的.profile等环境文件58

2.8.3.确认检查和处理59

2.8.4.测试:59

3.第三部分--测试篇60

3.1.测试方法说明:60

3.2.标准测试60

3.2.1.标准测试表60

3.3.完全测试64

3.3.1.完全测试表65

3.4.运维切换测试:67

3.4.1.运维切换测试表68

4.第四部分--维护篇71

4.1.1.HACMP切换问题表71

4.1.2.强制方式停掉HACMP:72

4.1.3.强制停掉后的HACMP启动:72

4.2.日常检查及处理74

4.2.1.clverify检查74

4.2.2.进程检查:75

4.2.3.cldump检查:75

4.2.4.clstat检查77

4.2.5.cldisp检查:79

4.2.6./etc/hosts环境检查88

4.2.7.脚本检查88

4.2.8.用户检查88

4.2.9.心跳检查89

4.2.10.errpt的检查93

4.3.变更及实现94

4.3.1.卷组变更-增加磁盘到使用的VG里:94

4.3.2.lv变更95

4.3.3.文件系统变更96

4.3.4.增加服务IP地址96

4.3.5.修改服务IP地址97

4.3.6.boot地址变更99

4.3.7.用户变更99

5.第五部分--脚本篇101

5.1.脚本规划101

5.1.1.启停方式101

5.1.2.文件存放目录表101

5.1.3.文件命名表:102

5.1.4.启停跟踪102

5.1.5.编写注意事项:103

5.2.启动脚本103

5.3.停止脚本105

1.停止数据库脚本105

5.4.同步HA的脚本107

5.4.1.编写sync_HA.sh107

6.第七部分--经验篇108

6.1.异常情况的人工干预108

6.1.1.场景1:host1出现问题,但HACMP没有切换过来僵住了108

6.1.2.场景2:host1出现问题,HACMP切换过来,但僵住了109

6.1.3.HACMP异常情况修正表109

6.2.其他有用的经验110

6.2.1.HACMP自动启动的实现110

6.2.2.HACMP的toolong报警广播的修正110

6.2.3.HACMP的DMS问题的修正111

6.2.4.snmp的调整(AIX5.3不需要)113

7.1.附:2个实用的配置模版113

7.1.1.标准的oracleRAC配置113

7.1.2.多service在同一网段并为磁盘心跳的配置117

前言

自2008年4月02日笔者在IBMDevelopWork网站首次发表《HACMP5.X完全手册》以来,加上各网站的转载,应该已过了10万的阅读量,在此非常感谢大家的认可和支持。

转眼已经5年过去了,期间非常感谢不少同仁指出了该文的各种不足,并且HACMP已经改名为HACMP了,由于软件版本的更新和本人当时的技术水准有限,同时也存储不少同仁的希望,在原文基础上进行了补充和修订完善,也就有了本文。

正是由于AIX专家俱乐部的兴起,对AIX和HACMP的技术感兴趣的技术人员又更多了。因此选择本杂志作为原创发表,就是希望能对更多的同仁日常工作有所帮助。

虽笔者端正态度,尽力认真编写,但由于能力有限,恐仍有错漏之处,还望众多同仁多多指正海涵,在此先行谢过。

1.为什么需要PowerHA/HACMP

随着业务需求日益增加,IT的系统架构中核心应用必须一直可用,系统必须对故障必须有容忍能力,已经是现代IT高可用系统架构的基本要求。

10年前各厂商现有的UNIX服务器就已拥有很高的可靠性,在这一点上IBM的Power系列服务器表现尤为突出。但所有UNIX服务器均无法达到如原来IBM大型主机S/390那样的可靠性级别,这是开放平台服务器的体系结构和应用环境所决定的,这一点,即使科技发展到云计算的今天仍然如此。

因此,我们需要通过软件提供这些能力,同时这个软件还应该是经济有效的。它可以有效确保解决方案的任何组件的故障都不会导致用户无法使用应用程序及其数据。实现这一目标的方法是通过消除单一故障点消除或掩盖计划内和计划外停机。另外,保持应用程序高可用性并不需要特殊的硬件。

IBM高可用性集群软件--PowerHA/HACMP也就应运而生,即使到了今天,对比x86平台的linux、windows甚至包括其他UNIX操作系统的高可用性集群,至少从笔者20年的IT从业实际经历来看,IBMPowerHA/HACMP高可用性解决方案虽然复杂,需要更高水平工程师的精心维护,但的确相对更成熟更有效。

PowerHA的前身为HACMP,或者说PowerHA和HACMP这两个词对IBM来说可以互换使用。

基于这一点,也由于实际使用过程中PowerHA软件的名称、菜单名、日志等均仍为HACMP,因此后面论述时我们仍均称为PowerHA为HACMP,以免造成理解的困难。

2.PowerHA的版本

由于IBM对软件的整合,目前PowerHA其实不仅仅只包含之前的HACMP软件,我们先来看看下图:

我们说的PowerHApureScale,则是和类oracleRAC的IBMDB2pureScale解决方案相配合的高可用性套件,不再是我们通常意义上的HACMP。

3.HACMP的工作原理

HACMP是HighAvailabilityClusterMulti-Processing的缩写;也就是IBM公司在P系列AIX操作系统上的高可靠集群软件,配置冗余,消除单点故障,保证整个系统连续可用性和安全可靠性。

HACMP是通过侦测主机及网卡的状况,搭配AIX所提供的LVM等管理功能,在主机、网卡、硬盘控制卡或网络发生故障时,自动切换到另一套备用元件上重新工作;若是主机故障还切换至备机上继续应用系统的运行。

作为双机系统的两台服务器同时运行HACMP软件;

u两台服务器的备份方式大体有二种:

n一台服务器运行应用,另外一台服务器做为备份

n两台服务器除正常运行本机的应用外,同时又作为对方的备份主机;

u两台主机系统在整个运行过程中,通过"心跳线"相互监测对方的运行情况(包括系统的软硬件运行、网络通讯和应用运行情况等);

u一旦发现对方主机的运行不正常(出故障)时,故障机上的应用就会立即停止运行,本机(故障机的备份机)就会立即在自己的机器上启动故障机上的应用,把故障机的应用及其资源(包括用到的IP地址和磁盘空间等)接管过来,使故障机上的应用在本机继续运行;

u应用和资源的接管过程由HACMP软件自动完成,无需人工干预;

u当两台主机正常工作时,也可以根据需要将其中一台机上的应用人为切换到另一台机(备份机)上运行。

4.HACMP术语:

为方便大家阅读,我们这里简单介绍一下HACMP主要术语。它们可以分为拓扑组件和资源组件两类。

拓扑组件(Clustertopology)基本上是物理组件。它们包括:

实际目前节点现分为2种,一个是服务器节点(Server节点),运行核心服务和共享磁盘的应用的机器;一个是客户端节点(Client)节点,前台使用集群服务的应用的机器。比如中间件软件等无需共享磁盘安装在客户端节点的机器上,数据库软件安装在服务器节点的机器上。

像监控节点的信息收集程序clinfo就是只运行在客户节点上。而对于2个节点的集群,则简化掉这些分别,即节点为二合一。

拓扑组件示意图

资源组件(Clusterresources)是需要保持高可用性的逻辑实体。它们包括:

所有资源一起组成资源组实体。HACMP把资源组当作单一单元处理。它会保持资源组高可用性。

资源组件示意图

1.启动策略(Clusterstartup):这决定资源组应该激活哪个节点。

2.故障转移策略(Resource/Nodefailure):当发生故障时,这决定故障转移目标节点。

3.故障恢复策略(Resource/Noderecovery):这决定资源组是否执行故障恢复。

当发生故障时,HACMP寻找这些策略并执行相应的操作。

5.实验环境说明:

以双机互备中相对复杂的多业务网络的情况为例,其他类似设置可适当简化。

1)机器一览表

节点机器名

操作系统

应用软件

HA版本

host1

AIX6.1.7

ORACLE11g

HA6.1.10

host2

TUXEDO11

2)磁盘和VG规划表

磁盘

VG

VGMajorNumber

hdisk2

host1vg

101

hdisk3

host2vg

201

3)用户和组规划表

用户

USERID

组ID

使用节点

orarunc

610

dba

601

tuxrun

301

tux

bsx1

302

xcom

401

orarun

609

4)逻辑卷和文件系统规划表

PPsize:128M

逻辑卷

文件系统

大小(pp)

所有者

用途

ora11runclv

/ora11runc

40

ORACLE客户端软件

tux11runlv

/tux11run

30

tuxedo

Tuxedo软件

bsx1lv

/bsx1

宝信MES应用程序

xcomlv

/xcom

宝信xcom通信软件

ora11runlv

/ora11run

60

ORACLE数据库软件

oradatalv

/oradata

80

数据库

5)路由规划表

节点名

目的

路由

default

10.2.100.254

10.2.200

10.2.1.254

10.3.300

6)HACMP结构表

集群名:test_cluster

适配器名

功能

网络名

网络类型

属性

IP地址

MAC地址

host1_tty0

heartbeat

host1_net_rs232

rs232

serial

host1_l2_boot1

boot1

host2_net_ether_2

ether

public

10.2.2.1

host1_l1_boot1

host2_net_ether_1

10.2.1.21

host1_l2_svc

Service

host1_net_ether_2

10.2.200.1

host1_l1_svc1

host1_net_ether_1

10.2.100.1

host1_l1_svc2

10.2.101.1

host1_l2_boot2

boot2

10.2.12.1

host1_l1_boot2

10.2.11.1

host2_tty0

host2_net_rs232

host2_l2_boot1

10.2.2.2

host2_l1_boot1

10.2.1.22

host2_l2_svc

service

10.2.200.2

host2_l1_svc1

10.2.100.2

host2_l1_svc2

10.2.101.2

host2_l2_boot2

10.2.12.2

host2_l1_boot2

10.2.11.2

7)HACMP示意图

start_host1:

添加网关

运行start_host1_app

stop_host1:

运行stop_host1_app

清理vg进程

start_host2:

运行start_host2_app

stop_host2:

start_host1_app:

确认host2已启动

整理路由

启动主应用程序

启动通信程序

stop_host1_app:

停通信程序

停应用主程序

清理路由

start_host2_app:

如在host1机器上执行stop_host1_app

起Oracle数据库及listener

如在host1机器上执行start_host1

stop_host2_app:

停数据库及listener

万事开头难,对于一个有经验的HACMP工程师来说,会深知规划的重要性,一个错误或混乱的规划将直接导致实施的失败和不可维护性。

HACMP实施的根本目的不是安装测试通过,而是在今后运行的某个时刻突然故障中,能顺利的发生自动切换或处理,使得服务只是短暂中断即可自动恢复,使高可用性成为现实。

应用特点

1)对负荷的需求,如CPU、内存、网络等特别是I/O的负载的侧重。

2)对起停的要求,如数据库重起可能需要应用重起等等。

3)对于自动化的限制,如重起需要人工判断或得到命令,需要在控制台执行。

网络状况和规划

包括网段的划分、路由、网络设备的冗余等等在系统上线前的状况和可提供条件,以及实施运行过程中可能出现的变更。

操作系统情况

目前IBM的HACMP除了AIX,还支持Linux。

目前新装机器都是AIX5.3,即使安装HA5.4也没有问题。但如果安装可能是在老机器上进行升级,需要仔细了解操作系统版本及补丁情况。

主机设计

1)可能实施的机器网卡的数量,网卡是否只能是双口或更多。

2)是否有槽位增加异步卡

3)主机之间的距离,这影响到串口线的长度。

预计实施高可用性的情况

1)希望实施HACMP的机器数量

2)希望方式,如一备一,双机互备,一备多,环形互备等等。

随着Power主机和AIX的更新换代,名称也在变化,虽然目前最新版为PowerHASystemMirror7.1,又增加了不少绚丽夺目的功能,但个人以为作为高可用性软件,其成熟度为第一要素,其稳定性有待进一步验证。而经过我们这2年来的充分实施经验,目前可以放心推荐版本为PowerHA6.1的6.1.10及以上。

IP地址切换(IPAT)方式有3种方式:

图1a,1b,和1c中描述了三个主要的IPAT配置场景。

u第一个拓扑模式:IPATviaReplacement

在分开的子网中包含boot和standby网卡。当集群服务启动的时候boot地址被换成service地址。尽管这种方式有效性强,但是在需要实现多服务IP地址的环境下这种方式是不可取的。集群的管理员不得不利用pre-和post-events定制其环境建立额外的别名,

并且需要确认这些别名在下一次接管发生前被删除。

u第二个拓扑模式:IPATviaAliasing

HACMP4.5开始引入了IPATviaAliasing作为缺省的拓扑模式。在这种新的模式中,standby网卡的功能被另外一个boot网卡替换。子网需求的不同点是还需要一个另外的子网,每一个boot网卡需要它自己的子网,并且任何service或persistent的IP将在其本身的子网上操作,所以一共三个子网。当集群服务启动并且需要serviceIP的时候,bootIP并不消失。这个设计和第一种是不同的,在同一个HACMP网络中有多个serviceIP存在并且通过别名来控制。

u第三种模式:EthernetChannel(EC)

这种模式把底层的以太网卡藏到一个单一的“ent”接口之后。该模式不是对前述任何一种方式的替换,而是可以和前述的任一种模式共同存在。因为在每一个节点EC都被配置成冗余方式,可以在HACMP中使用IP别名定义它们每一个作为单一网卡网络。因为在每个节点只有一个网卡被定义,所以只有两个子网,一个是用作boot(每个节点的基本IP地址),另一个是用于提供高可用服务。

这样设计时就需要注意以下事情:

1.网段设计:一个服务地址需要3个网段对应,boot地址网段不能和服务地址一致。避免网络变更造成的系统不可用,boot地址的网段不要和实际其他系统的网段一致。在网段比较紧张的地方,建议设计时询问网络人员。

举例来说,下面的地址将会由于网络变更后打通合一后可能造成冲突:

设计人

机器名

服务地址

boot1地址

boot2地址

张三

app1_db

10.66.1.1

10.10.1.1

app1_app

10.66.1.2

10.10.2.2

李四

app2_db

10.66.2.1

10.66.3.1

app2_app

10.66.2.2

10.66.3.2

10.10.1.2

王五

app3_db

app3_app

2.boot地址的设计:不要和实际其他同网段机器的boot地址冲突,最好不同网段。即这个规划不能只考虑系统本身,还需要从同网段的高度考虑。

举例来说,下面的地址由于2个系统分开设计,同时开启将直接导致2个系统不可用。

boot地址的设计表1

10.66.3.11

10.66.3.12

所以在设计时,我们建议boot地址的IP地址最后一段参照服务地址,这样虽然可记忆性不是很好,但即使设计在同一网段,也可以避免上述错误发生。更改设计如下:

boot地址的设计表2

10.10.1.11

10.10.1.12

此外,如果是每个网卡多个网口,记得设计时必须注意同一网络的boot地址要分开到2块网卡,以保证真正的冗余。

配置HACMP的过程中,除了TCP/IP网络之外,您也可以在其它形式的网络上,如串行网络和磁盘总线上配置心跳网络。

1.TCP/IP网络

优点:要求低,不需要任何额外硬件或软件,即可实现。

缺点:占用IP地址,不能避免由于TCP/IP的软件问题导致HACMP崩溃,系统不可用。

2.串口网络

优点:真正实现高可用性,不占用IP地址。

缺点:需要硬件支持,需要新增异步卡,而中低端的机器的插槽有限。

3.磁盘心跳

优点:不占用插槽,磁盘总线上的心跳网络能够在TCP/IP网络资源有限的情况下提供额外的HACMP节点间的通信手段,并且能够防止HACMP节点之间由于TCP/IP软件出现问题而无法相互通信。

缺点:需要操作系统和存储支持,如使用增强型卷组,此外对于I/O读写负荷高的应用,也需要慎用。

正如IBM红皮书所说,条件许可的情况下,强烈推荐使用串口网络,其次是磁盘心跳。不过我们也注意到HACMP7.1将不再支持串口心跳,而改为其他如SAN方式,效果有待进一步观察。

对于HACMP来讲,服务IP地址和磁盘VG、文件系统、应用服务器都是资源,如何规划需要根据实际情况来,包括以下内容:

资源组的数量即资源:一般情况下每台机器只要建立一个资源组即可,包括服务IP地址、应用服务器及VG。

现在不推荐具体确定VG里的文件系统,这是因为确定后,有可能造成有些新增文件系统不在HACMP的控制范围,结果是HACMP切换时由于这些文件系统没有unmount掉而导致切换失败。

资源组的策略:分failover(故障切换)和fallback(回切)等。一般选缺省,当然你可以根据具体情况修正,如oracle10gRAC的并发VG资源组的选择就不一样。

虽然实际上HACMP是靠PVID来认磁盘的,但集群的机器上磁盘顺序不一,磁盘对应不一致会造成某种混乱。以致于安装配置和维护时很容易产生各种人为错误,所以我们强烈建议机器上看到的磁盘和VG名称都一一对应,此外VG的MajorNumber也需要预先设计规划,以免不一致。同时新的AIX6.1已很好提供了修改hdisk号的rendev命令,以前这样的烦恼也就迎刃而解了。

HA要求所有切换需要用到的用户必须所有节点对应,ID完全相同,用户运行的环境变量完全相同,即当系统切换时,对使用该用户的程序用户即组设置没有区别的。

如某系统的host2上oracle用户为orarun,host1上的orarun必须为切换保留,ID均为209,host1上平时用的oracle用户就设为orarunc。

对于有通信需求的主机,很可能对路由有一定要求,如本次实验环境,就有2个网段走的不是缺省路由,需要设计清楚,最后在起停脚本实现。

我们这里说的应用,是包括数据库在内除OS和HACMP之外的所有程序,对于应用程序的起停顺序和各种要求,都需要预先和应用人员加以沟通,并预先设计伪码,最终编写脚本实现。

实验实际为AIX6.1.10,实际HACMP6.1要求AIX5.3.9和AIX6.1.2,具体安装时可查看以下安装版本的《HighAvailabilityClusterMulti-ProcessingforAIXInstallationGuide》Prerequisites一节。

作为集群的各个节点机,我们建议各个参数最好完全一致,需要注意的参数有:

1.异步I/O服务进程配置(AsynchronousI/Oservers)

2.用户最大进程数

4.用户缺省的limits参数

5.其他可能影响应用的参数

用户和组确认

目的:确认没有和设计中ID冲突的用户,否则需要调整。

[host1][root][/]lsuser-aidALL

rootid=0

daemonid=1

binid=2

sysid=3

admid=4

uucpid=5

……

[host2][root][/]>lsuser-aidALL

文件系统确认

目的:确认没有和设计名称相冲突的文件系统,否则需要调整。

[host1][root][/]>df-k

Filesystem1024-blocksFree%UsedIused%IusedMountedon

/dev/hd45242884878207%32763%/

/dev/hd27077888186851674%9129018%/usr

/dev/hd9var52428845836413%9911%/var

/dev/hd391750482670010%1201%/tmp

/dev/hd165536052485620%2911%/home

/proc-----/proc

/dev/hd10opt117964858907251%113708%/opt

[host2][root][/]>df-k

…..

RSCT3.1.2.0或更高版本。lslpp-l|greprsct

以下的包也是必须要安装的:(脚本可直接拷贝运行)

lslpp-lrsct.*

lslpp-lbos.adt.lib

lslpp-lbos.adt.libm

lslpp-lbos.adt.syscalls

lslpp-lbos.net.tcp.client

lslpp-lbos.net.tcp.server

lslpp-lbos.rte.SRC

lslpp-lbos.rte.libc

lslpp-lbos.rte.libcfg

lslpp-lbos.rte.libcur

lslpp-lbos.rte.libpthreads

lslpp-lbos.rte.odm

显示确认结果:

[host1][root][/]>lslpp-lrsct.*

FilesetLevelStateDescription

----------------------------------------------------------------------------

Path:/usr/lib/objrepos

rsct.basic.hacmp3.1.2.0COMMITTEDRSCTBasicFunction(HACMP/ES

Support)

rsct.basic.rte3.1.2.0COMMITTEDRSCTBasicFunction

rsct.basic.sp3.1.2.0COMMITTEDRSCTBasicFunction(PSSP

rsct.compat.basic.hacmp3.1.2.0COMMITTEDRSCTEventManagementBasic

Function(HACMP/ESSupport)

rsct.compat.basic.rte3.1.2.0COMMITTEDRSCTEventManagementBasic

Function

rsct.compat.basic.sp3.1.2.0COMMITTEDRSCTEventManagementBasic

Function(PSSPSupport)

rsct.compat.clients.hacmp3.1.2.0COMMITTEDRSCTEventManagementClient

[host2][root][/]>lslpp-lrsct.*

如果是光盘,请插入光盘,输入smittyinstall_latest

InstallSoftware

Typeorselectvaluesinentryfields.

PressEnterAFTERmakingalldesiredchanges.

[EntryFields]

*INPUTdevice/directoryforsoftware/dev/cd0

*SOFTWAREtoinstall[_all_latest]

ACCEPTnewlicenseagreementsyes

PreviewnewLICENSEagreementsno

如果是安装盘拷贝,请进入cdinstallp/ppc目录,smittyinstall_latest

*INPUTdevice/directoryforsoftware.

安装结束后,会报failed,请检查

cluster.doc.en_US.pprc.pdf

cluster.es.cgpprc.rte

cluster.es.pprc.cmds

cluster.es.spprc.*

cluster.es.sr.*

cluster.es.svcpprc.*

cluster.xd.*

glvm.rpv.*

包以外,所有的HACMP的包都要安装

LATESTHACMPFORAIXR610FIXESSP11MAY2013。

smittyinstall_latest,全部安装

[host1][root][/soft_ins/ha61/patch]>ls

.toc

cluster.es.cspoc.dsh.5.2.0.21.bff

cluster.adt.es.client.include.5.2.0.3.bff……

安装结束后,仍会报failed,检查

cluster.xd.glvm

cluster.es.tc.*

cluster.es.sr.rte.*

cluster.es.pprc.*

cluster.es.genxd.*

cluster.es.cgpprc.*

没装上外,其他都已安装上。

补丁可在IBM网站下载:

重启机器

注:记住一定要重起机器,否则安装将无法正常继续。

egrep-i"hacmp"/etc/inittab

hacmp:2:once:/usr/es/sbin/cluster/etc/rc.init>/dev/console2>&1

hacmp:2:once:/usr/es/sbin/cluster/etc/rc.init>/dev/console2>&1。

lslpp-lcluster.*

cluster.es.server.rte6.1.0.10COMMITTEDESBaseServerRuntime

lssrc-sclcomdES

SubsystemGroupPIDStatus

clcomdESclcomdES4128974active

总的来说,配置前的准备必不可少,这一步还要仔细小心,准备不充分或有遗漏以及这步的细节疏忽会导致后面的配置出现网卡、磁盘找不到等现象。将会直接导致后面的配置失败。

修改确认每台机器/.rhosts为:

[host1][root]vi/.rhosts

注意权限修改:

chmod644/.rhosts

在HACMP6.1中为了安全起见,不再使用/.rhosts文件来控制两台机器之间的命令和数据交换,使用/usr/es/sbin/cluster/etc/rhosts文件来代替/.rhosts文件的功能。

注意:如果两个节点间的通讯发生了什么问题,可以检查rhosts文件,或者编辑rhosts文件加入两个节点的网络信息。为方便配置期间检查发现问题,配置期间我们让/.rhosts和HACMP的rhosts一致。

修改确认每台机器/etc/hosts为:

127.0.0.1loopbacklocalhost#loopback(lo0)name/address

10.2.2.1host1_l2_boot1

10.2.1.21host1_l1_boot1host1

10.2.200.1host1_l2_svc

10.2.100.1host1_l1_svc1

10.2.101.1host1_l1_svc2

10.2.12.1host1_l2_boot2

10.2.11.1host1_l1_boot2

10.2.2.2host2_l2_boot1

10.2.1.22host2_l1_boot1host2

10.2.200.2host2_l2_svc

10.2.100.2host2_l1_svc1

10.2.101.2host2_l1_svc2

10.2.12.2host2_l2_boot2

10.2.11.2host2_l1_boot2

注:正式配置之前,主机名落在boot地址上,待配置完成后将改为服务IP地址上。

确认:

[host1][root][/]>rshhost2date

WedSep1115:46:06GMT+08:002013

[host2][root][/]>rshhost1date

[host1][root][/]#rshhost1ls-l/usr/es/sbin/cluster/etc/rhosts

-rw-------1rootsystem237Sep1115:45/usr/es/sbin/cluster/etc/rhosts

[host1][root][/]#rshhost2ls-l/usr/es/sbin/cluster/etc/rhosts

[host1][root][/]>lspv

hdisk000c1fe1f0215b425rootvgactive

hdisk100c1fe1f8d700839rootvgactive

hdisk2nonenone

hdisk3nonenone

smittyvg->AddaVolumeGroup

。。。

hdisk200f6f1569990a1efhost1vgactive

hdisk300f6f1569990a12chost2vgactive

由于后面需要修改loglv,必须建立文件系统才会有loglv,所以需要先建立在host1vg上的/ora11runc和host2vg上的/ora11run的JFS2文件系统,其他文件系统可在实施中的配置中2边同时添加。

smittylv->AddaLogicalVolume,注意选择JFS2

smittyfs->EnhancedJournaledFileSystems->AddaJournaledFileSystem

[host1][root][/]>lsfs

NameNodenameMountPtVFSSizeOptionsAutoAccounting

...

/dev/ora11runlv--/ora11runjfs215728640rwnono

/dev/ora11runclv--/ora11runcjfs210485760rwnono

这一步有2个目的,一是避免两边loglv重名,二是规范loglv的取名,使它看起来更清楚明了。

host1vg(host2vg也要修改)

1)察看

[host1][root][/]>varyonvghost1vg

[host1][root][/]>lsvg-lhost1vg

host1vg:

LVNAMETYPELPsPPsPVsLVSTATEMOUNTPOINT

ora11runclvjfs240401closed/syncd/ora11runc

loglv02jfs2log111closed/syncdN/A

umountvg上所有fs

如umount/ora11runc

2)修改loglv名称

[host1][root][/]>chlv-nhost1_loglvloglv02

0516-712chlv:Thechlvsucceeded,howeverchfsmustnowbe

ora11runclvjfs240402closed/syncd/ora11runc

host1_loglvjfs2log111closed/syncdN/A

[host1][root][/]>vi/etc/filesystems

将"log=/dev/loglv02"的改为"log=/dev/host1_loglv"

确认:

[host1][root][/]>mount/ora11runc

在每台机器上都运行以下脚本(实际可以copy以下脚本到文本编辑器替换成你实际的vg)

varyoffvghost1vg

varyoffvghost2vg

exportvghost1vg

exportvghost2vg

chdev-lhdisk2-apv=yes

chdev-lhdisk3-apv=yes

importvg-V101-n-yhost1vghdisk2

varyonvghost1vg

chvg-anhost1vg

importvg-V201-n-yhost2vghdisk3

varyonvghost2vg

chvg-anhost2vg

hdisk200f6f1569990a1efhost1vg

hdisk300f6f1569990a12chost2vg

[host2][root][/]>lspv

[host2][root][/]>varyonghost1vg;varyonghost2vg

[host2][root][/]>lsfs

/dev/ora11runlv--/ora10runjfs215728640rwnono

由于AIX会cache路由配置,因此需要修改一些参数:

routerevalidate

[host2][root][/]no-porouterevalidate=1

Settingrouterevalidateto1

Settingrouterevalidateto1innextbootfile

[host2][root][/]#no-a|greprouterevalidate

routerevalidate=1

按照规划,2台机器修改IP地址,smittytcpip,最终为

[host1][root][/]>netstat-in

NameMtuNetworkAddressIpktsIerrsOpktsOerrsColl

en0150010.2.110.2.1.212481098016471900

en01500link#22.f8.28.3a.82.32481098016471900

en1150010.2.210.2.2.114247001000

en11500link#42.f8.28.3a.82.514247001000

en2150010.2.1110.2.11.12202000

en21500link#32.f8.28.3a.82.62202000

en3150010.2.1210.2.12.100400

en31500link#52.f8.28.3a.82.700400

lo016896127127.0.0.113359680133596900

lo016896::1%113359680133596900

lo016896link#113359680133596900

[host1][root][/]>netstat-i

en0150010.2.1host1_l1_boot12481124016473400

en01500link#22.f8.28.3a.82.32481124016473400

en1150010.2.2host1_l2_boot114247601000

en11500link#42.f8.28.3a.82.514247601000

en2150010.2.11host1_l1_boot22202000

en3150010.2.12host1_l2_boot200400

lo016896127loopback13359680133596900

[host2][root][/]>netstat-in

[host2][root][/]#netstat-in

en01500link#22.f8.29.0.6.4101358506368400

en0150010.2.110.2.1.22101358506368400

en11500link#42.f8.29.0.6.514185901200

en1150010.2.210.2.2.214185901200

en21500link#32.f8.29.0.6.6502000

en2150010.2.1110.2.11.2502000

en31500link#52.f8.29.0.6.720600

en3150010.2.1210.2.12.220600

lo016896link#1515177051517700

lo016896127127.0.0.1515177051517700

lo016896::1%1515177051517700

[host2][root][/]#netstat-i

en01500link#22.f8.29.0.6.4101361906369600

en0150010.2.1host2_l1_boot1101361906369600

en11500link#42.f8.29.0.6.514187601200

en1150010.2.2host2_l2_boot114187601200

en2150010.2.11host2_l1_boot2502000

en3150010.2.12host2_l2_boot220600

lo016896link#1515199051519900

lo016896127loopback515199051519900

lo016896::1%1515199051519900

mkdir-p/usr/sbin/cluster/app/log

[host1][root][/usr/sbin/cluster/app]>ls

start_host1start_host2stop_host1stop_host2

#start_host1

bannerstarthost1

routedelete0

routeadd010.2.1.254

bannerendhost1

exit0

#stop_host1

bannerstophost1

#start_host2

bannerstarthost2

bannerendstarthost2

#stop_host2

bannerstophost2

bannerendhost2

记得chmod755start*stop*赋予文件执行权限。

编写完成后记得拷贝到另一节点:

[host1][root][/usr/sbin/cluster]>rcp-rpapphost2:/usr/sbin/cluster

注意:在两个节点要保证hosts和启动/停止脚本要一样存在,并具有执行权限,否则集群自动同步的时候会失败,同时网关在启动脚本里要增加。

串口线心跳(两边都要增加)

.smittytty->Change/addaTTY->rs232->sa->portnumber:0

确认

host1:cat/etc/hosts>/dev/tty0

host2:cat

在host2可看到host1上/etc/hosts的内容。

同样反向检测一下。

磁盘心跳

1.建立1个共享盘5G足够

2.两边用chdev-lhdiskpower0-apv=yes先将两边的盘符认出来,这样之后系统才能自动扫到磁盘

[host1][root][/]lspv

hdisk500f6f1560ff93de3None

[host2][root][/]lspv

以前的绝大多数配置HACMP,没有明确的这个阶段,都是先两边各自配置用户,文件系统等,然后通过修正同步来配置,这样做的好处是不受任何约束;但坏处脉络不清晰,在配置和日后使用时不能养成良好习惯,必然造成两边的经常不一致,使得停机整理VG这样各节点同步的事情重复劳动,并且很容易疏忽和遗漏。

这一步的目的是为了配置一个和应用暂时无关的“纯粹”的HACMP,方便检测和下一步的工作,可以理解为“不带应用的HACMP配置”。

此外,虽然HACMP配置分标准配置(Standard)和扩充配置(Extend)两种,但我个人还是偏好扩充配置,使用起来步骤更清晰明了,容易掌控。而且完全用标准配置则复杂的做不了,简单的却可能做错,不做推荐。

smittyhacmp->ExtendedConfiguration

->ExtendedTopologyConfiguration

->ConfigureanHACMPCluster

->Add/Change/ShowanHACMPCluster

->ConfigureHACMPNodes

->AddaNodetotheHACMPCluster

注:此处的NodeName需要手动输入,为机器主机名。CommunicationPathtoNode可以通过F4选择为:主机名的boot地址。

同理可以添加第二个节点

->ConfigureHACMPNetworks

->AddaNetworktotheHACMPCluster->ether

其中EnableIPAddressTakeoverviaIPAliases[Yes]

此选项决定了HACMP的IP切换方式,但值得一提的是只有“boot1/boot”、“boot2/standby”、“svc/service”三个IP分别为三个不同网段时必须选用IPAliases方式。

如果““boot1/boot”、“boot2/standby”其中一个与“svc/service”为同一个网段时必须选用IPReplace方式,则此选项应选“NO”。

同样完成net_ether_02网络的创建。

向这些网络添加boot地址网络接口:

->ConfigureHACMPCommunicationInterfaces/Devices

->AddCommunicationInterfaces/Devices

->AddPre-definedCommunicationInterfacesandDevices

->CommunicationInterfaces

选择之前建立的net_ether_01增加2个boot地址:

同样,将其他boot地址加入。

->diskdb

1.串口心跳

->AddaNetworktotheHACMPCluster

->rs232

添加心跳设备接口:

->CommunicationDevices

>选择之前建立的net_rs232_01

#NodeDeviceDevicePath

host1tty0/dev/tty0

host2tty0/dev/tty0

2.磁盘心跳

smittyhacmp->SystemManagement(C-SPOC)

->Storage->VolumeGroups

->ManageConcurrentAccessVolumeGroupsforMulti-NodeDiskHeartbeat

->CreateanewVolumeGroupandLogicalVolumeforMulti-NodeDiskHeartbeat

选择之前的预先认出的hdisk5这块心跳磁盘。

比之前更简单,一个菜单即同时完成了磁盘心跳VG、LV、网络、设备在2个节点的添加。

至此HACMP的拓扑结构已配置完成。

smithacmp->ExtendedConfiguration

->ShowHACMPTopology

->ShowClusterTopology

ClusterName:test_cluster

ClusterConnectionAuthenticationMode:Standard

ClusterMessageAuthenticationMode:None

ClusterMessageEncryption:None

UsePersistentLabelsforCommunication:No

NODEhost1:

Networknet_diskhb_01

Networknet_diskhbmulti_01

host1_1/dev/mndhb_lv_01

Networknet_ether_01

host1_l1_boot110.2.1.21

host1_l1_boot210.2.11.1

Networknet_ether_02

host1_l2_boot110.2.2.1

host1_l2_boot210.2.12.1

Networknet_rs232_01

NODEhost2:

host2_2/dev/mndhb_lv_01

host2_l1_boot210.2.11.2

host2_l1_boot110.2.1.22

host2_l2_boot110.2.2.2

host2_l2_boot210.2.12.2

如心跳为串口心跳则为:

host1_tty0_01/dev/tty0

host2_tty0_01/dev/tty0

可以看到已符合规划要求,可继续了

(serviceip,applicationserver,vgandfs)

1)添加appserver

->ExtendedResourceConfiguration

->HACMPExtendedResourcesConfiguration

->ConfigureHACMPApplications

->ConfigureHACMPApplicationServers

->AddanApplicationServer

*ServerName[host1_app]

*StartScript[/usr/sbin/cluster/app/start_host1]*StopScript[/usr/sbin/cluster/app/stop_host1]

ApplicationMonitorName(s)

同样增加host2_app

*ServerName[host2_app]

*StartScript[/usr/sbin/cluster/app/start_host2]*StopScript[/usr/sbin/cluster/app/stop_host2]

2)添加serviceip

smityhacmp->ExtendedConfiguration

->ConfigureHACMPServiceIPLabels/Addresses

->AddaServiceIPLabel/Address

->ConfigurableonMultipleNodes

选择net_ether_01(10.2.1.0/2410.2.11.0/24)

*IPLabel/Addresshost1_l1_svc

*NetworkNamenet_ether_01

AlternateHWAddresstoaccompanyIPLabel/Address[]

同样增加其他服务ip地址。

3)创建资源组

->HACMPExtendedResourceGroupConfiguration

->AddaResourceGroup

AddaResourceGroup(extended)

PressEnterAFTERmakingalldesiredchanges.[EntryFields]

*ResourceGroupName[host1_RG]

*ParticipatingNodes(DefaultNodePriority)[host1host2]

StartupPolicyOnlineOnHomeNodeOnly

FalloverPolicyFalloverToNextPriorityNodeInTheList

FallbackPolicyFallbackToHigherPriorityNodeInTheList

同样建立host2_RG,

….

ResourceGroupName[host2_RG]

*ParticipatingNodes(DefaultNodePriority)[host2host1]

注意,这里如果是主备模式,如host2仅做备机,则为:

*ParticipatingNodes(DefaultNodePriority)[host2]

4)配置资源组

->Change/ShowResourcesandAttributesforaResourceGroup

选择host1_RG

Change/ShowAllResourcesandAttributesforaResourceGroup

ResourceGroupNamehost1_RG

ParticipatingNodes(DefaultNodePriority)host1host2

FallbackTimerPolicy(emptyisimmediate)[]

ServiceIPLabels/Addresses[host1_l1_svc1host1_l1_svc2host1_l2_svc]

ApplicationServers[host1_app]

VolumeGroups[host1vg]

Useforcedvaryonofvolumegroups,ifnecessaryfalse

同样的方法配置host2_RG

(注意:以上配置均在host1上完成,同步至少2次,先强制同步到host2)

->ExtendedVerificationandSynchronization

1)首次强制同步:

HACMPVerificationandSynchronization

*Verify,SynchronizeorBoth[Both]

*Automaticallycorrecterrorsfoundduring[Yes]

verification

*Forcesynchronizationifverificationfails[Yes]

*Verifychangesonly[No]

*Logging[Standard]

2)二次同步:

*Forcesynchronizationifverificationfails[No]

注:此处结果为OK才能继续,否则按后续故障章节根据错误信息查找原因处理.

将其改为svc的地址上,因为HACMP启动后即以此地址对外服务,主机名需要对应。

10.2.1.21host1_l1_boot1

10.2.200.1host1_l2_svchost1

10.2.1.22host2_l1_boot1

10.2.200.2host2_l2_svchost2

该值表示刷新内存数据到硬盘的频率,缺省为60,HACMP安装后一般可改为10,立刻即可生效。

smittyhacmp->HACMPExtendedConfiguration

->ExtendedPerformanceTuningParametersConfiguration

->Change/Showsyncdfrequency

修改为10秒

or

运行命令/usr/es/sbin/cluster/utilities/clchsyncd10亦可

[host1][root]#ps-ef|grepsync

root119276161016:11:23pts/02:31/usr/sbin/syncd10

注:对于双节点,clstat等监控集群信息软件的基础为clinfoES服务,必须运行在每个Node节点上。

1)修改确认每台机器的/es/sbin/cluster/etc/clhosts为:

执行拷贝:

rcp/usr/es/sbin/cluster/etc/clhostshost2:/usr/es/sbin/cluster/etc/clhosts

2)将snmpv3转换为snmpv1

/usr/sbin/snmpv3_ssw-1

3)修改启动clinfoES

chssys-sclinfoES-a"-a"

startsc-sclinfoES

[host1][root][/]#rshhost1ls-l/usr/es/sbin/cluster/etc/clhosts

-rw-r--r--1rootsystem4148Sep1610:27/usr/es/sbin/cluster/etc/clhosts

[host1][root][/]#rshhost2ls-l/usr/es/sbin/cluster/etc/clhosts

/usr/es/sbin/cluster/clstat运行不报错。

注意:此步骤不能疏漏,必须确保clinfo实施完成后正常运行,否则后续集群状态检查cldump、clstat将均报错,集群状态将无法检查监控。

恭喜!到此为止我们的HACMP已经基本配置完成了。

在所有节点分别启动HACMP服务:

smittyclstart

*Startnow,onsystemrestartorbothnow+

StartClusterServicesonthesenodes[host1]+

*ManageResourceGroupsAutomatically+

BROADCASTmessageatstartupfalse+

StartupClusterInformationDaemontrue+

Ignoreverificationerrorsfalse+

AutomaticallycorrecterrorsfoundduringInteractively+

clusterstart

StartClusterServices

StartClusterServicesonthesenodes[host2]+

使用HACMP的工具clverify,cldump,clstat检查,参见运维篇的日常检查一节。另外从安全角度,记得清理掉/.rhosts文件。

此过程如果不注意实施细节,会导致两边配置不一致,HACMP在最终配置时需要重新整理VG或同步增加用户等工作。

本章的其他操作和运维篇的变更与实现近乎雷同,只对添加部分介绍。

利用C-SPOC,我们可以实现在任一台节点机上操作共享或并发的LVM组件(VG,lv,fs),系统的clcomd的Demon自动同步到其他机器上。

root2376901353720Dec19-0:26/usr/es/sbin/cluster/clcomd-d

利用HACMP的功能,只需在一台机器如host1上操作,会自动同步到另一台如host2。

增加组:

->SecurityandUsers

->GroupsinanHACMPcluster

->AddaGrouptotheCluster

选择host2_RG

AddaGrouptotheCluster

SelectnodesbyResourceGrouphost2_RG

***Noselectionmeansallnodes!***

*GroupNAME[dba]

ADMINISTRATIVEgroupfalse

GroupID[601]

同样在host1_RG增加tux组.

增加用户

->UsersinanHACMPcluster

->AddaUsertotheCluster

AddaUsertotheCluster

[TOP][EntryFields]

*UserNAME[orarun]

UserID[609]

PrimaryGROUP[dba]

....

其他根据具体情况可设置

同样在host1_RG增加orarunc,xcom等用户

[host2][root][/]>lsgroupALL

[host2][root][/]>lsuser-aidgroupsALL

注意:是在host1上执行建组和用户的动作,在host2上确认结果

初始化用户口令

->PasswordsinanHACMPcluster

->ChangeaUser'sPasswordintheCluster

Selectionnodesbyresourcegrouphost2_RG

Usermustchangepasswordonfirstloginfalse

此时需要你输入新口令更改:

COMMANDSTATUS

Command:runningstdout:nostderr:no

Beforecommandcompletion,additionalinstructionsmayappearbelow.

orarun'sNewpassword:******

Enterthenewpasswordagain:******

OK即成功,当然其他用户也需要。

同样利用HACMP的C-SPOC功能,只需在一台机器操作,会自动同步到另一台,无需考虑VG是否varyon。

增加lv:

smittyHACMP->SystemManagement(C-SPOC)

->Storage

->LogicalVolumes

->AddaLogicalVolume

选择host2vghost2_RG

host2hdisk3

AddaLogicalVolume

ResourceGroupNamehost2_RG

VOLUMEGROUPnamehost2vg

NodeListhost1,host2

Referencenodehost2

*NumberofLOGICALPARTITIONS[80]#

PHYSICALVOLUMEnameshdisk3

LogicalvolumeNAME[oradatalv]

LogicalvolumeTYPE[jfs2]+

POSITIONonphysicalvolumeouter_middle+

RANGEofphysicalvolumesminimum+

同样建立host1_RG的其他lv。

建立文件系统:

->FileSystems

->AddaFileSystem

EnhancedJournaledFileSystem

oradatalvhost1,host2

同样建立其他文件系统,建立好后,这些文件系统自动mount。

[host2][root][/]#df-g

/dev/oradatalv10.0010.001%41%/oradata

修改文件系统的目录权限,保证两边一致,。

[host2][root][/]>chownorarun:dba/ora11run

[host2][root][/]>umount/ora11run

[host1][root][/]>chownorarun:dba/ora11run

同样其他文件系统也要如此操作。

注意:修改3遍的原因为有些应用对mount前文件系统的目录也有权限要求,此外两边权限不一致也会导致切换时脚本不能正常访问文件系统,详见日常运维篇。

[host2][root][/]>df-g

[host2][root][/]>ls-l/oradata

[host1][root][/]>df-g

这里包括安装配置host2上的数据库和host1上的tuxedo、mes、通信软件,由于和HACMP本身关系不大,所以不再描述。

这一步也可以理解为“带应用的HACMP配置”,所以主要工作是确认在HACMP的切换等行为中,应用脚本的正确性和健壮性。

自行编写脚本,也可参见脚本篇编写,并通过启停测试。

可先在其中一台如host1测完所有脚本,然后统一同步到另一台。

[host1][root][/]>rcp-rp/usr/sbin/cluster/apphost2:/usr/sbin/cluster/

[host1][root][/home]>tar-cvfhost2_user.tarora11run

[host1][root][/home]>rcphost2_user.tarhost2:/home

[host1][root][/home]>tar-xvfhost2_user.tar

[host1][root][/home]>tar-cvfhost1_user.tarora11runctuxrunbsx1xcom

[host1][root][/home]>rcphost1_user.tarhost2:/home

[host2][root][/home]>tar-xvfhost1_user.tar

如采用了本文的脚本篇的编制方式,也不要忘了同步

[host2][root][/home/scripts]>rcp-rpcommhost1:/home

[host1][root][/home/scripts]>rcp-rphost2host1:/home/scripts

[host1][root][/home/scripts]>rcp-rphost1:/home/scripts/host1.

建议实施完整测试,最低限度为标准测试,参见测试篇。

至此,我们完成了整个HACMP的上线前的集成实施工作,具备了系统上线的条件。

虽然HACMP提供了自动化测试工具testtool,使用起来也较为简单。但个人认为由于HACMP的完整测试是一个比较复杂的事情,工具虽然出来了蛮久的,但似乎感觉还是不能非常让人放心,何况也无法模拟交换机等故障,所以只能提供协助,不能完全依赖,结果仅供参考。

1.ping测试:从client同时发起,每次1024个字节,延续10分钟。

2.ping长测试:每次1024个字节,延续24小时。

3.应用测试:利用自动化测试工具如loadrunner持续从client连接应用服务使用查询。

4.应用长测试:48小时内,进行应用测试使用。

5.telnet测试:telnet连接后根据情况确认。

注意:每步动作后,需要采用clstat确保HACMP已处于STABLE稳定状态再做下一步动作,尤其是恢复动作(对于4,10实际为3个小步骤),最好间隔120-300s,否则HACMP由于状态不稳定来不及做出判断,出现异常。

序号

测试步骤

系统结果

应用结果

1

拔掉host1的服务网线

地址漂移到另一个网卡

中断30s左右可继续使用

2

拔掉host1的剩下一根的网线

发生切换

中断5分钟左右可继续使用

3

拔掉host2的服务网线

所有服务地址漂到另一网卡

4

恢复所有网线

地址join,clstat可看到均up

无影响

5

在host2上执行ha1t-q

host2机宕机,切换到host1机

6

起动host2机器,在host2上手工执行smitclstart回原集群

7

地址漂另一个网卡

8

拔掉host2的剩下一根的网线

9

10

地址join,clstat可看到

均up

11

在host1上执行halt-q

host1机宕机,切换到host2机

12

起动host1机器,在host1上手工执行smitclstart回原集群

以下为日志/var/hacmp/log/hacmp.out的部分分析,供大家实际测试参考:

步骤1:拔掉host1的服务网线

Sep1614:53:10EVENTSTART:swap_adapterhost1net_ether_0210.2.12.110.2.200.1

Sep1614:53:12EVENTSTART:swap_aconn_protocolsen3en1

Sep1614:53:12EVENTCOMPLETED:swap_aconn_protocolsen3en10

Sep1614:53:12EVENTCOMPLETED:swap_adapterhost1net_ether_0210.2.12.110.2.200.10

Sep1614:53:12EVENTSTART:swap_adapter_completehost1net_ether_0210.2.12.110.2.200.1

Sep1614:53:13EVENTCOMPLETED:swap_adapter_completehost1net_ether_0210.2.12.110.2.200.10

步骤2:拔掉host1的剩下一根的网线

Sep1614:53:14EVENTSTART:fail_interfacehost110.2.2.1

Sep1614:53:14EVENTCOMPLETED:fail_interfacehost110.2.2.10

Sep1614:53:55EVENTSTART:network_downhost1net_ether_02

Sep1614:53:56EVENTCOMPLETED:network_downhost1net_ether_020

Sep1614:53:56EVENTSTART:network_down_completehost1net_ether_02

Sep1614:53:56EVENTCOMPLETED:network_down_completehost1net_ether_020

Sep1614:54:03EVENTSTART:rg_move_releasehost11

Sep1614:54:03EVENTSTART:rg_movehost11RELEASE

Sep1614:54:03EVENTSTART:node_down_local

Sep1614:54:03EVENTSTART:stop_serverhost2_apphost1_app

Sep1614:54:04EVENTCOMPLETED:stop_serverhost2_apphost1_app0

Sep1614:54:04EVENTSTART:release_vg_fsALLhost1vg

Sep1614:54:06EVENTCOMPLETED:release_vg_fsALLhost1vg0

Sep1614:54:06EVENTSTART:release_service_addrhost1_l1_svc1host1_l1_svc2host1_l2_svc

Sep1614:54:11EVENTCOMPLETED:release_service_addrhost1_l1_svc1host1_l1_svc2host1_l2_svc0

Sep1614:54:11EVENTCOMPLETED:node_down_local0

Sep1614:54:11EVENTCOMPLETED:rg_movehost11RELEASE0

Sep1614:54:11EVENTCOMPLETED:rg_move_releasehost110

Sep1614:54:13EVENTSTART:rg_move_fencehost11

Sep1614:54:14EVENTCOMPLETED:rg_move_fencehost110

Sep1614:54:14EVENTSTART:rg_move_acquirehost11

Sep1614:54:14EVENTSTART:rg_movehost11ACQUIRE

Sep1614:54:14EVENTCOMPLETED:rg_movehost11ACQUIRE0

Sep1614:54:14EVENTCOMPLETED:rg_move_acquirehost110

Sep1614:54:24EVENTSTART:rg_move_completehost11

Sep1614:54:25EVENTSTART:node_up_remote_completehost1

Sep1614:54:25EVENTCOMPLETED:node_up_remote_completehost10

Sep1614:54:25EVENTCOMPLETED:rg_move_completehost110

步骤4:恢复所有网线

Sep1614:55:49EVENTSTART:network_uphost1net_ether_02

Sep1614:55:49EVENTCOMPLETED:network_uphost1net_ether_020

Sep1614:55:50EVENTSTART:network_up_completehost1net_ether_02

Sep1614:55:50EVENTCOMPLETED:network_up_completehost1net_ether_020

Sep1614:56:00EVENTSTART:join_interfacehost110.2.12.1

Sep1614:56:00EVENTCOMPLETED:join_interfacehost110.2.12.10

步骤5:在host2上执行ha1t-q

Sep1614:58:56EVENTSTART:node_downhost2

Sep1614:58:57EVENTSTART:acquire_service_addr

Sep1614:58:58EVENTSTART:acquire_aconn_serviceen0net_ether_01

Sep1614:58:59EVENTCOMPLETED:acquire_aconn_serviceen0net_ether_010

Sep1614:59:00EVENTSTART:acquire_aconn_serviceen2net_ether_01

Sep1614:59:00EVENTCOMPLETED:acquire_aconn_serviceen2net_ether_010

Sep1614:59:01EVENTSTART:acquire_aconn_serviceen1net_ether_02

Sep1614:59:01EVENTCOMPLETED:acquire_aconn_serviceen1net_ether_020

Sep1614:59:01EVENTCOMPLETED:acquire_service_addr0

Sep1614:59:02EVENTSTART:acquire_takeover_addr

Sep1614:59:05EVENTCOMPLETED:acquire_takeover_addr0

Sep1614:59:11EVENTCOMPLETED:node_downhost20

Sep1614:59:11EVENTSTART:node_down_completehost2

Sep1614:59:12EVENTSTART:start_serverhost1_apphost2_app

Sep1614:59:12EVENTSTART:start_serverhost2_app

Sep1614:59:12EVENTCOMPLETED:start_serverhost1_apphost2_app0

Sep1614:59:12EVENTCOMPLETED:start_serverhost2_app0

Sep1614:59:13EVENTCOMPLETED:node_down_completehost20

步骤6:回原

Sep1615:10:25EVENTSTART:node_uphost2

Sep1615:10:27EVENTSTART:acquire_service_addr

Sep1615:10:28EVENTSTART:acquire_aconn_serviceen0net_ether_01

Sep1615:10:28EVENTCOMPLETED:acquire_aconn_serviceen0net_ether_010

Sep1615:10:29EVENTSTART:acquire_aconn_serviceen2net_ether_01

Sep1615:10:29EVENTCOMPLETED:acquire_aconn_serviceen2net_ether_010

Sep1615:10:31EVENTSTART:acquire_aconn_serviceen1net_ether_02

Sep1615:10:31EVENTCOMPLETED:acquire_aconn_serviceen1net_ether_020

Sep1615:10:31EVENTCOMPLETED:acquire_service_addr0

Sep1615:10:36EVENTCOMPLETED:node_uphost20

Sep1615:10:36EVENTSTART:node_up_completehost2

Sep1615:10:36EVENTSTART:start_serverhost2_app

Sep1615:10:37EVENTCOMPLETED:start_serverhost2_app0

Sep1615:10:37EVENTCOMPLETED:node_up_completehost20

Sep1615:10:41EVENTSTART:network_uphost2net_diskhbmulti_01

Sep1615:10:42EVENTCOMPLETED:network_uphost2net_diskhbmulti_010

Sep1615:10:42EVENTSTART:network_up_completehost2net_diskhbmulti_01

Sep1615:10:42EVENTCOMPLETED:network_up_completehost2net_diskhbmulti_010

步骤7:拔掉host2的服务网线

Sep1615:20:36EVENTSTART:swap_adapterhost2net_ether_0210.2.12.210.2.200.2

Sep1615:20:38EVENTSTART:swap_aconn_protocolsen3en1

Sep1615:20:38EVENTCOMPLETED:swap_aconn_protocolsen3en10

Sep1615:20:38EVENTCOMPLETED:swap_adapterhost2net_ether_0210.2.12.210.2.200.20

Sep1615:20:39EVENTSTART:swap_adapter_completehost2net_ether_0210.2.12.210.2.200.2

Sep1615:20:39EVENTCOMPLETED:swap_adapter_completehost2net_ether_0210.2.12.210.2.200.20

步骤8:拔掉host2的剩下一根的网线

Sep1615:20:40EVENTSTART:fail_interfacehost210.2.2.2

Sep1615:20:40EVENTCOMPLETED:fail_interfacehost210.2.2.20

Sep1615:21:40EVENTSTART:network_downhost2net_ether_02

Sep1615:21:40EVENTCOMPLETED:network_downhost2net_ether_020

Sep1615:21:40EVENTSTART:network_down_completehost2net_ether_02

Sep1615:21:41EVENTCOMPLETED:network_down_completehost2net_ether_020

Sep1615:21:47EVENTSTART:rg_move_releasehost22

Sep1615:21:47EVENTSTART:rg_movehost22RELEASE

Sep1615:21:48EVENTSTART:node_down_local

Sep1615:21:48EVENTSTART:stop_serverhost2_app

Sep1615:21:48EVENTCOMPLETED:stop_serverhost2_app0

Sep1615:21:48EVENTSTART:release_vg_fsALLhost2vg

Sep1615:21:50EVENTCOMPLETED:release_vg_fsALLhost2vg0

Sep1615:21:50EVENTSTART:release_service_addrhost2_l1_svc1host2_l1_svc2host2_l2_svc

Sep1615:21:55EVENTCOMPLETED:release_service_addrhost2_l1_svc1host2_l1_svc2host2_l2_svc0

Sep1615:21:55EVENTCOMPLETED:node_down_local0

Sep1615:21:55EVENTCOMPLETED:rg_movehost22RELEASE0

Sep1615:21:55EVENTCOMPLETED:rg_move_releasehost220

Sep1615:21:57EVENTSTART:rg_move_fencehost22

Sep1615:21:58EVENTCOMPLETED:rg_move_fencehost220

Sep1615:21:58EVENTSTART:rg_move_acquirehost22

Sep1615:21:58EVENTSTART:rg_movehost22ACQUIRE

Sep1615:21:58EVENTCOMPLETED:rg_movehost22ACQUIRE0

Sep1615:21:58EVENTCOMPLETED:rg_move_acquirehost220

Sep1615:22:08EVENTSTART:rg_move_completehost22

Sep1615:22:08EVENTSTART:node_up_remote_completehost2

Sep1615:22:09EVENTCOMPLETED:node_up_remote_completehost20

Sep1615:22:09EVENTCOMPLETED:rg_move_completehost220

步骤9:拔掉host1的服务网线

Sep1615:43:42EVENTSTART:swap_adapterhost1net_ether_0210.2.2.110.2.200.2

Sep1615:43:43EVENTCOMPLETED:swap_adapterhost1net_ether_0210.2.2.110.2.200.20

Sep1615:43:45EVENTSTART:swap_adapter_completehost1net_ether_0210.2.2.110.2.200.2

Sep1615:43:45EVENTCOMPLETED:swap_adapter_completehost1net_ether_0210.2.2.110.2.200.20

Sep1615:43:47EVENTSTART:fail_interfacehost110.2.12.1

Sep1615:43:47EVENTCOMPLETED:fail_interfacehost110.2.12.10

步骤10:恢复所有网线

Sep1615:45:07EVENTSTART:network_uphost2net_ether_02

Sep1615:45:08EVENTCOMPLETED:network_uphost2net_ether_020

Sep1615:45:08EVENTSTART:network_up_completehost2net_ether_02

Sep1615:45:08EVENTCOMPLETED:network_up_completehost2net_ether_020

Sep1615:45:43EVENTSTART:join_interfacehost210.2.12.2

Sep1615:45:43EVENTCOMPLETED:join_interfacehost210.2.12.20

Sep1615:47:05EVENTSTART:join_interfacehost110.2.12.1

Sep1615:47:05EVENTCOMPLETED:join_interfacehost110.2.12.10

步骤11:在host1上执行halt-q

Sep1615:48:48EVENTSTART:node_downhost1

Sep1615:48:49EVENTSTART:acquire_service_addr

Sep1615:48:50EVENTSTART:acquire_aconn_serviceen0net_ether_01

Sep1615:48:50EVENTCOMPLETED:acquire_aconn_serviceen0net_ether_010

Sep1615:48:51EVENTSTART:acquire_aconn_serviceen2net_ether_01

Sep1615:48:51EVENTCOMPLETED:acquire_aconn_serviceen2net_ether_010

Sep1615:48:53EVENTSTART:acquire_aconn_serviceen1net_ether_02

Sep1615:48:53EVENTCOMPLETED:acquire_aconn_serviceen1net_ether_020

Sep1615:48:53EVENTCOMPLETED:acquire_service_addr0

Sep1615:48:53EVENTSTART:acquire_takeover_addr

Sep1615:48:57EVENTCOMPLETED:acquire_takeover_addr0

Sep1615:49:02EVENTCOMPLETED:node_downhost10

Sep1615:49:02EVENTSTART:node_down_completehost1

Sep1615:49:03EVENTSTART:start_serverhost1_apphost2_app

Sep1615:49:03EVENTSTART:start_serverhost2_app

Sep1615:49:03EVENTCOMPLETED:start_serverhost1_apphost2_app0

Sep1615:49:03EVENTCOMPLETED:start_serverhost2_app0

Sep1615:49:04EVENTCOMPLETED:node_down_completehost10

注:考虑到下表的通用性,有2种情况没有细化,需要注意。

1.同一网络有2个服务IP地址,考虑到负载均衡,将自动分别落在boot1、boot2上,这样不论那个网卡有问题,都会发生地址漂移。

此外,由于实际环境也许有所不同甚至更为复杂,此表仅供大家实际参考,但大体部分展现出来,主要提醒大家不要遗漏。

测试场景

参考时长

功能测试

host2起HA

host2服务IP地址生效,vg、文件系统生效

host2app(db)启动OK

120s

host2停HA

host2服务IP地址、vg释放干净

host2app停止

15s

host1起HA

host1服务IP地址生效,vg、文件系统生效

host1app启动OK

host1停HA

host1网卡、vg释放干净

host2takeover切换host1

host2服务地址切换到host1的boot2和vg等

host2app短暂中断

30s

host2clstart

回原

host1takeover到host2

host1服务地址切换到host2的boot2和vg等切换到host2

host1app短暂中断

host1clstart

网卡异常测试

host2断boot1网线测试

host2的服务ip从boot1漂移至boot2

host2恢复boot1网线测试

host2boot1join

40s

host2断boot2网线测试

host2恢复boot2网线测试

host2断boot1、boot2网线测试

host2服务地址切换到host1的boot2上,vg等切换到host1

210s

host1再断boot2网线,

host2的服务ip漂移到host1的boot1

host2恢复boot1、boot2网线测试

host2boot1,boot2join

host1断boot1、boot2网线测试

host1服务地址切换到host2的boot2上,vg等切换到host2

host1的服务ip漂移到host2的boot1

host1恢复boot1、boot2网线测试

host1boot1,boot2join

host2forceclstop

cluster服务停止,ip、vg资源无反应

20s

host1forceclstop

host2,host1boot2网线同时断30mins

boot2failed

host2,host1boot2网线恢复

boot2均join

host2,host1boot1网线同时断30mins

服务IP地址均漂移到boot2上。

host1,host2app短暂中断

host2,host1boot1网线恢复

boot1均join

主机宕机测试

host2突然宕机halt-q

host1突然宕机halt-q

交换机异常测试

SwitchA断电

服务IP地址均漂移到boot2上

host1、host2app短暂中断

50s

SwitchA恢复

SwitchB断电

服务IP地址均漂移回boot1上

SwitchB恢复

SwitchA,B同时断电10mins

network报down,其他一切不动。

host1、host2app中断

10min

SwitchA,B恢复

boot1,boot2join

服务自动恢复

30s后B也断电

不动

自动恢复

30s后A也断电

SwitchA异常(对接网线触发广播风暴)

机器本身正常,但网络不通

恢复后一切正常

SwitchB异常(对接网线触广播风暴)

SwitchA,B同时异常(对接网线触广播风暴)

机器本身正常,但网络丢包严重,

10s

稳定性测试

host2,host1各起HA

48小时以上正常服务

运维切换测试是为了在运维过程中,为保证高可靠性加以实施。建议每年实施一次。因为这样的测试实际是一种演练,能够及时发现各方面的问题,为故障期间切换成功提供有效保证。

一直以来,听过不少用户和同仁抱怨,说平时测试完美,实际关键时刻却不能切换,原因其实除了运维篇没做到位之外,还有测试不够充分的原因。因此本人目前强烈推荐有条件的环境一定要定期进行运维切换测试。

之前由于成本的原因,备机配置一般比主机低,或者大量用于开发测试,很难实施这样的测试。但随着Power机器能力越来越强,一台机器只装一个AIX系统的越来越少,也就使得互备LPAR的资源可以在HA生效是多个LAPR之间直接实时调整资源,使得这样的互换测试成为了可能。

场景

建议时长

切换方式

主备(run->dev)

主机和备机互换

>10天

备机开发测试停用或临时修改HA配置

主分区切、备用分区互换

>30天

备用分区资源增加、主分区资源减少。开发测试停用或临时修改HA配置

互备(app<->db,app<->app,db<->db)

互换

手工互相交叉启动资源组

主机切换到备机:

有2种方式:

可用takeover(moveResourceGroups)方式,但由于负荷和防止误操作的原因,备机的开发测试环境一般需要停用。

也可通过修改HA的配置,将备机资源组的节点数增加运行节点。这样可以在切换测试期间继续使用开发测试环境。但这样不光要对HA有所改动。还要预先配置时就要保证备机开发测试环境也不是放在本地盘上,需要放在共享vg里,此外还要同步开发测试的环境到运行机。建议最好在设计时就有这样的考虑。

手工互相切换:

停掉资源组:

->ResourceGroupandApplications

->BringaResourceGroupOffline选择host2_RG,host2

BringaResourceGroupOffline

ResourceGrouptoBringOfflinehost2_RG

NodeOnWhichtoBringResourceGroupOfflinehost2

PersistAcrossClusterRebootfalse

同样停掉host1_RG

互换资源组:

->BringaResourceGroupOnline选择host2_RG,host1

ResourceGrouptoBringOnlinehost2_RG

NodeonWhichtoBringResourceGroupOnlinehost1

PersistAcrossClusterReboot回答No。

即在host1上启动host2的资源组,同样方法在host2上启动host1资源组。这样2台机器就实现了互换。

注:由于互切需要人工干预,回原也要人工干预,所以切换期间需要密切监控运行状况,如方便出现有异常时,能立刻人工处理。

由于备份作业等crontab里的后台作业会有所不同,所以需要进行互换,按我们的做法(参见脚本篇的同步HA的脚本)只需拷贝相应crontab即可。

[host1][root][/]>cp-rp/home/scripts/host2/crontab_host2/var/spool/cron/crontabs/root

修正文件属性:

[host1][root][/]>chownroot:cron/var/spool/cron/crontabs/root

[host1][root][/]>chmod600/var/spool/cron/crontabs/root

重起crontab:

[host1][root][/]>ps-ef|grepcron

root27868810Dec19-0:02/usr/sbin/cron

[host1][root][/]>kill-9278688

如果不采用我们脚本的做法,除需要拷贝对方的crontab外,还要记得同步相应脚本。

互换备份策略:

由于备份方式不同,可能所作的调整也不一样,需要具体系统具体对待。实验环境中的备份采用后台作业方式,无须进一步处理。实际环境中可能采用备份软件,由于主机互换了,备份策略是否有效需要确认,如无效,需要做相应修正。

作为高可用性的保证,通过了配置和测试之后,系统成功上线了,但不要忘记,HACMP也需要精心维护才能在最关键的时刻发生作用,否则不光是多余的摆设,维护人员会由于“既然已经安装好HACMP了,关键时刻自然会发生作用”的想法反而高枕无忧,麻痹大意。

我们简单统计了以往遇到的切换不成功或误切换的场景,编制了测试成功切换却失败的原因及对策,如下表:

故障现象

原因

根本原因

对策

无法切换1

没通过HACMP的功能(含C-SPOC)进行用户、文件系统等系统变更。

制定和遵守规范,定期检查,定修及时处理

无法切换2

应用停不下来,导致超时,文件系统不能umount

停止脚本考虑不周全

规范化增加kill_vg_user脚本

切换成功但应用不正常1

应用启动异常

应用有变动,停止脚本异常停止或启动脚本不正确

规范化和及时更新起停脚本

切换成功但应用不正常2

备机配置不符合运行要求

各类系统和软件参数不合适

制定检查规范初稿,通过运维切换测试检查确认。

切换成功但通信不正常1

网络路由不通

网络配置原因

修正测试路由,通过运维切换测试检查确认。

切换成功但通信不正常2

通信软件配置问题

由于一台主机同时漂移同一网段的2个服务地址,通信电文从另一个IP地址通信,导致错误

修正配置,绑定指定服务ip。

误切换

DMS问题

系统负荷持续过高

参见经验篇DMS相应章节

注:请记住,对于客户来说,不管什么原因,“应用中断超过了5-10分钟,就是HACMP切换不成功”,也意味着前面所有的工作都白费了,所以维护工作的重要性也是不言而谕的。

HACMP的停止分为3种,

BringResourceGroupsOffline(正常停止)

MoveResourceGroups(手工切换)

UnmanageResourceGroups(强制停掉HACMP,而不停资源组)

下面的维护工作,很多时候需要强制停掉HACMP来进行,此时资源组不会释放,这样做的好处是,由于IP地址、文件系统等等没有任何影响,只是停掉HACMP本身,所以应用服务可以继续提供,实现了在线检查和变更HACMP的目的。

[host1][root][/]>smittyclstop

StopClusterServices

*Stopnow,onsystemrestartorbothnow

StopClusterServicesonthesenodes[host1]

BROADCASTclustershutdownfalse

*SelectanActiononResourceGroupsUnmanageResourceGroup

记得一般所有节点都要进行这样操作。

用cldump可以看到以下结果:

......

lusterName:test_cluster

ResourceGroupName:rg_diskhbmulti_01

StartupPolicy:OnlineOnAllAvailableNodes

FalloverPolicy:BringOffline(OnErrorNodeOnly)

FallbackPolicy:NeverFallback

SitePolicy:ignore

NodeGroupState

-------------------------------------------

host1UNMANAGED

host2UNMANAGED

ResourceGroupName:host1_RG

StartupPolicy:OnlineOnHomeNodeOnly

FalloverPolicy:FalloverToNextPriorityNodeInTheList

FallbackPolicy:FallbackToHigherPriorityNodeInTheList

ResourceGroupName:host2_RG

在修改HACMP的配置后,大多数情况下需要重新申请资源启动,这样才能使HACMP的配置重新生效。

[host1][root][/]>smittyclstart

请注意:为保险,StartupClusterInformationDaemon?选择true。

为了更好的维护好HACMP,平时的检查和处理是必不可少的,下面提供的检查和处理方法除非特别说明,均是不用停机、停止应用即可进行,不影响用户使用。不过具体实施前需要仔细检查状态,再予以实施。

当然,最有说服力的检查和验证是通过运维切换测试,参见测试篇。

这个检查可以对包括LVM的绝大多数HACMP的配置同步状态,是HACMP检查是否同步的主要方式。

smittyclverify->VerifyHACMPConfiguration

回车即可

经过检查,结果应是OK。如果发现不一致,需要区别对待。对于非LVM的报错,大多数情况下不用停止应用,可以用以下步骤解决:

1.先利用强制方式停止HACMP服务。

同样停止host2的HACMP服务。

2.就检查出的问题进行修正和同步:

这时由于已停止HACMP服务,可以包括自动修正和强制同步。

对于LVM的报错,一般是由于未使用HACMP的C-SPOC功能,单边修改文件系统、lv、VG造成的,会造成VG的timestamp不一致。这种情况即使手工在另一边修正(通常由于应用在使用,也不能这样做),选取自动修正的同步,也仍然会报failed。此时只能停掉应用,按首次整理中的整理VG一节解决。

1)查看服务及进程,至少有以下三个:

[host1][root][/]#lssrc-a|grepES

clcomdESclcomdES10027064active

clstrmgrEScluster9109532active

clinfoEScluster5767310active

实际HACMP菜单中也可以调用cldump,效果相同。

cldump的监测为将当前HACMP的状态快照,确认显示为UP,STABLE,否则根据实际情况进行分析处理。

[host1][root][/]>/usr/sbin/cluster/utilities/cldump

ObtaininginformationviaSNMPfromNode:host1...

_____________________________________________________________________________

ClusterState:UP

ClusterSubstate:STABLE

NodeName:host1State:UP

NetworkName:net_diskhbmulti_01State:UP

Address:Label:host1_1State:UP

NetworkName:net_ether_01State:UP

Address:10.2.100.1Label:host1_l1_svc1State:UP

Address:10.2.101.1Label:host1_l1_svc2State:UP

Address:10.2.11.1Label:host1_l1_boot2State:UP

Address:10.2.1.21Label:host1_l1_boot1State:UP

NetworkName:net_ether_02State:UP

Address:10.2.12.1Label:host1_l2_boot2State:UP

Address:10.2.2.1Label:host1_l2_boot1State:UP

Address:10.2.200.1Label:host1_l2_svcState:UP

NodeName:host2State:UP

Address:Label:host2_2State:UP

Address:10.2.100.2Label:host2_l1_svc1State:UP

Address:10.2.101.2Label:host2_l1_svc2State:UP

Address:10.2.11.2Label:host2_l1_boot2State:UP

Address:10.2.1.22Label:host2_l1_boot1State:UP

Address:10.2.12.2Label:host2_l2_boot2State:UP

Address:10.2.2.2Label:host2_l2_boot1State:UP

Address:10.2.200.2Label:host2_l2_svcState:UP

host1ONLINE

host2ONLINE

host2OFFLINE

host1OFFLINE

clstat可以实时监控HACMP的状态,及时确认显示为UP,STABLE,否则根据实际情况进行分析处理。

[host1][root][/]>/usr/sbin/cluster/clstat

clstat-HACMPClusterStatusMonitor

-------------------------------------

Cluster:test_cluster(1572117373)

MonSep1613:38:31GMT+08:002013

State:UPNodes:2

SubState:STABLE

Node:host1State:UP

Interface:host1_l2_boot1(2)Address:10.2.2.1

State:UP

Interface:host1_l1_boot2(1)Address:10.2.11.1

Interface:host1_l2_boot2(2)Address:10.2.12.1

Interface:host1_l1_boot1(1)Address:10.2.1.21

Interface:host1_1(0)Address:0.0.0.0

Interface:host1_l1_svc1(1)Address:10.2.100.1

Interface:host1_l1_svc2(1)Address:10.2.101.1

Interface:host1_l2_svc(2)Address:10.2.200.1

ResourceGroup:host1_RGState:Online

ResourceGroup:rg_diskhbmulti_01State:Online

Node:host2State:UP

Interface:host2_l2_boot1(2)Address:10.2.2.2

Interface:host2_l1_boot2(1)Address:10.2.11.2

Interface:host2_l2_boot2(2)Address:10.2.12.2

Interface:host2_l1_boot1(1)Address:10.2.1.22

Interface:host2_2(0)Address:0.0.0.0

Interface:host2_l1_svc1(1)Address:10.2.100.2

Interface:host2_l1_svc2(1)Address:10.2.101.2

Interface:host2_l2_svc(2)Address:10.2.200.2

ResourceGroup:host2_RGState:Online

************************f/forward,b/back,r/refresh,q/quit*****************

[host1][root][/]#/usr/es/sbin/cluster/utilities/cldisp

Cluster:test_cluster

Clusterservices:active

Stateofcluster:up

Substate:stable

#############

APPLICATIONS

Clustertest_clusterprovidesthefollowingapplications:host1_apphost2_app

Application:host1_app

host1_appisstartedby/usr/sbin/cluster/app/start_host1

host1_appisstoppedby/usr/sbin/cluster/app/stop_host1

Noapplicationmonitorsareconfiguredforhost1_app.

Thisapplicationispartofresourcegroup'host1_RG'.

Resourcegrouppolicies:

Startup:onhomenodeonly

Fallover:tonextprioritynodeinthelist

Fallback:ifhigherprioritynodebecomesavailable

Stateofhost1_app:online

Nodesconfiguredtoprovidehost1_app:host1{up}host2{up}

Nodecurrentlyprovidinghost1_app:host1{up}

Thenodethatwillprovidehost1_appifhost1failsis:host2

Resourcesassociatedwithhost1_app:

ServiceLabels

host1_l1_svc1(10.2.100.1){online}

Interfacesconfiguredtoprovidehost1_l1_svc1:

host1_l1_boot1{up}

withIPaddress:10.2.1.21

oninterface:en0

onnode:host1{up}

onnetwork:net_ether_01{up}

host1_l1_boot2{up}

withIPaddress:10.2.11.1

oninterface:en2

host2_l1_boot2{up}

withIPaddress:10.2.11.2

onnode:host2{up}

host2_l1_boot1{up}

withIPaddress:10.2.1.22

host1_l1_svc2(10.2.101.1){online}

Interfacesconfiguredtoprovidehost1_l1_svc2:

host1_l2_svc(10.2.200.1){online}

Interfacesconfiguredtoprovidehost1_l2_svc:

host1_l2_boot1{up}

withIPaddress:10.2.2.1

oninterface:en1

onnetwork:net_ether_02{up}

host1_l2_boot2{up}

withIPaddress:10.2.12.1

oninterface:en3

host2_l2_boot2{up}

withIPaddress:10.2.12.2

host2_l2_boot1{up}

withIPaddress:10.2.2.2

SharedVolumeGroups:

Application:host2_app

host2_appisstartedby/usr/sbin/cluster/app/start_host2

host2_appisstoppedby/usr/sbin/cluster/app/stop_host2

Noapplicationmonitorsareconfiguredforhost2_app.

Stateofhost2_app:online

Nodesconfiguredtoprovidehost2_app:host1{up}host2{up}

Nodecurrentlyprovidinghost2_app:host1{up}

Thenodethatwillprovidehost2_appifhost1failsis:host2

Resourcesassociatedwithhost2_app:

Thisapplicationispartofresourcegroup'host2_RG'.

Nodesconfiguredtoprovidehost2_app:host2{up}host1{up}

Nodecurrentlyprovidinghost2_app:host2{up}

Thenodethatwillprovidehost2_appifhost2failsis:host1

host2_l1_svc1(10.2.100.2){online}

Interfacesconfiguredtoprovidehost2_l1_svc1:

host2_l1_svc2(10.2.101.2){online}

Interfacesconfiguredtoprovidehost2_l1_svc2:

host2_l2_svc(10.2.200.2){online}

Interfacesconfiguredtoprovidehost2_l2_svc:

TOPOLOGY

test_clusterconsistsofthefollowingnodes:host1host2

Networkinterfaces:

host1_1{up}

device:/dev/mndhb_lv_01

onnetwork:net_diskhbmulti_01{up}

host2_2{up}

[host1][root][/]#

正常情况下,2台互备的/etc/hosts应该是一致的,当然如果是主备机方式,可能备机会多些IP地址和主机名。通过对比2个文件的不同,可以确认是否存在问题。

[host1][root][/]>rshhost2cat/etc/hosts>/tmp/host2_hosts

[host1][root][/]>diff/etc/hosts/tmp/host2_hosts

需要注意以下事项:

2.上一点需要维护人员充分与应用人员沟通,运行环境的任何变更必须通过维护人员实施。

3.维护人员启停应用要养成使用这些脚本启停系统的习惯,尽量避免手工启停。

[host1][root][/home/scripts]>rshhost2"cd/home/scripts;ls-lhost1host2comm">/tmp/host2_scripts

[host1][root][/home/scripts]>ls-lhost1host2comm">/tmp/host1_scripts

[host1][root][/]>diff/tmp/host1_scripts/tmp/host2_scripts

正常情况下,2台互备的HA使用到的用户情况应该是一致的,当然如果是主备机方式,可能备机会多些用户。通过对比2节点的配置不同,可以确认是否存在问题。

[host1][root][/]>

rshhost2lsuser-forarun,orarunc,tuxrun,bsx1,xcom>/tmp/host2_users

lsuser-forarun,orarunc,tuxrun,bsx1,xcom>/tmp/host2_users>/tmp/host1_users

[host1][root][/]>diff/tmp/host1_user/tmp/host2_user

还有两边.profile的对比,用户环境的对比。

[host1][root][/]>rshhost2su-orarun-cset>/tmp/host2.set

[host1][root][/]>su-orarun-cset>/tmp/host1.set

[host1][root][/]>diff/tmp/host1.set/tmp/host2.set

由于心跳在HACMP启动后一直由HACMP在用,所以需要强制停掉HACMP进行检查。

1)察看心跳服务:

从topsvcs可以看到网络的状况,也包括心跳网络,报错为零或比率远低于1%。

[host2][root][/]#lssrc-lstopsvcs

topsvcstopsvcs9371838active

NetworkNameIndxDefdMbrsStAdapterIDGroupID

net_ether_01_0[0]22S10.2.1.2210.2.1.22

net_ether_01_0[0]en00x423665040x42366d24

HBInterval=1.000secs.Sensitivity=10missedbeats

MissedHBs:Total:0Currentgroup:0

Packetssent:15690ICMP0Errors:0Nombuf:0

Packetsreceived:18345ICMP0Dropped:0

NIM'sPID:7929856

net_ether_01_1[1]22S10.2.11.210.2.11.2

net_ether_01_1[1]en20x423665050x42366d25

Packetsreceived:18347ICMP0Dropped:0

NIM'sPID:9044088

net_ether_02_0[2]22S10.2.2.210.2.2.2

net_ether_02_0[2]en10x423665060x42366d26

Packetssent:15688ICMP0Errors:0Nombuf:0

NIM'sPID:6881402

net_ether_02_1[3]22S10.2.12.210.2.12.2

net_ether_02_1[3]en30x423665070x42366d27

Packetssent:15687ICMP0Errors:0Nombuf:0

Packetsreceived:18344ICMP0Dropped:0

NIM'sPID:6684902

diskhbmulti_0[4]22S255.255.10.1255.255.10.1

diskhbmulti_0[4]rmndhb_lv_01.2_10x8236653e0x82366d48

HBInterval=3.000secs.Sensitivity=6missedbeats

Packetssent:5021ICMP0Errors:0Nombuf:0

Packetsreceived:4754ICMP0Dropped:0

NIM'sPID:6553654

2locallyconnectedClientswithPIDs:

haemd(7602388)hagsd(9699456)

FastFailureDetectionavailablebutoff.

DeadManSwitchEnabled:

resetinterval=1seconds

tripinterval=36seconds

ClientHeartbeatingDisabled.

ConfigurationInstance=1

Daemonemploysnosecurity

Segmentspinned:TextData.

Textsegmentsize:862KB.Staticdatasegmentsize:1497KB.

Dynamicdatasegmentsize:8897.Numberofoutstandingmalloc:269

Usertime1sec.Systemtime0sec.

Numberofpagefaults:151.Processswappedout0times.

Numberofnodesup:2.Numberofnodesdown:0.

2)串口心跳检查:

u察看tty速率

确认速率不超过9600

[host1][root][/]>stty-a

[host2][root][/]>cat/etc/hosts>/dev/tty0

host1上显示

speed9600baud;0rows;0columns;

eucw1:1:0:0,scrw1:1:0:0:

u检查连接和配置

[host1][root][/]>host1:cat/etc/hosts>/dev/tty0

[host2][root][/]>host2:cat

3)串口心跳检查:

利用dhb_read确认磁盘的心跳连接

[host1][root][/]#/usr/sbin/rsct/bin/dhb_read-phdisk5-r

DHBCLASSICMODE

Firstnodebyteoffset:61440

Secondnodebyteoffset:62976

Handshakingbyteoffset:65024

Testbyteoffset:64512

ReceiveMode:

Waitingforresponse...

Magicnumber=0x87654321

Linkoperatingnormally

[host2][root][/]#/usr/sbin/rsct/bin/dhb_read-phdisk5-r

[host1][root][/]#/usr/sbin/rsct/bin/dhb_read-phdisk5-t

TransmitMode:

Detectedremoteutilityinreceivemode.Waitingforresponse...

最后报Linkoperatingnormally.正常即可,同样反向也检测一下。

虽然有了以上许多检查,但我们最常看的errpt不要忽略,因为有些报错,需要大家引起注意,由于crontab里HACMP会增加这样一行:

00***/usr/es/sbin/cluster/utilities/clcycle1>/dev/null2>/dev/null#HACMPforAIXLogfilerotation

即实际上每天零点,系统会自动执行HACMP的检查,如果发现问题,会在errpt看到。

除了HACMP检查会报错,其他运行过程中也有可能报错,大都是由于心跳连接问题或负载过高导致HACMP进程无法处理,需要引起注意,具体分析解决。

由于维护的过程出现的情况远比集成实施阶段要复杂,即使红皮书也不能覆盖所有情况。这里只就大家常见的情况加以说明,对于更为复杂或者更为少见的情况,还是请大家翻阅红皮书,实在不行计划停机重新配置也许也是一个快速解决问题的笨方法。

这里的变更原则上是不希望停机,但实际上HACMP的变更,虽然说部分支持DARE(dynamicreconfiguration),部分操作支持Forcestop完成,我们还是建议有条件的话停机完成。

对于动态DARE,我不是非常赞成使用,因为使用不当会造成集群不可控,危险性更大。我一般喜欢使用先强制停止HACMP,再进行以下操作,结束同步确认后再startHACMP。

注意,pvid一定要先认出来,否则盘会没有或不正常。

1.集群的各个节点机器运行cfgmgr,设置pvid

[host1][root][/]>cfgmgr

hdisk4nonenone

[host1][root][/]>chdev-lhdisk2-apv=yes

hdisk400c1eedffc677bfenone

在host2上也要做同样操作。

2.运行C-SPOC增加盘到host2vg:

->VolumeGroups

->SetCharacteristicsofaVolumeGroup

->AddaVolumetoaVolumeGroup

选择VG、磁盘增加即可

AddaVolumetoaVolumeGroup

VOLUMEnameshdisk4

PhysicalVolumeIDs00f6f1562fd2853e

完成后两边都可看到

hdisk400f6f1562fd2853ehost2vgactive

1)lv本身变更:

目前支持增加lv的拷贝,减少,增加空间,改名;

这里以裸设备lv增加空间举例:

->SharedLogicalVolumes

>SetCharacteristicsofaLogicalVolume

->IncreasetheSizeofaLogicalVolume

2)lv属性变更

效果和单机环境一致,但还是建议慎重操作,充分考虑改动后对业务的影响:

->LogicalVolume

->ChangeaLogicalVolume

->ChangeaLogicalVolumeontheCluster选择lv

VolumeGroupNamehost2vg

*LogicalvolumeNAMEora11runlv

LogicalvolumeTYPE[jfs2]

POSITIONonphysicalvolumeouter_middle

RANGEofphysicalvolumesminimum

MAXIMUMNUMBERofPHYSICALVOLUMES[32]

touseforallocation

Allocateeachlogicalpartitioncopyyes

onaSEPARATEphysicalvolume

RELOCATEthelogicalvolumeduringyes

reorganization

LogicalvolumeLABEL[/ora11run]

MAXIMUMNUMBERofLOGICALPARTITIONS[512]

SCHEDULINGPOLICYforwritinglogicalparallel

partitioncopies

PERMISSIONSread/write

EnableBADBLOCKrelocationyes

EnableWRITEVERIFYno

MirrorWriteConsistencyactive

SerlializeI/Ono

->Change/ShowCharacteristicsofaFileSystem

Volumegroupnamehost1vg

*NodeNameshost2,host1

*Filesystemname/ora11runc

NEWmountpoint[/ora11runc]/

SIZEoffilesystem

UnitSize512bytes+

NumberofUnits[10485760]#

MountGROUP[]

MountAUTOMATICALLYatsystemrestartno+

PERMISSIONSread/write+

MountOPTIONS[]

MountOPTIONS[]+

StartDiskAccountingno+

BlockSize(bytes)4096

InlineLogno

InlineLogsize(MBytes)[0]#

ExtendedAttributeFormat[v1]

ENABLEQuotaManagementno+

AllowSmallInodeExtents[yes]+

LogicalVolumeforLoghost1_loglv

1)修改/etc/hosts,增加以下行

10.66.201.1host1_l2_svc2

10.66.201.2host2_l2_svc2

注意:2边都要增加。

2)增加服务地址

->ConfigurableonMultipleNodes选择网络

->AddaServiceIPLabel/AddressconfigurableonMultipleNodes(extended)

*IPLabel/Addresshost1_svc2

*NetworkNamenet_ether_02

同样增加host2_svc2

2)3)修正资源组

->Change/ShowAllResourcesandAttributesforaResourceGroup

4)HACMP同步

触发新增服务ip生效。

这时netstat-in,可以看到地址生效了。

如果应用服务使用的IP地址,自然是需要停止应用进行修改。比如要将原地址10.2.200.x改为10.2.201.x,路由改为10.2.201.254步骤如下:

1.正常停止HACMP

smittyclstop->BringResourceGroupsoffline

2.所有节点修改/etc/hosts将服务地址修改为需要的地址

10.2.201.1host1_l2_svchost1

10.2.201.2host2_l2_svchost2

注意同时要修正/usr/es/sbin/cluster/etc/clhosts

3.修改启动脚本的路由部分(如果需要)

GATEWAY=10.2.201.254

4.在一个节点修改HACMP的配置

->Change/ShowaServiceIPLabel/Address选择host1_l2_svc

不做修改,直接回车即可,同样修改host2_l2_svc。

不做修改,直接回车即可,同样修改host2_RG

5.同步HACMP

6.重新启动HACMP确认

触发新服务IP地址生效。

注:如果修改的不是应用服务要用的地址,或者修改期间对该地址的服务可以暂停,则可以将1改为强制停止,增加第7步,整个过程可以不停应用服务。

7.去除原有服务IP地址

netstat-in找到该服务IP地址所在网卡比如为en2

ifconfigen2aliasdelete10.2.200.1

1.smittytcpip修改网卡的地址

2.修改/etc/hosts的boot地址,

3.修改HACMP配置

Change/ShowaCommunicationInterface

NodeName[bgbcb04]

NetworkInterfaceen1

IPLabel/Addresshost1_boot1

NetworkTypeether

*NetworkName[net_ether_01]

不做修改,直接回车即可,同样修改其他boot地址。

4.同步HACMP

5.重新启动HACMP确认

注意修改启动参数使得启动时重新申请资源,触发新bootIP地址生效,否则clstat看到的boot地址将是down。

修改用户口令

由于安全策略的原因,系统可能需要更改口令,利用HACMP会方便不少,也避免切换过去后因时隔太久,想不起口令需要强制修改的烦恼。

唯一设计不合理的是,必须root才能使用这个功能。

smittyHACMP->ExtendedConfiguration

->SecurityandUsersConfiguration

orarun'sNewpassword:

Enterthenewpasswordagain:

OK即成功

修改用户属性

以下步骤可变更用户属性,值得注意的是,虽然可以直接修改用户的UID,但实际上和在单独的操作系统一样,不会自动修改该用户原有的文件和目录的属性,必须事后自己修改,所以建议UID在规划阶段就早做合理规划。

->Change/ShowCharacteristicsofaUserintheCluster

选择资源组和用户

除开头1行,其他使用均等同于独立操作系统。

ChangeUserAttributesontheCluster

Resourcegroupeai1d0_RG

*UserNAMEtest

UserID[301]

ADMINISTRATIVEUSERfalse

HACMP作用,在于关键时刻能根据发生的情况自动通过预先制定好的策略实施处理-如切换,使得用户短暂的中断即可继续使用。而对于用户来说,“应用可用”才是HACMP切换成功的标志,而这一点不光是HACMP配置本身,还大大倚赖于启停脚本的可用性。

目前IBM的PowerHA6.1.08以后,趋于稳定,BUG很少,这使得用户概念的HACMP切换不成功的主要原因是启停脚本的问题,而很多时候,脚本的问题是非常隐蔽和难以测试的,所以在编写启停脚本时需要考虑周全,系统上线后要仔细维护。

通过多年的实践,我们形成了自己的一套脚本编制方式,共享出来,供大家参考。

对于停止脚本,通过后台启动,前台检查的方式进行,并使用清理VG的进程,确保停止成功。

对于启动脚本,完全放在后台,不影响HACMP的切换。

举例

/usr/sbin/cluster/app

HA启停脚本存放

/usr/sbin/cluster/app/log

启停应用的详细log存放

/home/scripts/`hostname`

应用启停脚本存放

/home/scripts/host1

/tmp

存放启停应用的log

/tmp/ha_app.out

以主机名为特征进行命名,这样方便和区分。

脚本

命名规则

HA启动脚本

start_`hostname`

start_host1

应用启动脚本

start_`hostname`_app

start_host1_app

HA停止脚本

stop_`hostname`

stop_host2

应用停止脚本

stop_`hostname`_app

stop_host2_app

启停应用log

启动应用详细log

start_`hostname`_app`yyyymmddHHMM`log

start_host1_app200712241722.log

停止应用详细log

stop_`hostname`_app`yyyymmddHHMM`log

stop_host1_app200712241722.log

为了便于跟踪和阅读,应用的启停log不写入/var/hacmp/log/hacmp.out,而是另行输出到单独的log。一般情况下,管理员只需跟踪/tmp/ha_app.out即可,一直等不到结束,再查看/usr/sbin/cluster/app/log下详细log。

[host2][root][/]>tail-f/tmp/ha_app.out

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Starting---host2atTueDec1811:17:51BEIST2007

Waiting-------DBtestdb---------start,Pressanykeytocancel..

DBtestdbisstarted!

Waiting-------listenertestdb---------start,Pressanykeytocancel..

testdb--LISTENERisstarted!

Waiting-------listenertestdbport1521---------start,Pressanykeytocancel..

LISTENERtestdbport1521islistening!

starteai1d1successful!atTueDec1811:20:43BEIST2007

[host2][root][/]>cd/usr/sbin/cluster/app

[host2][root][/]>morestart_host2_app200712181117.log

Starting---eai1d1atMonDec2416:06:35BEIST2007

MonDec2416:06:35BEIST2007

Waiting-------DBeaiz1dev---------start,Pressanykeytocancel..

SQL*Plus:Release10.2.0.2.0-ProductiononMonDec2416:06:352007

Connectedtoanidleinstance.

SQL>ORACLEinstancestarted.

TotalSystemGlobalArea1543503872bytes

FixedSize2071488bytes

VariableSize369099840bytes

DatabaseBuffers1157627904bytes

RedoBuffers14704640bytes

....Databasemounted.

.Databaseopened.

SQL>DisconnectedfromOracleDatabase10gEnterpriseEditionRelease10.2.0.2.0-64bitProduction

值得注意的是,经过测试和实际使用发现,由HA启动脚本时,如有嵌套,相对目录执行程序将不能生效,必须写成绝对路径。如下面的情况将导致错误:

start_host1:nohup/home/scripts/host1/start_host1_app&

start_host1_app:/home/scripts/comm/start_db.shoraruntestdb1521

start_db.sh:cd/home/scripts/comm

check_db_main.shtestdb

check_db_main.shnotfound。

需要改写为

start_db.sh:/home/scripts/comm/check_db_main.shtestdb

由于HACMP的启动和应用的启动可以分开,为避免应用脚本的启动不正常导致HACMP的报错,建议将HACMP的启动脚本简化,将启动应用的部分放在另一个应用启动脚本里。

基于规划,start_host2_app的启动脚本使用了公用程序start_db.sh和wait_db_start.sh,源代码如下,供大家参考:

start_db.sh的代码如下:

#start_db.shoracle_sidlistener_name

ORACLE_SID=$1

sqlplus"/assysdba"<

startup

EOF

lsnrctlstart$2

wait_db_start.sh的代码如下:

wait_db.shoracle_useroracle_sidlistner_port

#returncode:1---presskeycanceled

waitout()

{

printf"Waiting-------${1}${2}${3}---------start,Pressanykeytocancel."

}

#main

CURRENT_PATH=`pwd`

SCRIPTS_PATH=`dirname${0}`

cd$SCRIPTS_PATH

waitoutDB$2

i=1

while[$i-gt0]

do

waitkey

$SCRIPTS_PATH/check_db_main.sh$1$2

i=$

done

waitoutlistener$2

$SCRIPTS_PATH/check_db_listener.sh$1$2$4

waitoutlistener$2"port$3"

$SCRIPTS_PATH/check_port.sh$3

echo"nLISTENER$2port$3islistening!"

cd$CURRENT_PATH

实际使用start_host1代码如下:

MACHINE=host1

GATEWAY=10.2.1.254

HA_LOG=log/start_"$MACHINE"_app`date+%C%y%m%d%H%M`.log

if["$SCRIPTS_PATH"="."];then

SCRIPTS_PATH=`pwd`

fi

if[`hostname`="$MACHINE"];then

routeadd0$GATEWAY

>$SCRIPTS_PATH/$HA_LOG

nohup/home/scripts/comm/tail_log.shstart_app$SCRIPTS_PATH/$HA_LOG"!!!!!!!!!!!!|started!|Waiting---|listening!|starting---|successful!""successful!">>/tmp/ha_app.out&

sleep1

nohup/home/scripts/$MACHINE/start_"$MACHINE"_appha>$HA_LOG&

由于必须保证应用正常停止,才切换过去,所以停止脚本的正常结束才是HACMP停止应用服务器的成功。

此外,为了防止停止时出现停不下来的现象,导致HACMP超时报toolong广播,需要注意以下停止脚本的编写:

如oracle数据库停止之前,建议增加以下代码:

ps-ef|grepora|grep$ORACLE_SID|grep"LOCAL=NO"|awk'{print"kill-9"$2}'|sh

2.最后加上清理文件系统的脚本

这一点很容易被忽略,因为有时即使应用正常停止,以下原因都可能导致导致HACMP不能umount这个文件系统:

u有其他程序使用了该文件系统下的库文件

u该文件系统与应用无关,但正在被使用。

结果均会最终导致HACMP停止不了该节点,切换失败。

基于这个原因,我们编写了kill_vg_user.sh,使用起来非常方便有效,都放在/home/scripts/comm下。现提供源代码,供大家使用和指正。

kill_vg_user.sh代码如下

#kill_vg_user.shvg_name

#kill_vg_user.sherpapp_vg

if[$#-le0];then

echo"nopara,example:kill_vg_user.sherpapp_vg"

exit

df-k|awk'{print$7}'|grep-vMounted>/tmp/fs_mounted.txt

foriin`lsvg-l$1|grep-vE"N/A|vg|MOUNT"|awk'{print$7}'`

if[`grep-c$i/tmp/fs_mounted.txt`-ge1];then

echokill_fs_user.sh$i

$SCRIPTS_PATH/kill_fs_user.sh$i

调用的kill_fs_user.sh代码如下

#kill_fs.shfs_name

#kill_fs.sh/oracle

if[`df-k|grep$1|grep-vgrep|awk'{print$7}'|grep-v[0-9a-zA-Z]$1|grep-v$1[0-9a-zA-Z_-]|wc-l`-eq1];then

fuser-kcux$1

实际使用stop_host1代码如下:

VGNAME=host1vg

HA_LOG=log/stop_"$MACHINE"_app`date+%C%y%m%d%H%M`.log

>$HA_LOG

/home/scripts/comm/tail_log.shstop_app$SCRIPTS_PATH/$HA_LOG"!!!!!!!!!!!!!!!!!!|stopped!|Waiting---|stopping---|successful!""successful!">>/tmp/ha_app.out&

/home/scripts/$MACHINE/stop_"$MACHINE"_appha>$HA_LOG2>&1#stop_host1

/home/scripts/comm/kill_vg_user.sh$VGNAME

在host1上编写

sync_HA.sh的源代码

OMACHINE=host2

rsh$OMACHINE"cd/home/scripts;tar-cvf${OMACHINE}_scripts.tar$OMACHINE"

rcp$OMACHINE:/home/scripts/${OMACHINE}_scripts.tar/home/scripts

cd/home/scripts

rm-rf$OMACHINE

tar-xvf${OMACHINE}_scripts.tar

rcp$OMACHINE:/var/spool/cron/crontabs/root/home/scripts/$OMACHINE/crontab_${OMACHINE}

修改Crontab生效

###synccrontab

00***/home/script/sync_HA.sh>/tmp/sync_HA.log2>&1

同样在host2上编写,但注意OMACHINE修改为host1。

所以,我们试图找到一个办法,来应对HACMP本身异常99%的异常情况,而对于脚本和系统参数的不匹配,只能通过找出问题所在来处理。

1)快速强制停止host1机器运行

host1:halt-q

2)确保应用服务继续

host2上使用手工启动host1_RG,

->HACMPResourceGroupandApplicationManagement

->BringaResourceGroupOnline选择host1_RG,host2

BringaResourceGroupOnline

ResourceGrouptoBringOnlinehost1_RG

NodeonWhichtoBringResourceGroupOnlinehost2

即在host2上启动host1的资源组。

3)检查和确认应用已可继续

如发现仍然不正常,启动下一场景的第3点处理。

4)检查和修正问题。

a)host2:强制停止HACMP

b)重新启动host1,确认无硬件问题

c)检查HACMP的环境,阅读/var/hacmp/log/hacmp.out等log,看看能否找出问题所在

d)修正HACMP或其他部分

由于此场景的起因有很多,3,4点只能根据具体系统来细化,但还是强烈建议每个系统编制一份手工切换手册,详细列明HACMP不可用的情况下如何手工启动应用。以备紧急情况使用。

1)停止host1机器运行

2)host2强制停止HACMP

3)检查和修正目前状况

HACMP异常情况修正表

目前状况

修正

备注

服务IP地址

smittytcpip手工添加

vg状况

未varyon

varyonvg手工执行

如果锁住加varyonvg-bu

fs状况

未mount

mount手工执行

如损坏,执行fsck-y

应用程序状况

执行异常

强制停止,重起

确认1-3ok再做

4)手工修正目前状况

5)检查和修正问题

a)重新启动host1,确认无硬件问题

b)检查HACMP的环境,阅读/var/hacmp/log/hacmp.out等log,看看能否找出问题所在

c)修正HACMP或其他部分

有的系统,希望开机就把HACMP自动带起,也就不需要人工干预就启动了应用,这需要clstart时指明:

*Startnow,onsystemrestartorbothrestart

StartClusterServicesonthesenodes[host1]

BROADCASTmessageatstartuptrue

StartupClusterInformationDaemonfalse

Reacquireresourcesafterforceddownfalse

这样,HACMP会自动才/etc/initab里增加以下一行

hacmp6000:2:wait:/usr/es/sbin/cluster/etc/rc.cluster-boot-i-A#BringupCluster

这样就实现了自动启动HACMP和应用。

如果希望取消这种设定,需要运行clstop:

*Stopnow,onsystemrestartorbothrestart

BROADCASTclustershutdowntrue

*SelectanActiononResourceGroupsBringResourceGroups

可以看到/etc/initab里这一行消失了。

->ExtendedEventConfiguration

->Change/ShowTimeUntilWarning

Max.Event-onlyDuration(inseconds)[360]

Max.ResourceGroupProcessingTime(inseconds)[360]

TotaltimetoprocessaResourceGroupevent12minutesand0seconds

beforeawarningisdisplayed

NOTE:Changesmadetothispanelmustbe

propagatedtotheothernodesby

VerifyingandSynchronizingthecluster

同样,修改后需要HACMP同步。

errpt确认DMS的发生:

LABEL:KERNEL_PANICIDENTIFIER:225E3B63Date/Time:ThuApr2521:26:16SequenceNumber:609MachineId:0040613A4C00NodeId:localhostClass:SType:TEMPResourceName:PANICDescrīptionSOFTWAREPROGRAMABNORMALLYTERMINATEDRecommendedActionsPERFORMPROBLEMDETERMINATIONPROCEDURESDetailDataASSERTSTRINGPANICSTRING

DMS起作用的原因主要有以下几点:

某种应用程序的优先级大于clstrmgrdeamon,导致clstrmgr无法正常resetDMS计数器。

内存泄漏或溢出问题

大量的系统错误日志活动。

换句话说,当以上情况出现时,HACMP认为系统崩溃,会自动切换到另一台节点机上去,这是我们想要的结果吗?

smittyHACMP->ExtendedTopologyConfiguration

->ConfigureHACMPNetworkModules

->ChangeaNetworkModuleusingPredefinedValues选择r232

*NetworkModuleNamers232

DescriptionRS232SerialProtocol

FailureDetectionRateSlow

同样,记得同步HACMP。

如果还是发生DMS导致的HACMP切换,排除异常后,只好禁用DMS了,这点IBM不推荐,因为有可能造成切换时数据丢失或损坏。

修改rc.cluster文件增加-D参数:

[host1][root][/]>vi/usr/es/sbin/cluster/etc/rc.cluster

if["$VERBOSE_LOGGING"="high"]

then

clstart-D-smG$CLINFOD$BCAST

else

clstart-D-smG$CLINFOD$BCAST2>/dev/console

重起HACMP生效。

在aix5.2下要对snmp做一些调整才可以看到真正的HACMP的状态。

具体来说,aix5.2的snmp默认是version3:

[host1][root][/]>ls-l|grepsnmp

lrwxrwxrwx1rootsystem8Apr0817:55clsnmp->clsnmpne

-rwxr-x---1rootsystem83150Mar122003clsnmpne

-rwxr-x---1rootsystem55110Mar122003pppsnmpd

lrwxrwxrwx1rootsystem9Apr0817:55snmpd->snmpdv3ne

而HACMP只支持snmpversion1.所以我们要做一下调整:

stopsrc-ssnmpd

[host1][root][/usr/sbin]>ls-l|grepsnmp

lrwxrwxrwx1rootsystem18Apr2113:40clsnmp->/usr/sbin/clsnmpne

lrwxrwxrwx1rootsystem17Apr2113:40snmpd->/usr/sbin/snmpdv1

THE END
1.“男不带天,女不带仙”:古人给孩子起名的禁忌与深意解析在那个等级森严的社会中,“天”字不仅是个简单的词,更是皇权至上的象征。古代流传的许多故事因使用“天”的字而招致厄运的传说,如今仍让人心有余悸。说到这里,仿佛有一股压迫感从那遥远的历史悠远而来,提醒着我们谨慎对待名号。而在不同地区,取名的忌讳有着各自独特的风俗,江南一带就对“仙”字忌讳得尤为https://baijiahao.baidu.com/s?id=1820494258714950232&wfr=spider&for=pc
2.玥字取名不吉利,玥字取名不吉利的地方坊间关于汉字“玥”的确是有不吉祥之说,尤其这个字用来取名,一直有争议,流传说这个字不吉祥,至于为什么不吉祥,和玥字的来历和传说有关。关于玥字的传说有两种,其中每一种解释的意思都有区别。以下是我根据相关资料整理的玥字不吉祥的原因。 1、玥是古代神话传说中祭祀用的神珠。 http://pet.jbx668.com/q/703369/
3.取名慎用字集锦(仅供娱乐)取名慎用字集锦(仅供娱乐) 参考消息 首页 发现 下载手机端 参考消息 取名慎用字集锦(仅供娱乐) 2020-03-07 阅读3896更新于 2023-12-30 来自作品集管理那点事送花 打赏 投诉 阅读 3896 21 太湖水 我就叫鑫,并且还是叠名。平安了60多年 2023-12-30 海口市四院-梁艳华 2020https://www.meipian.cn/2rxn57vg
4.web前端基础web前端代码JavaScript在1995年由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。 JavaScript的标准是ECMAScript 。截至 2012 年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏https://blog.csdn.net/ZiminLi/article/details/127346490
5.女孩取名字用什么字好(全文)历史的原因,人们对于女性名誉和形象的要求比男性更为苛刻,由好到坏只要一秒,由坏到好,需要几年甚至一生,所以父母们在给女儿取名字的时候,格外需要谨慎。有四个字,取名时请慎用。 1.“渝”字有“由白变黑”的意思 渝这个字太消极。台湾有一女星叫“钱柏渝”,钱小姐原艺名柏妍安,我猜是出自江湖术士手笔, “https://www.99xueshu.com/w/yjrred6vulgl.html
6.www.hmz5.com/news/20231016瑾字取名慎用 序研 拼音五行释意 序 xù 金 开头的,在正式内容之前的;古代指送别赠言的文字;季节;古代地方办的学校。用作人名意指条理清晰、行成于思、条理清晰之义。 研 yán,yàn 木 1、详尽,精细,如研深,精深。2、妍好,也作“妍” ,如研和,美好温和。用作人名意指学问渊博、心思缜密、专心致志、学https://www.hmz5.com/news/2023-10-16-090117475
7.公司在线起名公司起名常用字大全,随着品牌时代的到来,公司取名越来越重要,也越来越多的公司注重对公司的起名,一个公司的名字是给人最重要的第一印象,公司的名字是公司形象的一个最直接的反应,好的名字可以反应公司的文化、气质、个性,为企业树立良好的形象提供了前提保证。一个好的店名,首先具备易读易记的特征。在公众心目中留https://www.yw11.com/jh/1915/
8.起名字为什么不能用睿?睿字太重不适合起名吗?然而,既然民间有起名字不能用睿,那么就一定是有原因的,之所以说起名字为什么不能用睿,原因主要有以下三点: 1、 有人认为睿字比较难以记忆,并且也不好写,怀疑它是生僻字,但其实睿并不是生冷字,它属于常见字,并且生活中很多人用睿字来取名,我们熟悉的很多名人,名字里就包含了“睿”,比如郭涛的儿子郭子睿,还有http://yi.fsrdz.com/question/1198012
9.小孩姓名取名(2024属龙女孩最佳名字),2024年出生的龙女好吗现在许多家长会选择流行的名字,比如“婧”字、”馨”字等,但这些名字过于普遍,容易造成名字重复,缺乏个性。因此,在给龙年女孩取名字时,可以从一些不常见且具有独特寓意的字眼入手,让宝宝的名字在人群中更为突出。 例如,“梓”字,虽有木的含义,但并不常见,能为女孩起到特别且有内涵的效果;或者可以选择一些具有历http://www.kzafforest.com/post/19049.html
10.给孩子取名,这四个字千万要慎用!龙吟师傅告诉你为什么!给孩子取名,这四个字千万要慎用!龙吟师傅告诉你为什么! 文/龙吟师傅 取名,是指运用各种方法将人或物指定一个便于识别区分的名称,凡人必要取名,取名必分姓与名,姓名既是人的符号,又是人们彼此相区别相联系的一个记号,自古以来,人们对自己姓名十分珍视,我国的姓与名,经历了漫长的演变过程,才发展到了今天人们所http://www.360doc.com/content/21/0405/17/56335331_970713169.shtml