mxin
作者mxin2013-11-08 10:29
系统架构师, AiX专家俱乐部

PowerHA完全手册(一)

字数 258607阅读 29741评论 51赞 12

目录

 前言 5

1. 为什么需要PowerHA/HACMP 6

2. PowerHA的版本 7

3. HACMP的工作原理 8

4. HACMP术语:  9

5. 实验环境说明: 12

1) 机器一览表 12

2) 磁盘和VG规划表 12

3) 用户和组规划表 12

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

5) 路由规划表 13

6) HACMP结构表 13

7) HACMP示意图 14

8) 实验环境示意图 15

9) 应用脚本起停设计 15

第一部分--规划篇 17

2.1. 规划前的需求调研 17

2.2. PowerHA/HACMP版本确定 18

2.3. IP地址设计 18

2.4. 心跳设计 21

2.5. 资源组设计 22

2.5.1. 磁盘及VG设计 22

2.5.2. 用户及组设计 22

2.5.3. 逻辑卷和文件系统设计 23

2.5.4. 路由设计 23

2.5.5. 应用脚本设计 23

第二部分--安装配置篇 24

2.1. 准备 24

2.1.1. 安装前提 24

1) 操作系统版本要求: 24

2) 系统参数要求 24

3) 环境要求 24

4) 安装包要求: 25

2.2. 安装 27

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

2.2.2. 打补丁 28

2.2.3. 安装确认 30

2.3. 配置准备 31

2.3.1. 修改.rhosts 31

2.3.2. 修改/etc/hosts 32

2.3.3. 添加共享vg: 32

2.3.4. 建立文件系统 33

2.3.5. 修改loglv 33

2.3.6. 整理vg 35

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/hosts 50

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

2.6.3. 配置clinfo 51

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.sh 107

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的too long报警广播的修正 110

6.2.3. HACMP的DMS问题的修正 111

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

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

7.1.1. 标准的oracle RAC配置 113

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

 

前言


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

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

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

此外,虽然本文号称“完全手册”,一是为了吸引眼球,二也只是相对于其他只谈安装配置的文档而言。由于HACMP现在已相当复杂,本文范围也主要关注于最常用的双节点,还望大家谅解。

 即便如此,本文篇幅可能仍然较长,虽然也建议大家先通读一下,但实际使用使用时可根据具体目的按章节直接查阅操作。这是因为一方面本文所述操作笔者都加以验证过;一方面也是全中文,省得大家去查一大堆原版资料。希望能帮助大家在集成和运维HACMP的过程中节省精力、降低实施风险,这也是本文编写的初衷。同时还望那些被部分摘抄文章的同仁也能理解,你们都是笔者的老师,这里也一一谢过。

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

 

 

1. 为什么需要PowerHA/HACMP

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

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

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

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

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

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

 

2. PowerHA的版本

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

大家可以看到,我们通常的HACMP其实现在准确名称是 PowerHA SystemMirror ,它有2个平台4个主要大版本,for AIX ,i系统;企业版和标准版;企业版扩展了异地容灾相关的功能;而其他小版本,则是在其企业版和标准版基础之外的支持;比如最近比较热的PowerHA SystemMirror HyperSwap®的数据中心双活的解决方案 ,就是利用HyperSwap版本对存储DS8000容错的扩展支持来得以实现。

我们说的PowerHA pureScale,则是和类oracle RAC的IBMDB2 pureScale解决方案相配合的高可用性套件,不再是我们通常意义上的HACMP。

由于本文的重点为AIX的本地高可用性,因此除非特别声明,我们缺省说PowerHA时都是指PowerHA SystemMirror Standard的版本。

 

3. HACMP的工作原理

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

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

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

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

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

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

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

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

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

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

 

4. HACMP术语:

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

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

· 节点Nodes)运行AIX操作系统的Power服务器上的分区或微分区。

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

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

· 网络Networks):IP 网络和非 IP 网络

· 通信接口Communication interfaces:以太网令牌环网适配器

· 通信设备Communication devices):RS232 或磁盘的心跳机制

拓扑组件示意图

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

· 应用服务器Application servers:它涉及应用程序的启动/停止脚本。

· 服务 IP 地址Service IP labels / addresses:最终用户一般通过 IP 地址连接应用程序。这个 IP 地址映射到实际运行应用程序的节点。因为 IP 地址需要保持高可用性,所以它属于资源组。

· 文件系统File systems:许多应用程序需要挂载文件系统。

· 卷组Volume groups:许多应用程序需要高可用的卷组。

 

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

资源组件示意图

此外,还存在资源组有与其相关联的策略。这些策略包括:

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

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

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

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

 

5. 实验环境说明:

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

1) 机器一览

 

节点机器名

操作系统

应用软件

HA版本

host1

AIX6.1.7

ORACLE 11g

HA6.1.10

host2

AIX6.1.7

TUXEDO 11

HA6.1.10

 

2) 磁盘和VG规划

节点机器名

磁盘

VG

VG MajorNumber

host1

hdisk2

host1vg

101

host2

hdisk3

host2vg

201

 

3) 用户和组规划

用户

USERID

组ID

使用节点

orarunc

610

dba

601

host1

tuxrun

301

tux

301

host1

bsx1

302

tux

301

host1

xcom

401

dba

601

host1

orarun

609

dba

601

host2

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

PP size:128M

节点机器名

逻辑卷

文件系统

 大小(pp)

 所有者

用途

host1

ora11runclv

/ora11runc

40

orarunc

ORACLE客户端软件

tux11runlv

/tux11run

30

tuxedo

Tuxedo软件

bsx1lv

/bsx1

30

bsx1

宝信MES应用程序

xcomlv

/xcom

30

xcom

宝信xcom通信软件

host2

ora11runlv

/ora11run

60

orarun

ORACLE数据库软件

oradatalv

/oradata

80

orarun

数据库

 

5) 路由规划

节点名

目的

路由

host1

default

10.2.100.254

10.2.200

10.2.1.254

10.3.300

10.2.1.254

host2

default

10.2.100.254

 

6) HACMP结构表

集群名: test_cluster

适配器名

功能

网络名

网络类型

属性

节点名

IP地址

MAC地址

host1_tty0

heartbeat

host1_net_rs232

rs232

serial

host1

 

 

host1_l2_boot1

boot1

host2_net_ether_2

ether

public

host1

10.2.2.1

 

host1_l1_boot1

boot1

host2_net_ether_1

ether

public

host1

10.2.1.21

 

host1_l2_svc

Service

host1_net_ether_2

ether

public

host1

10.2.200.1

 

host1_l1_svc1

Service

host1_net_ether_1

ether

public

host1

10.2.100.1

 

host1_l1_svc2

Service

host1_net_ether_1

ether

public

host1

10.2.101.1

 

host1_l2_boot2

boot2

host1_net_ether_2

ether

public

host1

10.2.12.1

 

host1_l1_boot2

boot2

host1_net_ether_1

ether

public

host1

10.2.11.1

 

host2_tty0

heartbeat

host2_net_rs232

rs232

serial

host2

 

 

host2_l2_boot1

boot1

host2_net_ether_2

ether

public

host2

10.2.2.2

 

host2_l1_boot1

boot1

host2_net_ether_1

ether

public

host2

10.2.1.22

 

host2_l2_svc

service

host2_net_ether_2

ether

public

host2

10.2.200.2

 

host2_l1_svc1

service

host2_net_ether_1

ether

public

host2

10.2.100.2

 

host2_l1_svc2

service

host2_net_ether_1

ether

public

host2

10.2.101.2

 

host2_l2_boot2

boot2

host2_net_ether_2

ether

public

host2

10.2.12.2

 

host2_l1_boot2

boot2

host2_net_ether_1

ether

public

host2

10.2.11.2

 

 

7) HACMP示意图

8) 实验环境示意图

        

9) 应用脚本起停设计

 

Ø start_host1:

     添加网关

     运行start_host1_app

Ø stop_host1:

     运行stop_host1_app

     清理vg进程

Ø start_host2:

     添加网关

     运行start_host2_app

Ø stop_host2:

   运行stop_host1_app

   清理vg进程

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

2.1.  规划前的需求调研

   在做规划之前,或者说一个准备实施HACMP来保证高可用性的系统初步设计之前,至少需要调查了解系统的以下相关情况,这些都可能影响到HACMP的配置。

 

Ø  应用特点

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

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

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

Ø  网络状况和规划

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

Ø  操作系统情况

    目前IBMHACMP除了AIX,还支持Linux

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

Ø  主机设计

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

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

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

  

Ø  预计实施高可用性的情况

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

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

   

 

2.2.  PowerHA/HACMP版本确定

     IBM HACMP 自从出了5.2 版本后, 到了5.205后比较稳定,并经过我们自己充分的测试(见测试篇)和实践证明(已有多个系统成功自动切换)。之前个人觉得HACMP5.3后变化较快快,功能增加多,稳定性不够,相当长时间还是一直推荐HA5.209。这也是本文出了第一版完全手册之后一直没有修订的原因之一。

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

2.3.  IP地址设计

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

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

u  第一个拓扑模式:IPAT via Replacement

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

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

 

u  第二个拓扑模式:IPAT via Aliasing

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

 

u  第三种模式:EthernetChannelEC

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

      本文讨论实际工作中使用最多的为第2:别名方式(IPAT via Aliasing),即使到今天,其使用仍然最为广泛,对交换机要求也最低。对于新型核心交换机和网络人员可紧密配合的,则推荐第3种,由于第3种更为简单,切换时间更短。但本文这里以第2种为主加以讨论

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

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

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

设计人

机器名

服务地址

boot1地址

boot2地址

张三

app1_db

10.66.1.1

10.10.1.1

10.10.1.1

张三

app1_app

10.66.1.2

10.10.2.2

10.10.2.2

李四

app2_db

10.66.2.1

10.66.3.1

10.66.1.1

李四

app2_app

10.66.2.2

10.66.3.2

10.10.1.2

王五

app3_db

10.66.3.1

10.66.1.1

10.66.2.1

王五

app3_app

10.66.3.2

10.66.1.2

10.10.2.2

 

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

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

boot地址的设计表1

设计人

机器名

服务地址

boot1地址

boot2地址

张三

app1_db

10.66.3.1

10.10.1.1

10.10.1.1

张三

app1_app

10.66.3.2

10.10.1.2

10.10.1.2

李四

app2_db

10.66.3.11

10.10.1.1

10.10.1.1

李四

app2_app

10.66.3.12

10.10.1.2

10.10.1.2

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

boot地址的设计表2

设计人

机器名

服务地址

boot1地址

boot2地址

张三

app1_db

10.66.3.1

10.10.1.1

10.10.1.1

张三

app1_app

10.66.3.2

10.10.1.2

10.10.1.2

李四

app2_db

10.66.3.11

10.10.1.11

10.10.1.11

李四

app2_app

10.66.3.12

10.10.1.12

10.10.1.12

 

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

2.4.  心跳设计

      配置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方式,效果有待进一步观察。

2.5.  资源组设计

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

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

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

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

2.5.1.磁盘及VG设计

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

2.5.2.用户及组设计

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

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

2.5.3.逻辑卷和文件系统设计

HACMP要求切换相关的文件系统和lv不能重名,如host2oracle软件目录为/ora11runhost1上的/ora11run必须为切换保留,改为/ora11runc

此外,集群下相关的文件系统和lv,在各个节点主机的定义也需要一致,/etc/filesystems里是一致的,这个通过importvgHACMPC-SPOC来保证。 

2.5.4.路由设计

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

2.5.5.应用脚本设计

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

第二部分--安装配置篇2.1.  准备2.1.1.安装前提 1)    操作系统版本要求:

实验实际为AIX6.1.10,实际HACMP6.1 要求AIX5.3.9AIX6.1.2,具体安装时可查看以下安装版本的《High Availability Cluster Multi-Processing for AIX   Installation GuidePrerequisites一节。

2)    系统参数要求

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

1.    异步I/O 服务进程配置(Asynchronous I/O servers

2.    用户最大进程数

3.    系统时间

4.    用户缺省的limits参数

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

3)    环境要求

   此时,没有建立任何HACMP占用设计ID相关用户和组,同样也没有建立VG和文件系统,包括名称冲突文件系统和lvMajor numver冲突的VG

Ø  用户和组确认

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

 [host1][root][/]lsuser -a id  ALL

 

root id=0

daemon id=1

bin id=2

sys id=3

adm id=4

uucp id=5

……

[host2][root][/]>lsuser -a id ALL

root id=0

daemon id=1

……

Ø  文件系统确认

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

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

Filesystem    1024-blocks      Free %Used    Iused %Iused Mounted on

/dev/hd4           524288    487820    7%     3276     3% /

/dev/hd2          7077888   1868516   74%    91290    18% /usr

/dev/hd9var        524288    458364   13%      991     1% /var

/dev/hd3           917504    826700   10%      120     1% /tmp

/dev/hd1           655360    524856   20%      291     1% /home

/proc                   -         -    -         -     -  /proc

/dev/hd10opt      1179648    589072   51%    11370     8% /opt

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

 ..

 

 

4)    安装包要求:

RSCT 3.1.2.0 或更高版本。lslpp -l|grep rsct

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

lslpp  -l  rsct.*

lslpp  -l  bos.adt.lib

lslpp  -l  bos.adt.libm

lslpp  -l  bos.adt.syscalls

lslpp  -l  bos.net.tcp.client

lslpp  -l  bos.net.tcp.server

lslpp  -l  bos.rte.SRC

lslpp  -l  bos.rte.libc

lslpp  -l  bos.rte.libcfg

lslpp  -l  bos.rte.libcur

lslpp  -l  bos.rte.libpthreads

lslpp  -l  bos.rte.odm

显示确认结果:

[host1][root][/]>lslpp  -l  rsct.*

  Fileset                      Level  State      Description        

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

Path: /usr/lib/objrepos

  rsct.basic.hacmp           3.1.2.0  COMMITTED  RSCT Basic Function (HACMP/ES

                                                 Support)

  rsct.basic.rte             3.1.2.0  COMMITTED  RSCT Basic Function

  rsct.basic.sp              3.1.2.0  COMMITTED  RSCT Basic Function (PSSP

                                                 Support)

  rsct.compat.basic.hacmp    3.1.2.0  COMMITTED  RSCT Event Management Basic

                                                 Function (HACMP/ES Support)

  rsct.compat.basic.rte      3.1.2.0  COMMITTED  RSCT Event Management Basic

                                                 Function

  rsct.compat.basic.sp       3.1.2.0  COMMITTED  RSCT Event Management Basic

                                                 Function (PSSP Support)

  rsct.compat.clients.hacmp  3.1.2.0  COMMITTED  RSCT Event Management Client

                                                 Function (HACMP/ES Support)

[host2][root][/]>lslpp  -l  rsct.*

……

 


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

如果是光盘,请插入光盘 ,输入smitty install_latest

                                Install Software

Type or select values in entry fields.

Press Enter AFTER making all desired changes.

                                              [Entry Fields]

* INPUT device / directory for software               /dev/cd0

* SOFTWARE to install                           [_all_latest]

..                                                                      

  ACCEPT new license agreements?                      yes                                                                        

Preview new LICENSE agreements?                     no 

如果是安装盘拷贝,请进入cd installp/ppc目录,smitty install_latest

     Install Software

Type or select values in entry fields.

Press Enter AFTER making all desired changes.

                                              [Entry Fields]

* INPUT device / directory for software               .

* SOFTWARE to install                           [_all_latest]

..

  ACCEPT new license agreements?                      yes                                                                         

Preview new LICENSE agreements?                     no

安装结束后,会报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的包都要安装 

2.2.2.打补丁

       注意,请不要忽略给HACMP打补丁这一步骤。其实对HACMP来说,补丁是十分重要的。很多发现的缺陷都已经在补丁中被解决了。当严格的按照正确步骤安装和配置完HACMP的软件后,发现takeover 有问题,IP接管有问题,机器自动宕机等等千奇百怪的问题,其实大都与补丁有关。所以一定要注意打补丁这个环节。如为HACMP 6110  IV42930以上

Apar: IV42930

LATEST HACMP FOR AIX R610 FIXES SP11 MAY 2013  

  smitty install_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,检查

glvm.rpv.*

cluster.xd.glvm

cluster.es.tc.*

cluster.es.svcpprc.*  

cluster.es.sr.rte.*       

cluster.es.spprc.*  

cluster.es.pprc.*

cluster.es.genxd.*  

cluster.es.cgpprc.*

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


补丁可在IBM网站下载:

 

 重启机器

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


 

2.2.3.安装确认1) 确认inittab

egrep  -i  "hacmp" /etc/inittab

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

   HACMP 6.1版本中,我们可以看到inittab非常简化,将所有HACMP需要开机启动相关进程的工作,全部归入一个脚本/usr/es/sbin/cluster/etc/rc.init来运行。如果你查看/etc文件/inittab文件 就会发现安装完HACMP后,仅添加了一行:

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

2) 确认安装和补丁包:(关键为cluster.es.server.rte

lslpp -l cluster.*

  Fileset                      Level  State      Description        

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

Path: /usr/lib/objrepos

  ..

  cluster.es.server.rte      6.1.0.10  COMMITTED  ES Base Server Runtime

 ……

3) 确认clcomdES已启动

lssrc -s clcomdES

Subsystem         Group            PID          Status

 clcomdES         clcomdES         4128974      active

2.3.  配置准备

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

2.3.1.修改.rhosts

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

 

[host1][root]vi  /.rhosts

host1

host1_l2_boot1 

host1_l1_boot1 

host1_l2_svc       

host1_l1_svc1   

host1_l1_svc2   

host1_l2_boot2 

host1_l1_boot2 

host2

host2_l2_boot1 

host2_l1_boot1 

host2_l2_svc       

host2_l1_svc1     

host2_l1_svc2     

host2_l2_boot2 

host2_l1_boot2 

 

注意权限修改:

  chmod 644 /.rhosts

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

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

 

2.3.2.修改/etc/hosts

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

127.0.0.1               loopback localhost      # loopback (lo0) name/address

 

10.2.2.1           host1_l2_boot1

10.2.1.21         host1_l1_boot1   host1

10.2.200.1  host1_l2_svc    

10.2.100.1  host1_l1_svc1  

10.2.101.1  host1_l1_svc2  

10.2.12.1         host1_l2_boot2

10.2.11.1         host1_l1_boot2

10.2.2.2           host2_l2_boot1

10.2.1.22         host2_l1_boot1   host2       

10.2.200.2  host2_l2_svc      

10.2.100.2  host2_l1_svc1  

10.2.101.2  host2_l1_svc2  

10.2.12.2         host2_l2_boot2  

10.2.11.2         host2_l1_boot2

 

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

 

确认:

[host1][root][/]>rsh host2 date

Wed Sep 11 15:46:06 GMT+08:00 2013

[host2][root][/]>rsh host1 date

Wed Sep 11 15:46:06 GMT+08:00 2013

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

-rw-------    1 root     system       237 Sep 11 15:45 /usr/es/sbin/cluster/etc/rhosts

[host1][root][/]#rsh  host2 ls -l /usr/es/sbin/cluster/etc/rhosts

-rw-------    1 root     system       237 Sep 11 15:45 /usr/es/sbin/cluster/etc/rhosts

 

 

2.3.3.添加共享vg

[host1][root][/]>lspv     

hdisk0          00c1fe1f0215b425                    rootvg          active

hdisk1          00c1fe1f8d700839                    rootvg          active

hdisk2          none                   none

hdisk3          none                   none   

 

smitty vg -> Add a Volume Group

 

 [host1][root][/]>lspv

。。。

hdisk2          00f6f1569990a1ef                    host1vg      active

hdisk3          00f6f1569990a12c                    host2vg      active

 

2.3.4.建立文件系统

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

smitty lv ->Add a Logical Volume,注意选择JFS2

smitty fs-> Enhanced Journaled File Systems -> Add a Journaled File System

[host1][root][/]>lsfs

Name            Nodename   Mount Pt               VFS   Size    Options    Auto Accounting

...

/dev/ora11runlv --         /ora11run              jfs2  15728640 rw         no   no

/dev/ora11runclv --         /ora11runc             jfs2  10485760 rw         no   no

...

 

2.3.5.修改loglv

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

host1vg host2vg也要修改

1) 察看

[host1][root][/]>varyonvg host1vg

[host1][root][/]>lsvg -l host1vg  

host1vg:

LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT

ora11runclv         jfs2       40      40      1    closed/syncd  /ora11runc

loglv02             jfs2log    1       1       1    closed/syncd  N/A

umount vg上所有fs

umount /ora11runc

2) 修改loglv名称

[host1][root][/]> chlv -n host1_loglv loglv02

0516-712 chlv: The chlv succeeded, however chfs must now be

        run on every filesystem which references the old log name loglv02.

[host1][root][/]>lsvg -l host1vg

host1vg:

LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT

ora11runclv        jfs2       40   40   2    closed/syncd  /ora11runc

host1_loglv      jfs2log    1     1     1    closed/syncd  N/A

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

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

确认:

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

 

 


2.3.6.整理vg

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

varyoffvg  host1vg

varyoffvg  host2vg

exportvg host1vg

exportvg   host2vg

chdev -l hdisk2 -a pv=yes

chdev -l hdisk3 -a pv=yes

importvg -V 101 -n -y  host1vg  hdisk2

varyonvg host1vg

chvg -an   host1vg

importvg -V 201 -n -y  host2vg  hdisk3

varyonvg host2vg

chvg -an   host2vg

varyoffvg  host1vg

varyoffvg  host2vg

确认

[host1][root][/]>lspv

。。。

hdisk2          00f6f1569990a1ef                    host1vg     

hdisk3          00f6f1569990a12c                    host2vg     

[host2][root][/]>lspv

。。。

hdisk2          00f6f1569990a1ef                    host1vg    

hdisk3          00f6f1569990a12c                    host2vg     

[host2][root][/]>varyong host1vgvaryong host2vg

[host2][root][/]>lsfs

Name            Nodename   Mount Pt               VFS   Size    Options    Auto Accounting

...

/dev/ora11runclv --         /ora11runc             jfs2  10485760 rw         no   no

/dev/ora11runlv --         /ora10run              jfs2  15728640 rw         no   no

 

 

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

 

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

routerevalidate

 

[host2][root][/]no -po routerevalidate=1

Setting routerevalidate to 1

Setting routerevalidate to 1 in nextboot file

确认:

[host2][root][/]#no -a|grep routerevalidate

     routerevalidate = 1

 

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

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

Name  Mtu   Network     Address            Ipkts Ierrs    Opkts Oerrs  Coll

en0   1500  10.2.1  10.2.1.21     2481098     0   164719     0     0

en0   1500  link#2      2.f8.28.3a.82.3   2481098     0   164719     0     0

en1   1500  10.2.2      10.2.2.1           142470     0       10     0     0

en1   1500  link#4      2.f8.28.3a.82.5    142470     0       10     0     0

en2   1500  10.2.11     10.2.11.1              22     0       20     0     0

en2   1500  link#3      2.f8.28.3a.82.6        22     0       20     0     0

en3   1500  10.2.12     10.2.12.1               0     0        4     0     0

en3   1500  link#5      2.f8.28.3a.82.7         0     0        4     0     0

lo0   16896 127         127.0.0.1         1335968     0  1335969     0     0

lo0   16896 ::1%1                         1335968     0  1335969     0     0

lo0   16896 link#1                        1335968     0  1335969     0     0

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

Name  Mtu   Network     Address            Ipkts Ierrs    Opkts Oerrs  Coll

en0   1500  10.2.1  host1_l1_boot1    2481124     0   164734     0     0

en0   1500  link#2      2.f8.28.3a.82.3   2481124     0   164734     0     0

en1   1500  10.2.2      host1_l2_boot1     142476     0       10     0     0

en1   1500  link#4      2.f8.28.3a.82.5    142476     0       10     0     0

en2   1500  10.2.11     host1_l1_boot2         22     0       20     0     0

en2   1500  link#3      2.f8.28.3a.82.6        22     0       20     0     0

en3   1500  10.2.12     host1_l2_boot2          0     0        4     0     0

en3   1500  link#5      2.f8.28.3a.82.7         0     0        4     0     0

lo0   16896 127         loopback          1335968     0  1335969     0     0

lo0   16896 ::1%1                         1335968     0  1335969     0     0

lo0  16896 link#1             1335968     0  1335969   0     0    

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

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

Name  Mtu   Network     Address            Ipkts Ierrs    Opkts Oerrs  Coll

en0   1500  link#2      2.f8.29.0.6.4     1013585     0    63684     0     0

en0   1500  10.2.1  10.2.1.22     1013585     0    63684     0     0

en1   1500  link#4      2.f8.29.0.6.5      141859     0       12     0     0

en1   1500  10.2.2      10.2.2.2           141859     0       12     0     0

en2   1500  link#3      2.f8.29.0.6.6           5     0       20     0     0

en2   1500  10.2.11     10.2.11.2               5     0       20     0     0

en3   1500  link#5      2.f8.29.0.6.7           2     0        6     0     0

en3   1500  10.2.12     10.2.12.2               2     0        6     0     0

lo0   16896 link#1                         515177     0   515177     0     0

lo0   16896 127         127.0.0.1          515177     0   515177     0     0

lo0   16896 ::1%1                          515177     0   515177     0     0

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

Name  Mtu   Network     Address            Ipkts Ierrs    Opkts Oerrs  Coll

en0   1500  link#2      2.f8.29.0.6.4     1013619     0    63696     0     0

en0   1500  10.2.1  host2_l1_boot1    1013619     0    63696     0     0

en1   1500  link#4      2.f8.29.0.6.5      141876     0       12     0     0

en1   1500  10.2.2      host2_l2_boot1     141876     0       12     0     0

 

en2   1500  link#3      2.f8.29.0.6.6           5     0       20     0     0

en2   1500  10.2.11     host2_l1_boot2          5     0       20     0     0

en3   1500  link#5      2.f8.29.0.6.7           2     0        6     0     0

en3   1500  10.2.12     host2_l2_boot2          2     0        6     0     0

lo0   16896 link#1                         515199     0   515199     0     0

lo0   16896 127         loopback           515199     0   515199     0     0

lo0   16896 ::1%1                          515199     0   515199     0     0      

2.3.8.编写初步启停脚本

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

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

start_host1  start_host2  stop_host1   stop_host2

 

#start_host1

banner start host1

route delete 0

route add 0 10.2.1.254

banner end host1

exit 0

# stop_host1

banner stop host1

banner end host1

exit 0

# start_host2

banner start host2

route delete 0

route add 0 10.2.1.254

banner end start  host2

#stop_host2

banner stop host2

banner end host2

exit 0

 记得chmod 755 start* stop*赋予文件执行权限

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

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

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

 

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

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

.   smitty tty->Change / add a TTY->rs232->sa->port number : 0

        确认

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

host2:cat</dev/tty0

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

同样反向检测一下。

 

Ø  磁盘心跳

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

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

    确认

[host1][root][/]lspv

 ...    

hdisk5          00f6f1560ff93de3                    None  

 

[host2][root][/]lspv

  ...   

hdisk5          00f6f1560ff93de3                    None 

 


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

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

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

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

2.4.1.创建集群

smitty hacmp->Extended Configuration

->Extended Topology Configuration

->Configure an HACMP Cluster

->Add/Change/Show an HACMP Cluster

 

  

                                                     

2.4.2. 增加节点 

smitty hacmp-> Extended Configuration

->Extended Topology Configuration

->Configure HACMP Nodes

->Add a Node to the HACMP Cluster

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

同理可以添加第二个节点

 

2.4.3.创建IP网络及接口

 

smitty hacmp-> Extended Configuration

-> Extended Topology Configuration

->Configure HACMP Networks

->Add a Network to the HACMP Cluster->ether

其中Enable IP Address Takeover via IP Aliases  [Yes]  

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

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

同样完成net_ether_02网络的创建。

 

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

smitty hacmp-> Extended Configuration

-> Extended Topology Configuration

->Configure HACMP Communication Interfaces/Devices

->Add Communication Interfaces/Devices

->Add Pre-defined Communication Interfaces and Devices

-> Communication Interfaces

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

 

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

 

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

->diskdb

 

1.      串口心跳

 

smitty hacmp-> Extended Configuration

-> Extended Topology Configuration

->Configure HACMP Networks

->Add a Network to the HACMP Cluster

->rs232

添加心跳设备接口:

smitty hacmp-> Extended Configuration

-> Extended Topology Configuration

->Configure HACMP Communication Interfaces/Devices

->Add Communication Interfaces/Devices

->Add Pre-defined Communication Interfaces and Devices

-> Communication Devices

>选择之前建立的net_rs232_01

 

   # Node                Device           Device Path   

host1              tty0               /dev/tty0

host2              tty0               /dev/tty0

 

  

2.      磁盘心跳

  smitty hacmp->System Management (C-SPOC)

->Storage->Volume Groups

->Manage Concurrent Access Volume Groups for Multi-Node Disk Heartbeat

->Create a new Volume Group and Logical Volume for Multi-Node Disk Heartbeat

 

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

 

 

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

 

 

 

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

 

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

 smit hacmp->Extended Configuration

->Extended Topology Configuration

->Show HACMP Topology

  ->Show Cluster Topology

Cluster Name: test_cluster

Cluster Connection Authentication Mode: Standard

Cluster Message Authentication Mode: None

Cluster Message Encryption: None

Use Persistent Labels for Communication: No

 

NODE host1:

        Network net_diskhb_01

        Network net_diskhbmulti_01

                host1_1 /dev/mndhb_lv_01

        Network net_ether_01

                host1_l1_boot1  10.2.1.21

                host1_l1_boot2  10.2.11.1

        Network net_ether_02

                host1_l2_boot1  10.2.2.1

                host1_l2_boot2  10.2.12.1

        Network net_rs232_01

 

NODE host2:

        Network net_diskhb_01

        Network net_diskhbmulti_01

                host2_2 /dev/mndhb_lv_01

        Network net_ether_01

                host2_l1_boot2  10.2.11.2

                host2_l1_boot1  10.2.1.22

        Network net_ether_02

                host2_l2_boot1  10.2.2.2

                host2_l2_boot2  10.2.12.2

        Network net_rs232_01

                                      

如心跳为串口心跳则为:

Cluster Name: test_cluster

Cluster Connection Authentication Mode: Standard

Cluster Message Authentication Mode: None

Cluster Message Encryption: None

Use Persistent Labels for Communication: No

 

NODE host1:

        Network net_ether_01

                host1_l1_boot1  10.2.1.21

                host1_l1_boot2  10.2.11.1

        Network net_ether_02

                host1_l2_boot1  10.2.2.1

                host1_l2_boot2  10.2.12.1

        Network net_rs232_01

                host1_tty0_01  /dev/tty0

 

NODE host2:

         Network net_ether_01

               host2_l1_boot2  10.2.11.2

                host2_l1_boot1  10.2.1.22

        Network net_ether_02

                host2_l2_boot1  10.2.2.2

                host2_l2_boot2  10.2.12.2

        Network net_rs232_01

                host2_tty0_01  /dev/tty0

     

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

        

2.5.  创建资源2.5.1.添加高可用资源

service ip , application server , vg and fs

1)         添加app server

smitty hacmp ->Extended Configuration

->Extended Resource Configuration

->HACMP Extended Resources Configuration

->Configure HACMP  Applications

         ->Configure HACMP  Application Servers

->Add an Application Server

* Server Name                                        [host1_app]

*Start Script                                       [/usr/sbin/cluster/app/start_host1]
* Stop Script                                        [/usr/sbin/cluster/app/stop_host1]

  Application Monitor Name(s)                                                             

同样增加 host2_app

* Server Name                                        [host2_app]

*Start Script                                       [/usr/sbin/cluster/app/start_host2]
* Stop Script                                        [/usr/sbin/cluster/app/stop_host2]

 

2)         添加service ip

smity hacmp ->Extended Configuration

->Extended Resource Configuration

   ->HACMP Extended Resources Configuration

     ->Configure HACMP Service IP Labels/Addresses

      ->Add a Service IP Label/Address

         ->Configurable on Multiple Nodes

选择net_ether_01(10.2.1.0/24 10.2.11.0/24)

 

* IP Label/Address                                    host1_l1_svc                                                                

* Network Name                                        net_ether_01

Alternate HW Address to accompany IP Label/Address []

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

 

 

3)         创建资源组

 smitty hacmp->Extended Configuration

-> Extended Resource Configuration

 ->HACMP Extended Resource Group Configuration

-> Add a Resource Group

                      Add a Resource Group (extended)

Type or select values in entry fields.

Press Enter AFTER making all desired changes.     [Entry Fields]

* Resource Group Name                [host1_RG]

* Participating Nodes (Default Node Priority) [host1  host2]                                               

  Startup Policy                   Online On Home Node Only                                      

  Fallover Policy                  Fallover To Next Priority Node In The List                   

  Fallback Policy                    Fallback To Higher Priority Node In The List

同样建立host2_RG,

.

Resource Group Name                          [host2_RG]

* Participating Nodes (Default Node Priority)        [host2 host1

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

Resource Group Name                          [host2_RG]

* Participating Nodes (Default Node Priority)        [host2

 

4)         配置资源组

smitty hacmp->Extended Configuration

->Extended Resource Configuration

 ->HACMP Extended Resource Group Configuration

->Change/Show Resources and Attributes for a Resource Group

           选择host1_RG

             Change/Show All Resources and Attributes for a Resource Group

Type or select values in entry fields.

Press Enter AFTER making all desired changes.

                                       [Entry Fields]

  Resource Group Name                     host1_RG

  Participating Nodes (Default Node Priority)   host1 host2

 

  Startup Policy                         Online On Home Node Only

  Fallover Policy                         Fallover To Next Priority Node In The List

  Fallback Policy                         Fallback To Higher Priority Node In The List

  Fallback Timer Policy (empty is immediate)   []                                                            

 

  Service IP Labels/Addresses     [host1_l1_svc1 host1_l1_svc2 host1_l2_svc ]      

  Application Servers                         [host1_app]                                                    

  Volume Groups                             [host1vg]                                                  

  Use forced varyon of volume groups, if necessary    false        

同样的方法配置host2_RG

 

 

 

2.5.2.检查和同步HACMP配置

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

smitty hacmp ->Extended Configuration

->Extended Verification and Synchronization

1)首次强制同步:

               HACMP Verification and Synchronization

Type or select values in entry fields.

Press Enter AFTER making all desired changes.

                                                [Entry Fields]

* Verify, Synchronize or Both                        [Both]                                                        

* Automatically correct errors found during          [Yes]                                                          

  verification?

* Force synchronization if verification fails?       [Yes]                                                          

* Verify changes only?                               [No]                                                          

* Logging                                            [Standard] 

  2)二次同步:

               HACMP Verification and Synchronization

Type or select values in entry fields.

Press Enter AFTER making all desired changes.

                                                [Entry Fields]

* Verify, Synchronize or Both                        [Both]                                                        

* Automatically correct errors found during          [Yes]                                                          

  verification?

* Force synchronization if verification fails?       [No]                                                          

* Verify changes only?                               [No]                                                          

* Logging                                            [Standard] 

 

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

 

2.6.  最后的其他配置2.6.1. 再次修改/etc/hosts

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

 

10.2.2.1       host1_l2_boot1

10.2.1.21            host1_l1_boot1

10.2.200.1     host1_l2_svc      host1

10.2.100.1     host1_l1_svc1   

10.2.101.1     host1_l1_svc2   

10.2.12.1            host1_l2_boot2

10.2.11.1            host1_l1_boot2

10.2.2.2       host2_l2_boot1

10.2.1.22            host2_l1_boot1

10.2.200.2     host2_l2_svc        host2

10.2.100.2     host2_l1_svc1   

10.2.101.2     host2_l1_svc2   

10.2.12.2            host2_l2_boot2

10.2.11.2            host2_l1_boot2

 

2.6.2.修改syncd daemon的数据刷新频率  

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

smitty hacmp ->  HACMP Extended Configuration

-> Extended Performance Tuning Parameters Configuration

-> Change/Show syncd frequency

修改为10

 

 or

 

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

确认:

[host1][root]#ps -ef|grep sync

root 11927616        1   0 16:11:23  pts/0  2:31 /usr/sbin/syncd 10

 

2.6.3.配置clinfo  

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

 

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

127.0.0.1               loopback localhost      # loopback (lo0) name/address

 

10.2.2.1           host1_l2_boot1

10.2.1.21         host1_l1_boot1   host1

10.2.200.1  host1_l2_svc    

10.2.100.1  host1_l1_svc1  

10.2.101.1  host1_l1_svc2  

10.2.12.1         host1_l2_boot2

10.2.11.1         host1_l1_boot2

10.2.2.2           host2_l2_boot1

10.2.1.22         host2_l1_boot1   host2       

10.2.200.2  host2_l2_svc      

10.2.100.2  host2_l1_svc1  

10.2.101.2  host2_l1_svc2  

10.2.12.2         host2_l2_boot2  

10.2.11.2         host2_l1_boot2

 

 

执行拷贝:

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

 

2)将snmp v3转换为snmp v1

/usr/sbin/snmpv3_ssw -1

 

3) 修改启动clinfoES

     chssys -s clinfoES -a "-a"

 startsc -s clinfoES

 

确认

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

-rw-r--r--    1 root     system         4148 Sep 16 10:27 /usr/es/sbin/cluster/etc/clhosts

 

[host1][root][/]#rsh  host2 ls -l /usr/es/sbin/cluster/etc/clhosts

-rw-r--r--    1 root     system         4148 Sep 16 10:27 /usr/es/sbin/cluster/etc/clhosts

 

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

 

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

 

 

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

 

 

2.6.4.  启动HACMP

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

  smitty clstart

                                               

Type or select values in entry fields.

Press Enter AFTER making all desired changes.

 

                                                        [Entry Fields]

* Start now, on system restart or both                now                    +

  Start Cluster Services on these nodes              [host1]                 +

* Manage Resource Groups                              Automatically          +

  BROADCAST message at startup?                       false                  +

  Startup Cluster Information Daemon?                 true                   +

  Ignore verification errors?                         false                  +

  Automatically correct errors found during           Interactively          +

  cluster start?

 

                             Start Cluster Services

 

Type or select values in entry fields.

Press Enter AFTER making all desired changes.

 

                                                        [Entry Fields]

* Start now, on system restart or both                now                    +

  Start Cluster Services on these nodes              [host2]                 +

* Manage Resource Groups                              Automatically          +

  BROADCAST message at startup?                       false                  +

  Startup Cluster Information Daemon?                 true                   +

  Ignore verification errors?                         false                  +

  Automatically correct errors found during           Interactively          +

  cluster start?

 

 

2.6.5.  确认HACMP配置完成

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

2.7.  集成实施中的配置

   HACMP首次配置后,这个步骤会和实际应用程序的安装配置工作交织在一起,时间跨度较长,并可能有反复,所以单独列出一章。并利用首次配置没有完成的设计部分,加以举例讲解,实际如设计清楚,可以首次配置即完成。

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

  

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

 

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

  root 237690 135372   0   Dec 19      -  0:26 /usr/es/sbin/cluster/clcomd -d

2.7.1.增加组和用户

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

 

增加组:

smitty hacmp->System Management (C-SPOC)

    -> Security and Users

-> Groups in an HACMP cluster

-> Add a Group to the Cluster

选择host2_RG

                    Add a Group to the Cluster

Type or select values in entry fields.

Press Enter AFTER making all desired changes.

                                                        [Entry Fields]

  Select nodes by Resource Group                      host2_RG

   *** No selection means all nodes! ***

  * Group NAME                                         [dba]

  ADMINISTRATIVE group?                               false                                                                     

  Group ID                                           [601

.                                                                         

同样在host1_RG增加tux.

增加用户

smitty hacmp->System Management (C-SPOC)

    -> Security and Users

     ->Users in an HACMP cluster

       -> Add a User to the Cluster

选择host2_RG

                        Add a User to the Cluster

Type or select values in entry fields.

Press Enter AFTER making all desired changes.

[TOP]                                                   [Entry Fields]

  Select nodes by Resource Group                      host2_RG

   *** No selection means all nodes! ***

* User NAME                                         [orarun]

  User ID                                            [609]

 Primary GROUP                                      [dba]

....      

其他根据具体情况可设置                       

同样在host1_RG增加oraruncxcom等用户

确认

 

[host2][root][/]>lsgroup ALL

[host2][root][/]> lsuser  -a id groups ALL

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

 

初始化用户口令

smitty hacmp->System Management (C-SPOC)

    -> Security and Users

        -> Passwords in an HACMP cluster

            -> Change a User's Password in the Cluster

  Selection nodes by resource group                   host2_RG

   *** No selection means all nodes! ***

* User NAME                                     [orarun]                                                                    

  User must change password on first login?           false  

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

             COMMAND STATUS

Command: running       stdout: no            stderr: no

Before command completion, additional instructions may appear below.

orarun's New password: ******

Enter the new password again:******

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

 

2.7.2.增加lv和文件系统

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

增加lv:

 

smitty HACMP-> System Management (C-SPOC)

  ->   Storage

    ->  Logical Volumes

      ->Add a Logical Volume

              选择host2vg     host2_RG

                   host2 hdisk3

                             Add a Logical Volume

Type or select values in entry fields.      

Press Enter AFTER making all desired changes.

[TOP]                                                   [Entry Fields]

  Resource Group Name                                 host2_RG

  VOLUME GROUP name                                   host2vg

  Node List                                           host1,host2

  Reference node                                      host2

* Number of LOGICAL PARTITIONS                       [80]                     #

  PHYSICAL VOLUME names                               hdisk3

  Logical volume NAME                                [oradatalv]

  Logical volume TYPE                                [jfs2]                  +

  POSITION on physical volume                         outer_middle           +

  RANGE of physical volumes                           minimum                +

                 

同样建立host1_RG的其他lv

 

建立文件系统:

smitty hacmp-> System Management (C-SPOC)

 ->   Storage

    -> File Systems

      ->  Add a File System

  选择  host2vg         host2_RG

        Enhanced Journaled File System    

        oradatalv host1,host2

                                                                

.

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

 

确认:

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

....

/dev/oradatalv     10.00     10.00    1%        4     1% /oradata

 

 

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

[host2][root][/]>chown orarun:dba /ora11run

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

[host2][root][/]>chown orarun:dba /ora11run

 

[host1][root][/]>chown orarun:dba /ora11run

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

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

 

确认:

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

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

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

 

2.7.3.安装和配置应用

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

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

    这一步一般在应用程序已经稳定,不做大的变动时进行。大都是在系统快上线前的一段时间进行,伴随最终设置的完成,应该跟随一个完整测试

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

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

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

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

 

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

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

 

[host1][root][/home]>tar -cvf host2_user.tar ora11run

[host1][root][/home]>rcp host2_user.tar host2:/home

[host1][root][/home]>tar -xvf host2_user.tar

[host1][root][/home] >tar -cvf host1_user.tar ora11runc tuxrun bsx1 xcom

[host1][root][/home]>rcp host1_user.tar host2:/home

[host2][root][/home]>tar -xvf  host1_user.tar

 

 

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

 [host2][root][/home/scripts]>rcp -rp comm host1:/home

 [host1][root][/home/scripts]>rcp -rp host2  host1:/home/scripts

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

 

 

2.8.3.确认检查和处理

  这一步是确认经过一段时间后,HACMP是否需要修正和同步,参考运维篇的日常检查及处理

 

2.8.4.测试:

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

 

 

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

2. 第三部分--测试篇

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

2.1.  测试方法说明:

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

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

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

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

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

2.2.  标准测试

   这个测试为必须完成的测试,网络部分每个网段都要做一次,时间节点一般为安装配置中的初始配置阶段,最终配置阶段以及运维定修阶段。

2.2.1.标准测试表

 

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

 

序号

测试步骤

系统结果

应用结果

1

拔掉host1的服务网线

地址漂移到另一个网卡

中断30s左右可继续使用

2

拔掉host1的剩下一根的网线

发生切换

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

3

拔掉host2的服务网线

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

中断30s左右可继续使用

4

恢复所有网线

 

地址joinclstat可看到均up

无影响

5

host2上执行ha1t -q

host2机宕机,切换到host1

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

 

 

 

 

6

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

host1上的属于host2的相关资源及服务切换回host2,集群回到设计状态

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

 

 

 

 

7

拔掉host2的服务网线

地址漂另一个网卡

中断30s左右可继续使用

8

拔掉host2的剩下一根的网线

发生切换

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

9

拔掉host1的服务网线

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

中断30s左右可继续使用

10

恢复所有网线

地址joinclstat可看到

up

无影响

11

host1上执行halt -q

host1机宕机,切换到host2

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

12

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

host2上的属于host1的相关资源及服务切换回host1,集群回到设计状态

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

 

 

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

步骤1拔掉host1的服务网线

Sep 16 14:53:10 EVENT START: swap_adapter host1 net_ether_02 10.2.12.1 10.2.200.1

Sep 16 14:53:12 EVENT START: swap_aconn_protocols en3  en1

Sep 16 14:53:12 EVENT COMPLETED: swap_aconn_protocols en3  en1  0

Sep 16 14:53:12 EVENT COMPLETED: swap_adapter host1 net_ether_02 10.2.12.1 10.2.200.1 0

Sep 16 14:53:12 EVENT START: swap_adapter_complete host1 net_ether_02 10.2.12.1 10.2.200.1

Sep 16 14:53:13 EVENT COMPLETED: swap_adapter_complete host1 net_ether_02 10.2.12.1 10.2.200.1 0

 

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

Sep 16 14:53:14 EVENT START: fail_interface host1 10.2.2.1

Sep 16 14:53:14 EVENT COMPLETED: fail_interface host1 10.2.2.1 0

Sep 16 14:53:55 EVENT START: network_down host1 net_ether_02

Sep 16 14:53:56 EVENT COMPLETED: network_down host1 net_ether_02 0

Sep 16 14:53:56 EVENT START: network_down_complete host1 net_ether_02

Sep 16 14:53:56 EVENT COMPLETED: network_down_complete host1 net_ether_02 0

Sep 16 14:54:03 EVENT START: rg_move_release host1 1

Sep 16 14:54:03 EVENT START: rg_move host1 1 RELEASE

Sep 16 14:54:03 EVENT START: node_down_local

Sep 16 14:54:03 EVENT START: stop_server host2_app host1_app

Sep 16 14:54:04 EVENT COMPLETED: stop_server host2_app host1_app 0

Sep 16 14:54:04 EVENT START: release_vg_fs ALL host1vg 

Sep 16 14:54:06 EVENT COMPLETED: release_vg_fs ALL host1vg   0

Sep 16 14:54:06 EVENT START: release_service_addr host1_l1_svc1 host1_l1_svc2 host1_l2_svc

Sep 16 14:54:11 EVENT COMPLETED: release_service_addr host1_l1_svc1 host1_l1_svc2 host1_l2_svc 0

Sep 16 14:54:11 EVENT COMPLETED: node_down_local 0

Sep 16 14:54:11 EVENT COMPLETED: rg_move host1 1 RELEASE 0

Sep 16 14:54:11 EVENT COMPLETED: rg_move_release host1 1 0

Sep 16 14:54:13 EVENT START: rg_move_fence host1 1

Sep 16 14:54:14 EVENT COMPLETED: rg_move_fence host1 1 0

Sep 16 14:54:14 EVENT START: rg_move_acquire host1 1

Sep 16 14:54:14 EVENT START: rg_move host1 1 ACQUIRE

Sep 16 14:54:14 EVENT COMPLETED: rg_move host1 1 ACQUIRE 0

Sep 16 14:54:14 EVENT COMPLETED: rg_move_acquire host1 1 0

Sep 16 14:54:24 EVENT START: rg_move_complete host1 1

Sep 16 14:54:25 EVENT START: node_up_remote_complete host1

Sep 16 14:54:25 EVENT COMPLETED: node_up_remote_complete host1 0

Sep 16 14:54:25 EVENT COMPLETED: rg_move_complete host1 1 0

 

步骤4恢复所有网线

Sep 16 14:55:49 EVENT START: network_up host1 net_ether_02

Sep 16 14:55:49 EVENT COMPLETED: network_up host1 net_ether_02 0

Sep 16 14:55:50 EVENT START: network_up_complete host1 net_ether_02

Sep 16 14:55:50 EVENT COMPLETED: network_up_complete host1 net_ether_02 0

Sep 16 14:56:00 EVENT START: join_interface host1 10.2.12.1

Sep 16 14:56:00 EVENT COMPLETED: join_interface host1 10.2.12.1 0

 

步骤5host2上执行ha1t -q

Sep 16 14:58:56 EVENT START: node_down host2

Sep 16 14:58:57 EVENT START: acquire_service_addr

Sep 16 14:58:58 EVENT START: acquire_aconn_service en0 net_ether_01

Sep 16 14:58:59 EVENT COMPLETED: acquire_aconn_service en0 net_ether_01 0

Sep 16 14:59:00 EVENT START: acquire_aconn_service en2 net_ether_01

Sep 16 14:59:00 EVENT COMPLETED: acquire_aconn_service en2 net_ether_01 0

Sep 16 14:59:01 EVENT START: acquire_aconn_service en1 net_ether_02

Sep 16 14:59:01 EVENT COMPLETED: acquire_aconn_service en1 net_ether_02 0

Sep 16 14:59:01 EVENT COMPLETED: acquire_service_addr 0

Sep 16 14:59:02 EVENT START: acquire_takeover_addr

Sep 16 14:59:05 EVENT COMPLETED: acquire_takeover_addr 0

Sep 16 14:59:11 EVENT COMPLETED: node_down host2 0

Sep 16 14:59:11 EVENT START: node_down_complete host2

Sep 16 14:59:12 EVENT START: start_server host1_app host2_app

Sep 16 14:59:12 EVENT START: start_server host2_app

Sep 16 14:59:12 EVENT COMPLETED: start_server host1_app host2_app 0

Sep 16 14:59:12 EVENT COMPLETED: start_server host2_app 0

Sep 16 14:59:13 EVENT COMPLETED: node_down_complete host2 0

 

步骤6:回原

Sep 16 15:10:25 EVENT START: node_up host2

Sep 16 15:10:27 EVENT START: acquire_service_addr

Sep 16 15:10:28 EVENT START: acquire_aconn_service en0 net_ether_01

Sep 16 15:10:28 EVENT COMPLETED: acquire_aconn_service en0 net_ether_01 0

Sep 16 15:10:29 EVENT START: acquire_aconn_service en2 net_ether_01

Sep 16 15:10:29 EVENT COMPLETED: acquire_aconn_service en2 net_ether_01 0

Sep 16 15:10:31 EVENT START: acquire_aconn_service en1 net_ether_02

Sep 16 15:10:31 EVENT COMPLETED: acquire_aconn_service en1 net_ether_02 0

Sep 16 15:10:31 EVENT COMPLETED: acquire_service_addr 0

Sep 16 15:10:36 EVENT COMPLETED: node_up host2 0

Sep 16 15:10:36 EVENT START: node_up_complete host2

Sep 16 15:10:36 EVENT START: start_server host2_app

Sep 16 15:10:37 EVENT COMPLETED: start_server host2_app 0

Sep 16 15:10:37 EVENT COMPLETED: node_up_complete host2 0

Sep 16 15:10:41 EVENT START: network_up host2 net_diskhbmulti_01

Sep 16 15:10:42 EVENT COMPLETED: network_up host2 net_diskhbmulti_01 0

Sep 16 15:10:42 EVENT START: network_up_complete host2 net_diskhbmulti_01

Sep 16 15:10:42 EVENT COMPLETED: network_up_complete host2 net_diskhbmulti_01 0

 

步骤7拔掉host2的服务网线

 

Sep 16 15:20:36 EVENT START: swap_adapter host2 net_ether_02 10.2.12.2 10.2.200.2

Sep 16 15:20:38 EVENT START: swap_aconn_protocols en3  en1

Sep 16 15:20:38 EVENT COMPLETED: swap_aconn_protocols en3  en1  0

Sep 16 15:20:38 EVENT COMPLETED: swap_adapter host2 net_ether_02 10.2.12.2 10.2.200.2 0

Sep 16 15:20:39 EVENT START: swap_adapter_complete host2 net_ether_02 10.2.12.2 10.2.200.2

Sep 16 15:20:39 EVENT COMPLETED: swap_adapter_complete host2 net_ether_02 10.2.12.2 10.2.200.2 0

 

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

Sep 16 15:20:40 EVENT START: fail_interface host2 10.2.2.2

Sep 16 15:20:40 EVENT COMPLETED: fail_interface host2 10.2.2.2 0

Sep 16 15:21:40 EVENT START: network_down host2 net_ether_02

Sep 16 15:21:40 EVENT COMPLETED: network_down host2 net_ether_02 0

Sep 16 15:21:40 EVENT START: network_down_complete host2 net_ether_02

Sep 16 15:21:41 EVENT COMPLETED: network_down_complete host2 net_ether_02 0

Sep 16 15:21:47 EVENT START: rg_move_release host2 2

Sep 16 15:21:47 EVENT START: rg_move host2 2 RELEASE

Sep 16 15:21:48 EVENT START: node_down_local

Sep 16 15:21:48 EVENT START: stop_server host2_app

Sep 16 15:21:48 EVENT COMPLETED: stop_server host2_app 0

Sep 16 15:21:48 EVENT START: release_vg_fs ALL host2vg 

Sep 16 15:21:50 EVENT COMPLETED: release_vg_fs ALL host2vg   0

Sep 16 15:21:50 EVENT START: release_service_addr host2_l1_svc1 host2_l1_svc2 host2_l2_svc

Sep 16 15:21:55 EVENT COMPLETED: release_service_addr host2_l1_svc1 host2_l1_svc2 host2_l2_svc 0

Sep 16 15:21:55 EVENT COMPLETED: node_down_local 0

Sep 16 15:21:55 EVENT COMPLETED: rg_move host2 2 RELEASE 0

Sep 16 15:21:55 EVENT COMPLETED: rg_move_release host2 2 0

Sep 16 15:21:57 EVENT START: rg_move_fence host2 2

Sep 16 15:21:58 EVENT COMPLETED: rg_move_fence host2 2 0

Sep 16 15:21:58 EVENT START: rg_move_acquire host2 2

Sep 16 15:21:58 EVENT START: rg_move host2 2 ACQUIRE

Sep 16 15:21:58 EVENT COMPLETED: rg_move host2 2 ACQUIRE 0

Sep 16 15:21:58 EVENT COMPLETED: rg_move_acquire host2 2 0

Sep 16 15:22:08 EVENT START: rg_move_complete host2 2

Sep 16 15:22:08 EVENT START: node_up_remote_complete host2

Sep 16 15:22:09 EVENT COMPLETED: node_up_remote_complete host2 0

Sep 16 15:22:09 EVENT COMPLETED: rg_move_complete host2 2 0

 

步骤9拔掉host1的服务网线

Sep 16 15:43:42 EVENT START: swap_adapter host1 net_ether_02 10.2.2.1 10.2.200.2

Sep 16 15:43:43 EVENT COMPLETED: swap_adapter host1 net_ether_02 10.2.2.1 10.2.200.2 0

Sep 16 15:43:45 EVENT START: swap_adapter_complete host1 net_ether_02 10.2.2.1 10.2.200.2

Sep 16 15:43:45 EVENT COMPLETED: swap_adapter_complete host1 net_ether_02 10.2.2.1 10.2.200.2 0

Sep 16 15:43:47 EVENT START: fail_interface host1 10.2.12.1

Sep 16 15:43:47 EVENT COMPLETED: fail_interface host1 10.2.12.1 0

 

步骤10恢复所有网线

Sep 16 15:45:07 EVENT START: network_up host2 net_ether_02

Sep 16 15:45:08 EVENT COMPLETED: network_up host2 net_ether_02 0

Sep 16 15:45:08 EVENT START: network_up_complete host2 net_ether_02

Sep 16 15:45:08 EVENT COMPLETED: network_up_complete host2 net_ether_02 0

Sep 16 15:45:43 EVENT START: join_interface host2 10.2.12.2

Sep 16 15:45:43 EVENT COMPLETED: join_interface host2 10.2.12.2 0

Sep 16 15:47:05 EVENT START: join_interface host1 10.2.12.1

Sep 16 15:47:05 EVENT COMPLETED: join_interface host1 10.2.12.1 0

 

步骤11:host1上执行halt -q

Sep 16 15:48:48 EVENT START: node_down host1

Sep 16 15:48:49 EVENT START: acquire_service_addr

Sep 16 15:48:50 EVENT START: acquire_aconn_service en0 net_ether_01

Sep 16 15:48:50 EVENT COMPLETED: acquire_aconn_service en0 net_ether_01 0

Sep 16 15:48:51 EVENT START: acquire_aconn_service en2 net_ether_01

Sep 16 15:48:51 EVENT COMPLETED: acquire_aconn_service en2 net_ether_01 0

Sep 16 15:48:53 EVENT START: acquire_aconn_service en1 net_ether_02

Sep 16 15:48:53 EVENT COMPLETED: acquire_aconn_service en1 net_ether_02 0

Sep 16 15:48:53 EVENT COMPLETED: acquire_service_addr 0

Sep 16 15:48:53 EVENT START: acquire_takeover_addr

Sep 16 15:48:57 EVENT COMPLETED: acquire_takeover_addr 0

Sep 16 15:49:02 EVENT COMPLETED: node_down host1 0

Sep 16 15:49:02 EVENT START: node_down_complete host1

Sep 16 15:49:03 EVENT START: start_server host1_app host2_app

Sep 16 15:49:03 EVENT START: start_server host2_app

Sep 16 15:49:03 EVENT COMPLETED: start_server host1_app host2_app 0

Sep 16 15:49:03 EVENT COMPLETED: start_server host2_app 0

Sep 16 15:49:04 EVENT COMPLETED: node_down_complete host1 0

 

2.3.  完全测试

   完全测试在有充分测试时间和测试条件(如交换机可参与测试)完整加以测试,时间节点一般为系统上线前一周。

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

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

2.    应用中断没有加入应用的重新连接时间,如oracleDB发生漂移,实际tuxedo需要重新启动才可继续连接,这个需要起停脚本来实现。

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

 

2.3.1.完全测试表

序号

测试场景

系统结果

应用结果

参考时长

 

功能测试

 

 

 

1

host2HA

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

host2 app(db)启动OK

120s

2

host2HA

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

host2 app 停止

15s

3

host1HA

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

host1 app启动OK

120s

4

host1HA

host1网卡、vg释放干净

host2 app 停止

15s

5

host2  takeover切换host1

host2服务地址切换到host1boot2vg

host2 app  短暂中断

30s

host2 clstart

回原

host2 app短暂中断

120s

6

host1 takeover host2

host1服务地址切换到host2boot2vg等切换到host2

host1 app 短暂中断

 

30s

 

host1 clstart

回原

host1 app短暂中断

120s

 

网卡异常测试

 

 

 

1

host2boot1网线测试

host2的服务ipboot1漂移至boot2

host2 app 短暂中断

30s

host2恢复boot1网线测试

host2 boot1 join

无影响

40s

2

host2boot2网线测试

host2的服务ipboot1漂移至boot2

host2 app 短暂中断

30s

host2恢复boot2网线测试

host2 boot1 join

无影响

40s

3

host2boot1boot2网线测试

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

host2 app短暂中断

210s

 

host1再断boot2网线,

host2的服务ip漂移到host1boot1

host2 app短暂中断

30s

host2恢复boot1boot2网线测试

host2 boot1boot 2join

无影响

30s

host2 clstart

回原

host2 app短暂中断

120s

4

host1boot1boot2网线测试

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

host1 app短暂中断

210s

 

host1再断boot2网线,

host1的服务ip漂移到host2boot1

host1 app短暂中断

30s

host1恢复boot1boot2网线测试

host1 boot1boot 2join

无影响

30s

host2 clstart

回原

host2 app短暂中断

120s

5

host2 force clstop

cluster服务停止,ipvg资源无反应

无影响

20s

host2 clstart

回原

无影响

20s

6

host1 force clstop

cluster服务停止,ipvg资源无反应

无影响

20s

host1 clstart

回原

无影响

20s

7

host2,host1 boot2 网线同时断30mins

boot2 failed

无影响

20s

host2,host1 boot2 网线恢复

boot2 join

无影响

20s

8

host2,host1 boot1 网线同时断30mins

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

host1,host2 app短暂中断

30s

host2,host1 boot1 网线恢复

boot1 join

无影响

20s

 

主机宕机测试

 

 

 

1

host2 突然宕机halt -q

host2服务地址切换到host1boot2vg

host2 app  短暂中断

30s

host2 clstart

回原

host2 app短暂中断

120s

2

host1 突然宕机halt -q

host1服务地址切换到host2boot2vg等切换到host2

host1 app 短暂中断

 

30s

 

host1 clstart

回原

host1 app短暂中断

120s

 

交换机异常测试

 

 

 

1

SwitchA断电

服务IP地址均漂移到boot2

host1host2 app短暂中断

50s

SwitchA恢复

boot1 join

无影响

40s

SwitchB断电

服务IP地址均漂移回boot1

host1host2 app短暂中断

50s

SwitchB恢复

boot2 join

无影响

40s

2

SwitchB断电

boot2 failed

无影响

50s

SwitchB恢复

boot2 join

无影响

40s

SwitchA断电

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

host1host2 app短暂中断

50s

SwitchA恢复

boot1 join

无影响

40s

3

SwitchAB同时断电10mins

networkdown,其他一切不动。

host1host2 app中断

10min

SwitchAB恢复

boot1boot2 join

服务自动恢复

50s

4

SwitchA断电

 

服务IP地址均漂移到boot2

host1host2 app短暂中断

50s

30sB也断电

不动

host1host2 app中断

50s

SwitchAB恢复

boot1 join

自动恢复

40s

5

SwitchB断电

 

boot2 failed

无影响

50s

30sA也断电

networkdown,其他一切不动。

host1host2 app中断

50s

SwitchAB恢复

boot1 join

自动恢复

40s

6

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

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

 

host1host2 app中断

20s

SwitchA恢复

恢复后一切正常

自动恢复

 

7

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

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

恢复后一切正常

host1host2 app中断

20s

SwitchB恢复

 

自动恢复

 

8

SwitchAB同时异常(对接网线触广播风暴)

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

 

host1host2 app中断

10s

 

SwitchAB恢复

恢复后一切正常

自动恢复

20s

 

稳定性测试

 

 

 

1

host2 host1各起HA

 

48小时以上正常服务

 

2

host2  takeover切换host1

 

48小时以上正常服务

 

3

host1 takeover host2

 

48小时以上正常服务

 

 

2.4.  运维切换测试:

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

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

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

 

2.4.1.运维切换测试表

场景

 

建议时长

切换方式

主备(run->dev

主机和备机互换

>10

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

主分区切、备用分区互换

>30

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

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

互换

>30

手工互相交叉启动资源组

主机切换到备机:

    2种方式:

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

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

手工互相切换:

  停掉资源组:

smitty hacmp->System Management (C-SPOC)

  ->  Resource Group and Applications

       ->Bring a Resource Group Offline 选择 host2_RG,host2

                  Bring a Resource Group Offline

Type or select values in entry fields.

Press Enter AFTER making all desired changes.

                                                        [Entry Fields]

  Resource Group to Bring Offline                     host2_RG

  Node On Which to Bring Resource Group Offline       host2

  Persist Across Cluster Reboot?                      false

 同样停掉host1_RG 

  互换资源组:

                                                              

smitty HACMP->System Management (C-SPOC)

  ->  Resource Group and Applications

       ->Bring a Resource Group Online 选择host2_RG,host1

  Resource Group to Bring Online                      host2_RG

  Node on Which to Bring Resource Group Online        host1

 Persist Across Cluster Reboot回答No 

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

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

  互换crontab及相关后台脚本:

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

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

修正文件属性:

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

[host1][root][/]>chmod 600 /var/spool/cron/crontabs/root

重起crontab:

[host1][root][/]> ps -ef|grep cron

    root  278688      1   0   Dec 19      -  0:02 /usr/sbin/cron

[host1][root][/]>kill -9 278688

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

  互换备份策略:

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

第四部分--维护篇

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

2.1.  HACMP切换问题及处理

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

2.1.1.HACMP切换问题表

故障现象

原因

根本原因

对策

无法切换1

测试一段时间后两边配置不一致、不同步

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

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

 

无法切换2

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

停止脚本考虑不周全

规范化增加kill_vg_user脚本

切换成功但应用不正常1

应用启动异常

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

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

 

切换成功但应用不正常2

备机配置不符合运行要求

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

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

切换成功但通信不正常1

网络路由不通

 

网络配置原因

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

切换成功但通信不正常2

通信软件配置问题

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

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

误切换

DMS问题

系统负荷持续过高

参见经验篇DMS相应章节

 

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

2.1.2.强制方式停掉HACMP:

HACMP的停止分为3种,

Bring Resource Groups Offline  (正常停止)

Move Resource Groups   (手工切换)                                       

   Unmanage Resource Groups (强制停掉HACMP,而不停资源组 

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

[host1][root][/]>smitty clstop

                            Stop Cluster Services

Type or select values in entry fields.

Press Enter AFTER making all desired changes.

* Stop now, on system restart or both                 now                                                                        

  Stop Cluster Services on these nodes               [host1]                                                                  

  BROADCAST cluster shutdown?                  false                                                                       

*  Select an Action on Resource Groups                 Unmanage Resource Group

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

cldump可以看到以下结果:

......

luster Name: test_cluster

 

Resource Group Name: rg_diskhbmulti_01

Startup Policy: Online On All Available Nodes

Fallover Policy: Bring Offline (On Error Node Only)

Fallback Policy: Never Fallback

Site Policy: ignore

Node                         Group State     

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

host1                        UNMANAGED      

host2                        UNMANAGED      

 

Resource Group Name: host1_RG

Startup Policy: Online On Home Node Only

Fallover Policy: Fallover To Next Priority Node In The List

Fallback Policy: Fallback To Higher Priority Node In The List

Site Policy: ignore

Node                         Group State     

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

host1                        UNMANAGED      

host2                        UNMANAGED      

 

Resource Group Name: host2_RG

Startup Policy: Online On Home Node Only

Fallover Policy: Fallover To Next Priority Node In The List

Fallback Policy: Fallback To Higher Priority Node In The List

Site Policy: ignore

Node                         Group State     

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

host2                        UNMANAGED      

host1                        UNMANAGED    

 

2.1.3.强制停掉后的HACMP启动:

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

[host1][root][/]>smitty clstart

请注意:为保险,Startup Cluster Information Daemon?选择 true

2.2.  日常检查及处理

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

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

 

2.2.1.clverify检查

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

 

smitty clverify ->Verify HACMP Configuration

回车即可

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

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

 同样停止host2HACMP服务。

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

smitty hacmp -> Extended Configuration

  -> Extended Verification and Synchronization

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

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

 

2.2.2.进程检查:

 1