10多年的信息工作,随时记录心得和资料,希望能结识更多的朋友
分类:
2008-04-21 14:56:58
本系列文章的作者通过自己长期的实际项目工作经历,总结出了他对于 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 软件:
本文的实验环境以双机互备中比较复杂的多 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_app
运行 stop_host1_app
清理 vg 进程
添加网关
运行 start_host2_app
运行 stop_host1_app
清理 vg 进程
确认 host2 已启动
整理路由
启动主应用程序
启动通信程序
停通信程序
停应用主程序
清理路由
如在 host1 机器上执行 stop_host1_app
启动 Oracle 数据库及监听程序
如在 host1 机器上执行 start_host1
停数据库及监听程序
|
万事开头难,对于一个有经验的 HACMP 工程师来说,会深知规划的重要性,一个错误或混乱的规划将直接导致实施的失败和不可维护性。
HACMP 实施的根本目的不是安装测试通过,而是在今后运行的某个时刻突然故障中,能顺利的发生自动切换或处理,使得服务只是短暂中断即可自动恢复,使高可用性成为现实。
规划前的需求调研
在做规划之前,或者说一个准备实施 HACMP 来保证高可用性的系统初步设计之前,至少需要调查了解系统的以下相关情况,这些都可能影响到 HACMP 的配置。
包括网段的划分、路由、网络设备的冗余等等在系统上线前的状况和可提供条件,以及实施运行过程中可能出现的变更。
目前 IBM 的 HACMP 除了 AIX,还支持 Linux。
目前新装机器都是 AIX5.3,即使安装 HA5.4 也没有问题。但如果安装可能是在老机器上进行升级,需要仔细了解操作系统版本及补丁情况。
希望方式,如一备一,双机互备,一备多,环形互备等等。
HACMP 版本确定
IBM HACMP 自从出了 5.2 版本后,到了 5.205 后比较稳定,并经过我们自己充分的测试(见测试篇)和实践证明(已有多个系统成功自动切换)。目前考虑到 HA 5.3 的过渡性,HACMP V5.4 的补丁还不够,推荐版本为 HACMP V5.209。
IP 地址设计
IP 地址切换 (IPAT) 方式 有 3 种方式 :
图 3,4和 5 中描述了三个主要的 IPAT 配置场景。
在分开的子网中包含 boot 和 standby 网卡。当集群服务启动的时候 boot 地址被换成 service 地址。尽管这种方式有效性强,但是在需要实现多服务 IP 地址的环境下这种方式是不可取的。集群的管理员不得不利用 pre- 和 post-events 定制其环境建立额外的别名,
并且需要确认这些别名在下一次接管发生前被删除。
HACMP 4.5 开始引入了 IPAT via Aliasing 作为缺省的拓扑模式。在这种新的模式中,standby 网卡的功能被另外一个 boot 网卡替换。子网需求的不同点是还需要一个另外的子网,每一个 boot 网卡需要它自己的子网,并且任何 service 或 persistent 的 IP 将在其本身的子网上操作,所以一共三个子网。当集群服务启动并且需要 service IP 的时候,boot IP 并不消失。这个设计和第一种是不同的,在同一个 HACMP 网络中有多个 service IP 存在并且通过别名来控制。
这种模式把底层的以太网卡藏到一个单一的“ent”接口之后。 该模式不是对前述任何一种方式的替换,而是可以和前述的任一种模式共同存在 。因为在每一个节点 EC 都被配置成冗余方式,可以在 HACMP 中使用 IP 别名定义它们每一个作为单一网卡网络。因为在每个节点只有一个网卡被定义,所以只有两个子网,一个是用作 boot(每个节点的基本 IP 地址),另一个是用于提供高可用服务。
本文讨论 实际工作中使用最多的为第 2 种 : 别名方式 (IPAT via Aliasing),逐步推荐第 3 种 。
这样设计时就需要注意以下事项:
举例来说,下面的地址将会由于网络变更后打通合一后 可能造成冲突 :
设计人 | 机器名 | 服务地址 | 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 个系统分开设计,同时开启将直接导致 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 网络之外,您也可以在其它形式的网络上,如串行网络和磁盘总线上配置心跳网络。
优点:要求低,不需要任何额外硬件或软件,即可实现。
缺点:占用 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 一节。
系统参数要求
作为集群的各个节点机,我们建议各个参数最好完全一致,需要注意的参数有:
环境要求
此时,没有建立任何 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 的配置进行专门论述,从而形成完整的实施步骤。