分类:
2008-05-25 15:08:34
本系列文章的作者通过自己长期的实际项目工作经历,总结出了他对于 HACMP 设计实施的经验。本系列会分为 4 部分,会向您详细地介绍实施 HACMP 过程中会经历的各个过程,如设计,配置,安装,测试等。本文为第 1 部分,会向您介绍 HAMCP 实施的设计和安装过程。
各厂商现有的 UNIX 服务器一般都拥有很高的可靠性,在这一点上 IBM 的 P 系列服务器表现尤为突出。但所有 UNIX 服务器均无法达到如 IBM 大型主机 S/390 那样的可靠性级别,这是开放平台服务器的体系结构和应用环境所决定的。使用 IBM 高可用性集群软件 --HACMP,可以更好的保护关键业务应用不受故障影响。
HACMP 是 High Availability Cluster Multi-Processing 的缩写。HACMP 是 IBM 公司在 P 系列 AIX 操作系统上的高可靠集群软件,配置冗余,消除单点故障,保证整个系统连续可用性和安全可靠性。HACMP 是利用网络来侦测主机及网卡的状况,搭配 AIX 所提供的硬盘镜像等功能,在主机、网卡、硬盘控制卡、硬盘或网络发生故障时,自动切换到另一套备用元件上重新工作 ; 若是主机故障还切换至备份机上继续应用系统的运行。
作为双机系统的两台服务器同时运行 HACMP 软件:
- 两台服务器的备份方式有二种 :
- 一台服务器运行应用,另外一台服务器做为备份
- 两台服务器除正常运行本机的应用外,同时又作为对方的备份主机 ;
- 两台主机系统在整个运行过程中,通过 " 心跳线 " 相互监测对方的运行情况 ( 包括系统的软硬件运行、网络通讯和应用运行情况等 );
- 一旦发现对方主机的运行不正常 ( 出故障 ) 时,故障机上的应用就会立即停止运行,本机 ( 故障机的备份机 ) 就会立即在自己的机器上启动故障机上的应用,把故障机的应用及其资源 ( 包括用到的 IP 地址和磁盘空间等 ) 接管过来,使故障机上的应用在本机继续运行 ;
- 应用和资源的接管过程由 HACMP 软件自动完成,无需人工干预 ;
- 当两台主机正常工作时,也可以根据需要将其中一台机上的应用人为切换到另一台机 ( 备份机 ) 上运行。
本文的实验环境以双机互备中比较复杂的多 service 多网络的情况为例,其它类似设置可适当简化。
机器一览表
节点机器名 操作系统 应用软件 HA 版本 host2 AIX5305-CSP ORACLE 10g HA5208 host1 AIX5305-CSP Tuxedo8.1 HA5208
磁盘和 VG 规划表
节点机器名 磁盘 VG VG MajorNumber host1 hdisk2 host1vg 101 host2 hdisk3 host2vg 201
用户和组规划表
用户 USERID 组 组 ID 使用节点 orarrunc 210 dba 201 host1 tuxrun 301 bea 301 host1 bsx1 302 bea 301 host1 xcom 401 dba 201 host1 orarun 209 dba 201 host2
逻辑卷和文件系统规划表
PP size:128M
节点机器名 逻辑卷 文件系统 大小(pp) 所有者 用途 host1 ora10runclv /ora10runc 40 orarunc ORACLE 客户端软件 host1 tux81runlv /tux81run 30 tuxedo Tuxedo 软件 host1 bsx1lv /bsx1 30 bsx1 宝信 MES 应用程序 host1 xcomlv /xcom 30 xcom 宝信 xcom 通信软件 host2 ora10runlv /ora10run 60 orarun ORACLE 数据库软件 host2 oradatalv /oradata 100 orarun 数据库
路由规划表
节点名 目的 路由 host1 default 10.2.200.254 host2 default 10.2.200.254
HACMP 结构表
集群名 : test_cluster
适配器名 功能 网络名 网络类型 属性 节点名 IP 地址 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.1 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.2 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
应用脚本起停设计
- 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 数据库及监听程序
如在 host1 机器上执行 start_host1
- stop_host2_app:
停数据库及监听程序
回页首
万事开头难,对于一个有经验的 HACMP 工程师来说,会深知规划的重要性,一个错误或混乱的规划将直接导致实施的失败和不可维护性。
HACMP 实施的根本目的不是安装测试通过,而是在今后运行的某个时刻突然故障中,能顺利的发生自动切换或处理,使得服务只是短暂中断即可自动恢复,使高可用性成为现实。
规划前的需求调研
在做规划之前,或者说一个准备实施 HACMP 来保证高可用性的系统初步设计之前,至少需要调查了解系统的以下相关情况,这些都可能影响到 HACMP 的配置。
- 应用特点
- 对负荷的需求,如 CPU、内存、网络等特别是 I/O 的负载的侧重。
- 对起停的要求,如数据库重起可能需要应用重起等等。
- 对于自动化的限制,如重起需要人工判断或得到命令,需要在控制台执行。
- 网络状况和规划
包括网段的划分、路由、网络设备的冗余等等在系统上线前的状况和可提供条件,以及实施运行过程中可能出现的变更。
- 操作系统情况
目前 IBM 的 HACMP 除了 AIX,还支持 Linux。
目前新装机器都是 AIX5.3,即使安装 HA5.4 也没有问题。但如果安装可能是在老机器上进行升级,需要仔细了解操作系统版本及补丁情况。
- 主机设计
- 可能实施的机器网卡的数量 , 网卡是否只能是双口或更多。
- 是否有槽位增加异步卡
- 主机之间的距离,这影响到串口线的长度。
- 预计实施高可用性的情况
- 希望实施 HACMP 的机器数量
希望方式,如一备一,双机互备,一备多,环形互备等等。
HACMP 版本确定
IBM HACMP 自从出了 5.2 版本后,到了 5.205 后比较稳定,并经过我们自己充分的测试(见测试篇)和实践证明(已有多个系统成功自动切换)。目前考虑到 HA 5.3 的过渡性,HACMP V5.4 的补丁还不够,推荐版本为 HACMP V5.209。
IP 地址设计
IP 地址切换 (IPAT) 方式 有 3 种方式 :
图 3,4和 5 中描述了三个主要的 IPAT 配置场景。
- 第一个拓扑模式 :IPAT via Replacement
在分开的子网中包含 boot 和 standby 网卡。当集群服务启动的时候 boot 地址被换成 service 地址。尽管这种方式有效性强,但是在需要实现多服务 IP 地址的环境下这种方式是不可取的。集群的管理员不得不利用 pre- 和 post-events 定制其环境建立额外的别名,
并且需要确认这些别名在下一次接管发生前被删除。
- 第二个拓扑模式:IPAT via Aliasing
HACMP 4.5 开始引入了 IPAT via Aliasing 作为缺省的拓扑模式。在这种新的模式中,standby 网卡的功能被另外一个 boot 网卡替换。子网需求的不同点是还需要一个另外的子网,每一个 boot 网卡需要它自己的子网,并且任何 service 或 persistent 的 IP 将在其本身的子网上操作,所以一共三个子网。当集群服务启动并且需要 service IP 的时候,boot IP 并不消失。这个设计和第一种是不同的,在同一个 HACMP 网络中有多个 service IP 存在并且通过别名来控制。
- 第三种模式 :EthernetChannel(EC)
这种模式把底层的以太网卡藏到一个单一的“ent”接口之后。 该模式不是对前述任何一种方式的替换,而是可以和前述的任一种模式共同存在 。因为在每一个节点 EC 都被配置成冗余方式,可以在 HACMP 中使用 IP 别名定义它们每一个作为单一网卡网络。因为在每个节点只有一个网卡被定义,所以只有两个子网,一个是用作 boot(每个节点的基本 IP 地址),另一个是用于提供高可用服务。
本文讨论 实际工作中使用最多的为第 2 种 : 别名方式 (IPAT via Aliasing),逐步推荐第 3 种 。
这样设计时就需要注意以下事项:
- 网段设计:
一个服务地址需要 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
- 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 块网卡,以保证真正的冗余。
心跳设计
配置 HACMP 的过程中,除了 TCP/IP 网络之外,您也可以在其它形式的网络上,如串行网络和磁盘总线上配置心跳网络。
- TCP/IP 网络
优点:要求低,不需要任何额外硬件或软件,即可实现。
缺点:占用 IP 地址,不能避免由于 TCP/IP 的软件问题导致 HACMP 崩溃,系统不可用。
- 串口网络
优点:真正实现高可用性,不占用 IP 地址。
缺点:需要硬件支持,对于 p5 机器,需要新增异步卡,而中低端的机器的插槽有限。
- 磁盘心跳
优点 : 不占用插槽,磁盘总线上的心跳网络能够在 TCP/IP 网络资源有限的情况下提供额外的 HACMP 节点间的通信手段,并且能够防止 HACMP 节点之间由于 TCP/IP 软件出现问题而无法相互通信。
缺点:需要操作系统和存储支持,如使用增强型卷组,此外对于 I/O 读写负荷高的应用,也需要慎用。
正如 IBM 红皮书所说,条件许可的情况下,强烈推荐使用串口网络,其次是磁盘心跳。
资源组设计
对于 HACMP 来讲,服务 IP 地址和磁盘 VG、文件系统、应用服务器都是资源,如何规划需要根据实际情况来,包括以下内容:
资源组的数量即资源 :一般情况下每台机器只要建立一个资源组即可,包括服务 IP 地址、应用服务器及 VG。但对于 2 节点的 oracle RAC 来讲,就需要 3 个,2 个 IP 和应用资源组,1 个并发 VG 资源组。
现在不推荐具体确定 VG 里的文件系统,这是因为确定后,有可能造成有些新增文件系统不在 HACMP 的控制范围,结果是 HACMP 切换时由于这些文件系统没有 unmount 掉而导致切换失败。
资源组的策略 : 分 failover( 故障切换 ) 和 fallbak(回切)。一般选缺省,当然你可以根据具体情况修正,如 oracle RAC 的并发 VG 资源组的选择就不一样。
磁盘及 VG 设计
虽然实际上 HACMP 是靠 PVID 来认磁盘的,但集群的机器上磁盘顺序不一,磁盘对应不一致会造成某种混乱。以致于安装配置和维护时很容易产生各种人为错误,所以我们强烈建议机器上看到的磁盘和 VG 名称都一一对应,此外 VG 的 MajorNumber 也需要预先设计规划,以免不一致。
用户及组设计
HA 要求所有切换需要用到的用户必须所有节点对应,ID 完全相同,用户运行的环境变量完全相同,即当系统切换时,对使用该用户的程序用户即组设置没有区别的。
如 host2 上 oracle 用户为 orarun,host1 上的 orarun 必须为切换保留,ID 均为 209,host1 上平时用的 oracle 用户就设为 orarunc。
逻辑卷和文件系统设计
HACMP 要求切换相关的文件系统和 lv 不能重名,如 host2 上 oracle 软件目录为 /ora10run,host1 上的 /ora10run 必须为切换保留,改为 /ora10runc。
此外,集群下相关的文件系统和 lv,在各个节点主机的定义也需要一致 , 如 /etc/filesystems 里是一致的,这个通过 importvg 或 HACMP 的 C-SPOC 来保证。
路由设计
对于有通信需求的主机,很可能对路由有一定要求,如本次实验环境,就有 2 个网段走的不是缺省路由,需要设计清楚,最后在起停脚本实现。
应用脚本设计
我们这里说的应用,是包括数据库在内除 OS 和 HACMP 之外的所有程序,对于应用程序的起停顺序和各种要求,都需要预先和应用人员加以沟通,并预先设计伪码,最终编写脚本实现。
安装前提
操作系统版本要求:
实验要求为 AIX5203 以上,实际 HA5.4 要求 AIX5301 和 AIX5206,具体安装时可查看以下安装版本的《High Availability Cluster Multi-Processing for AIX 5L Installation Guide》Prerequisites 一节。
系统参数要求
作为集群的各个节点机,我们建议各个参数最好完全一致,需要注意的参数有:
- 异步 I/O 服务进程配置(Asynchronous I/O servers)
- 用户最大进程数
- 系统时间
- 用户缺省的 limits 参数
- 其它可能影响应用的参数
环境要求
此时,没有建立任何 HACMP 占用设计 ID 相关的用户和组,同样也没有建立 VG 和文件系统,包括名称冲突文件系统、lv 和 Major numver 冲突的 VG。
- 用户和组确认
[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 …
安装包要求:
RSCT 2.3.6.0 或更高版本。
使用以下命令进行确认:
lslpp –l|grep rsct
以下的包也是必须要安装的:
rsct.* bos.adt.lib bos.adt.libm bos.adt.syscalls bos.net.tcp.client bos.net.tcp.server bos.rte.SRC bos.rte.libc bos.rte.libcfg bos.rte.libcur bos.rte.libpthreads bos.rte.odm
显示确认结果:
[host1][root][/]>lslpp -l rsct.* Fileset Level State Description ---------------------------------------------------------------------------- Path: /usr/lib/objrepos rsct.basic.HACMP 2.4.4.0 COMMITTED RSCT Basic Function (HACMP/ES Support) rsct.basic.rte 2.4.4.0 COMMITTED RSCT Basic Function rsct.basic.sp 2.4.4.0 COMMITTED RSCT Basic Function (PSSP Support) …… [host2][root][/]>lslpp -l rsct.* ……
如果您要安装并行的资源组(如 oracle RAC ),还要安装下面的包:
bos.rte.lvm.rte (5.2.0.25 or higher)
bos.rte.lvm.rte
bos.clvm.enh
安装 HACMP5.2 ( 需要在所有节点上安装)
如果是光盘,请插入光盘 , 执行 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,检查除以下包没装上外,其它都已安装上
clluster.hativoli
clusterhaview
netwiew
打补丁
注意,请不要忽略给 HACMP 打补丁这一步骤。其实对 HACMP 来说,补丁是十分重要的。很多发现的缺陷都已经在补丁中被解决了。当严格的按照正确步骤安装和配置完 HACMP 的软件后,发现 takeover 有问题,IP 接管有问题,机器自动宕机等等千奇百怪的问题,其实大都与补丁有关。所以一定要注意打补丁这个环节。如 HACMP 为 5205 或补丁 IY73937。
使用 smitty install_latest 命令来安装:
IY53044 - Latest HACMP for AIX R510 Fixes as of January 2004 [host1][root][/soft_ins/ha52/patch]>ls .toc cluster.es.cspoc.dsh.5.2.0.21.bff cluster.adt.es.client.include.5.2.0.3.bff ……
安装结束后,仍会报 failed,检查除以下包没装上外,其它都已安装上:
cluster.doc.en_US.pprc
cluster.doc.en_US.websphere
cluster.es.ercmf
cluster.es.pprc
cluster.es.svcpprc
cluster.es.websphere
cluster.xd.glvm
补丁可在 IBM 网站下载 :
重启机器
记住一定要重起机器 , 否则安装将无法正常继续。
#egrep "HA|clcomd" /etc/inittab harc:2:wait:/usr/es/sbin/cluster/etc/harc.net # HACMP for AIX network startup clcomdES:2:once:startsrc -s clcomdES >/dev/console 2>&1 clinit:a:wait:/bin/touch /usr/es/sbin/cluster/.telinit # HACMP for AIX These must be the last entries of run level a in inittab! pst_clinit:a:wait:/bin/echo Created /usr/es/sbin/cluster/.telinit > /dev/console # HACMP for AIX These must be the last entries of run level a in inittab!
在 HACMP 5.1 以后的版本中 为了安全起见,不再使用 /.rhosts 文件来控制两台机器之间的命令和数据交换,而是引进的一个新的进程 clcomd 。如果你查看 /etc/inittab 文件就会发现安装完 HACMP 后,添加了一行:
clcomdES:2:once:startsrc -s clcomdES >/dev/console 2>&1 。
lslpp -l cluster.* Fileset Level State Description ---------------------------------------------------------------------------- Path: /usr/lib/objrepos ….. cluster.es.server.rte 5.2.0.9 COMMITTED ES Base Server Runtime ……
ps -ef |grep clcomd root 115694 65676 0 Jun 07 - 2:09 /usr/es/sbin/cluster/clcomd -d
本部分主要对 HACMP 的规划和设计进行了详尽的描述,对于 HACMP 的实施,实际是相当重要和具有实用价值的。同时,还对准备和安装部分进行了论述,也是实际 HACMP 实施的整理和总结,相信对大家有所帮助。后面将对 HACMP 的配置进行专门论述,从而形成完整的实施步骤。