☰
AIX 6.1 TL7 SP06与HACMP 6.1双机安装配置调优
2026/10/31 2:23:38 网站建设 项目流程

简介:《IBM P740小机安装配置手册》面向承担AIX平台部署的运维工程师与系统集成人员,聚焦P740小型机从裸机安装到HACMP高可用集群落地的完整配置路径,适合具备一定AIX基础、需要按项目规范实施的中级读者。文档围绕操作系统安装、bundle与limit参数、IOCP及fullcore、maxpout/minpout/maxuproc等内核参数展开,并延伸到网络、AIO、VM、HBA卡、语言包、补丁包、Oracle文件系统、系统镜像、SWAP、文件系统扩容与dump设置,最后给出HACMP软件及补丁安装、cluster与资源组、SVC IP、应用脚本和卷组纳管的操作要点。压缩包内共1个doc文件,约4.5MB,按实施顺序编排,便于对照项目现场逐步核对参数与配置项。已有1267人学习,可作为省操作风险管理系统类项目小型机部署的参考模板与排错索引。

1. 版本定版比装机本身更要紧

AIX 这边有个反直觉的坑:安装介质上标的是 6100-07 SP4,系统装完跑oslevel -s出来是6100-07-04,看着挺整齐,等补丁打完变成6100-07-06-1241,中间隔着技术级别的跨度,而 Oracle 和 HACMP 的兼容矩阵按的是后者。我第一次做 IBM P740 小机安装配置时,拿 SP4 的版本号去对补丁清单,装到 HACMP 6.1 同步阶段才发现基线不对,两台机器的 IBM AIX HACMP 拓扑怎么都同步不过去。这套环境在核心业务系统里太常见了——两台 P740 加一套共享存储,AIX 6.1 配 HACMP 6.1 做双机互备,装不好轻则集群起不来,重则切换时业务挂在半路。

2. AIX 6100-07 SP4 安装:从光驱引导到 BOS 落地

2.1 从 01 N V=F 到 BOS 安装的几屏选择

接上电源线,前面板液晶小屏开始硬件自检。等到屏上出现01 N V=F字样,按一下白色按钮,同时把 AIX 安装盘第一张塞进光驱。这一步很多人手忙脚乱,其实记住顺序就行:先按白钮,再放盘,顺序反了不会出问题,但风扇转起来的时候塞盘容易卡住托盘。

屏幕出现白底、听到一声滴之后按2,进入管理菜单,输入提示密码admin,把启动顺序临时改成光驱优先。这条设置只影响本次引导,不动固件里的持久顺序,所以后面装完系统还得再回来改一次,否则重启又进安装盘。

顺利从光驱起来后,第一屏让你选主控台,按提示选console;接着选安装语言,选English。语言这里别纠结,系统装完再单独装中文语言包,安装阶段切中文只会让后面的菜单和报错信息对不上英文文档,纯给自己添麻烦。

然后是关键的几屏选择,选错了要重来一遍:

1. System Settings Method of Installation ---- New and Complete Overwrite Disk Where You Want to Install ---- hdisk0 2. Primary Language Environment Settings (AFTER Install): Cultural Convention ---- English (United States) 3. Install Trusted Computing Base ---- no 0. Install AIX with the current setting listed above.

先选2修改安装设置,再进1把安装方法定为全新完全覆盖,磁盘指定hdisk0,最后回主菜单选0开始装。方法那一屏三个选项的差别必须说清:New and Complete Overwrite清空整块盘;Preservation Install保留一部分已有数据,但/usr、/var、/tmp、/照样覆盖,其它应用的文件和配置会被毁;Migration Install是把现有 BOS 升级到当前版本,保留应用和配置。新机器上没有任何存量数据,选第一项最干净。我见过有人在旧机器上顺手选了第三项,装完系统里全是上一任留下的/etc/hosts残留和旧用户,HACMP 配置阶段节点名对不上,排查了半天。

装完 BOS 会自动重启,进 Configuration Assistant 界面。选Set password for administrator (root user)设 root 口令——手册示例里给的是弱口令,现场必须换成符合密码策略的强口令,这一点别偷懒。然后直接Exit the Configuration Assistant,在最后一屏选Finish now, and do not start Configuration Assistant when restarting the operating system,把配置助手彻底关掉,不然每次重启都弹一遍向导,脚本化的后续配置全被打断。之后看到Welcome to AIX6.1登录界面,操作系统这一层就算落地了。

2.2 bundle、SSH、语言包与 ifix 补丁

系统刚装完只是个裸 BOS,Oracle 和 HACMP 要的东西一样都没有。这里第一步是补 bundle,但补哪些取决于你用什么方式装的机。

如果走串口安装,系统大概率没带图形界面,得先补 cde 的 bundle;用显示器装的机器不需要。两个必须装的 bundle 是server和app-dev,装完这两个,Oracle 和 HACMP 所需要的基础补丁基本就齐了。默认安装下 AIX 只起了 telnet 服务,远程管理要换 SSH,就得单独装 openssl 和 openssh 软件包,安装文件在 AIX 6 安装光盘里。

# 交互式安装软件包,适合第一次装机时逐项确认 smitty installp # 需要补的包清单: # bos.cifs_fs CIFS 文件系统支持 # bos.data 基础数据文件包 # 所有 openssl* 开头的包 # 所有 openssh* 开头的包

smitty installp进的是软件安装主菜单,选Install and Update from ALL Available Software,在SOFTWARE to install里用 F4 列出可选项,按上面清单勾。装bos.cifs_fs和bos.data的原因是不少中间件的安装脚本会探测 CIFS 和基础数据包,缺了会直接报前置条件不满足;openssl、openssh 则是为了把 telnet 关掉之后还有可用的远程通道,生产环境这一步不做,等保那关就过不去。

中文语言包不着急,按需装:

# 进语言环境管理菜单 smitty # 路径:System Environments -> Manage Language Environment # -> Add Additional Language Environments

在CULTURAL convention to install里选IBM... [Zh-CN] UTF-8,语言翻译那栏同样选[Zh-CN] UTF-8,需要兼容老应用的再加 GB 和 zh-cn 两项。装完用locale命令确认LANG变量生效,只在会话里 export 是临时的,要持久化得写进/etc/environment。

补丁是这个项目里最容易翻车的一环。先用oslevel -s看当前版本,介质装完是6100-07-04,目标是 AIX 6.1 TL7 SP06,打完应该是6100-07-06-1241。除了 SP,还有两个 ifix 必须单独打,用emgr装:

# 查看当前已装的紧急修复补丁 emgr -l # 按顺序安装两个 ifix,包名带时间戳后缀,别抄错 emgr -e IV30896m6a.130214.epkg.Z emgr -e IV32377s6a.130129.epkg.Z

emgr -e的-e就是 emerge 的意思,装完每个包会打印Return Status: SUCCESS,看到这个才算过。这两个包针对的是 TL7 上的已知缺陷,不打的话后面 HACMP 的资源组切换会出现偶发的挂起。安装前后都用oslevel -s和emgr -l各记一次,把版本号写进实施记录,出了问题这是唯一的对照依据。

3. 系统参数与存储底座:limit、IOCP、VM、AIO、HBA 到 rootvg 镜像

3.1 limit、IOCP、fullcore 与 maxpout/maxuproc/syncd

系统装完的第一件事不是装数据库,是改 limit。AIX 默认给普通用户的资源限制偏低,Oracle 一启动就是一堆进程和文件句柄,撞上nofiles上限直接起不来,报错还特别含糊。建议把所有限制项直接改成unlimited(即-1),改之前先备份。

# 改之前留个后悔药,出问题能一键还原 cp /etc/security/limits /etc/security/limits.bak # 编辑 limits 文件,把下列项全部改为 -1 vi /etc/security/limits # core = -1 # rss = -1 # fsize = -1 # data = -1 # stack = -1 # stack_hard = -1 # cpu = -1 # nofiles = -1

core = -1是允许写完整 core 文件,配合后面的 fullcore 一起用;nofiles = -1是去掉单进程能打开的文件数上限,数据库的段文件、HACMP 的心跳套接字、SSH 会话都吃这个额度。改完不用重启,用户重新登录即生效,但已经在跑的进程还是老值,所以规范做法是改完 limit 再往下做,别装到一半回头补。

IOCP 是 I/O 完成端口,异步 I/O 的事件通知全靠它,Oracle 在 AIX 上不开这个,性能会掉一大截。AIX 6.1 默认装了bos.iocp.rte,但状态不一定是 Available:

# 检查 IOCP 端口状态 lsdev -Cc iocp # 正常输出:iocp0 Available I/O Completion Ports # 如果显示 Defined,改成 Available chdev -l iocp0 -a autoconfig=available cfgmgr -l iocp0

chdev -l iocp0 -a autoconfig=available只改设备属性,cfgmgr -l iocp0才是让配置管理器真正去配这个设备,两条命令缺一不可。我见过只跑了第一条就去看lsdev,状态还是 Defined,回头怀疑命令写错了,其实是少了cfgmgr。

fullcore 是第二个容易被忽略的开关。AIX 默认不开完整 core,进程崩溃时只留一小段栈信息,真正要定位内存问题时那个 core 文件基本没用,跟黑匣子只录了最后三秒一样。

# 查看 fullcore 当前值 lsattr -El sys0 | grep fullcore # 打开 fullcore chdev -l sys0 -a fullcore=true

然后是三个 sys0 上的调优参数:

# 文件系统页输出阈值,默认值偏小,大 I/O 时进程容易被频繁挂起 chdev -l sys0 -a maxpout=8192 -a minpout=4096 # 单用户最大进程数,默认 128,Oracle 加 HACMP 根本不够 chdev -l sys0 -a maxuproc=16384 # 复核 lsattr -El sys0 | grep -E "maxpout|minpout|maxuproc"

maxpout和minpout控制的是文件系统页输出队列的高低位水位,进程写满maxpout个页就被挂起,降到minpout以下才唤醒。8192/4096 这组值是按并行写密集的场景定的,比例保持 2:1 是常见做法,改的时候两个一起改,只改一个会让挂起和唤醒的节奏错乱。maxuproc从 128 提到 16384,看着夸张,实际是给数据库的并行进程留余量,这个值只占内存里几个字节的表项,不占实际资源。

syncd是内存脏页刷盘的频率,默认 60 秒。项目要求改成 10 秒,缩短脏页窗口,代价是磁盘写压力上升,属于拿 I/O 换一致性。这个参数不在常规的 tunable 里,得改启动脚本:

# 编辑启动脚本,找到 syncd 那一行 vi /sbin/rc.boot # 将 nohup /usr/sbin/syncd 60 > /dev/null 2>&1 & # 改为 nohup /usr/sbin/syncd 10 > /dev/null 2>&1 &

注意改的是/sbin/rc.boot,不是/etc/inittab里那行。有人图省事直接改 inittab,重启后又被 rc.boot 覆盖回去,白忙一场。改完重启,用ps -ef | grep syncd确认参数是 10。

时区和 error log 顺手一起做掉。时区用 POSIX 格式,东八区是BEIST-8:

chtz BEIST-8

error log 默认只有 1MB,两三天就滚动一次,故障回溯根本不够用,调到 10MB:

# 命令行方式直接改 /usr/lib/errdemon -s 10485760 # 或者走 smit,把 Maximum LOGSIZE 改成 10485760 smitty errdemon # 确认 /usr/lib/errdemon -l ps -ef | grep errdemon

-s后面跟的是字节数,10485760 就是 10MB。改完必须确认errdemon进程在跑,进程不在的话配置写得再大也不会记日志。

3.2 网络、AIO、VM、HBA 四组参数

网络参数用no批量刷,每条都是-p表示持久化到下次重启依然有效,不加-p只改当前内核,重启全丢:

# TCP 保活探测空闲时间,默认 14400 太长,改成 30 分钟 no -p -o tcp_keepidle="1800" # FIN_WAIT_2 状态超时,加快端口回收 no -p -o tcp_finwait2="300" # UDP 收发缓冲区,大包场景要放大 no -p -o udp_sendspace="65536" no -p -o udp_recvspace="655360" # TCP 收发缓冲区 no -p -o tcp_sendspace="262144" no -p -o tcp_recvspace="262144" # 关闭延迟确认,降低小包往返时延 no -p -o tcp_nodelayack="1" # 关闭路径 MTU 发现,避免中间设备丢 ICMP 导致大包不通 no -p -o tcp_pmtu_discover="0" # 打开 RFC1323 窗口缩放和时间戳,长肥管道必需 no -p -o rfc1323="1" # socket 缓冲区总上限,要大于等于收发缓冲区之和 no -p -o sb_max="2097152" # 关闭源路由重定向,安全基线要求 no -p -o ipsendredirects="0" no -p -o ipignoreredirects="1" no -p -o ip6srcrouteforward="0" # 清理半开连接,防 SYN 泛洪 no -p -o clean_partial_conns="1" # 临时端口范围,避开低端口段 no -p -o tcp_ephemeral_low=9000 no -p -o tcp_ephemeral_high=65500 no -p -o udp_ephemeral_low=9000 no -p -o udp_ephemeral_high=65500

这组值里最容易被质疑的是tcp_nodelayack=1,它关掉延迟确认,每个包都单独回 ACK,网络包数量会上升,但数据库这种小事务密集的场景,延迟比带宽重要。sb_max必须大于等于tcp_sendspace与tcp_recvspace之和,写成 2097152 是给 256KB 的收发缓冲留了足够余量,这个值写小了会直接报参数非法。

AIO 只对文件系统起作用,裸设备用不上,但 Oracle 的数据文件如果建在文件系统上就必须配:

# 异步 IO 服务进程数,按并行磁盘数 10 倍估,配 80 ioo -p -o aio_maxservers=80 # 配套的最小服务进程数,取最大值的一半 ioo -p -o aio_minservers=40 # 确认 ioo -l | grep aio

aio_maxservers的经验算法是并行磁盘数的 10 倍,上限 80,最小值取最大值的一半。项目里磁盘队列铺得比较开,直接压到 80。有人的做法是用chdev -l aio0 -a maxservers=80,这条命令也能改,但它改的是设备属性,生效时机和ioo不一样,两种方式别混着用,不然排查时你会看到两个不一致的值。

VM 参数决定内存页的置换策略,这组参数配错的典型症状是文件系统缓存把内存吃光,Oracle 的 SGA 被换出去,业务一压测就抖:

# 文件页占物理内存的最大比例 vmo -p -o "maxperm%=90" # 最小比例,低于这个值才开始大量换出 vmo -p -o "minperm%=3" # 客户端文件页上限 vmo -p -o "maxclient%=90" # 关闭严格 maxperm,允许临时突破 vmo -p -o strict_maxperm=0 # 开启严格 maxclient,客户端页不许超 vmo -p -o strict_maxclient=1 # 关闭文件页重分页统计,减少无谓扫描 vmo -p -o lru_file_repage=0 # 换页方式改为按页窃取,重启生效 vmo -r -o page_steal_method=1

maxperm%给到 90 是因为这台机器主要跑数据库,文件系统缓存可以吃得多;minperm%压到 3 是为了在内存紧张时优先保住计算页。lru_file_repage=0这个参数在 AIX 6.1 上是关掉文件页的重复分页判定,配合page_steal_method=1一起用,能让内存回收更平滑。注意-r和-p的区别:-p立即生效且持久,-r推迟到重启才生效但同样持久。page_steal_method必须用-r,用-p会提示参数不支持。

HBA 卡参数决定了光纤通道在链路抖动时的恢复行为,四条 fscsi 和四条 fcs 一起改:

# fscsi 层:开启动态跟踪,链路错误快速失败 chdev -l fscsi0 -a dyntrk=yes -a fc_err_recov=fast_fail -P chdev -l fscsi1 -a dyntrk=yes -a fc_err_recov=fast_fail -P chdev -l fscsi2 -a dyntrk=yes -a fc_err_recov=fast_fail -P chdev -l fscsi3 -a dyntrk=yes -a fc_err_recov=fast_fail -P # fcs 层:提高单卡命令队列深度 chdev -l fcs0 -a num_cmd_elems=500 -P chdev -l fcs1 -a num_cmd_elems=500 -P chdev -l fcs2 -a num_cmd_elems=500 -P chdev -l fcs3 -a num_cmd_elems=500 -P

dyntrk=yes让 HBA 在存储端口换位置时自动跟踪目标地址,多路径环境里存储控制器做微码升级、端口漂移,不开这个参数链路就起不来。fc_err_recov=fast_fail是链路出错时快速上报,让多路径软件尽快切路径,而不是干等超时。num_cmd_elems=500是单卡并发命令数,默认值在重负载下会成为瓶颈。这八条命令末尾的-P表示持久化,改完必须重启系统才生效,别改完就急着做存储识别,会看不到效果。

3.3 rootvg 镜像、SWAP、dump、Oracle 文件系统与 VG 规划

系统盘必须做镜像,这是双机环境里最基础的一层冗余。做完镜像要重写引导镜像、更新启动列表,否则备盘只是块数据盘,主盘挂了照样起不来。

# 把第二块盘加进 rootvg extendvg rootvg hdisk1 # 做镜像 mirrorvg rootvg # 看镜像进度,STALE 分区数降到 0 才算同步完 lsvg -l rootvg | grep STALE # 重写引导镜像到两块盘 bosboot -ad /dev/hdisk0 bosboot -ad /dev/hdisk1 # 更新启动顺序:光驱优先,然后两块系统盘 bootlist -m normal cd0 hdisk0 hdisk1 # 重启生效 shutdown -Fr

mirrorvg是后台同步,命令返回不代表镜像完成,必须用lsvg -l rootvg盯着 STALE 计数归零。bosboot两块盘都要跑,只跑主盘的话,主盘故障从备盘引导会发现引导记录是旧的。bootlist里把cd0放第一位是为了以后维护时能直接从光盘引导,正常启动时找不到光盘会自动顺延到hdisk0。

SWAP 按内存 1:1 配,物理内存 16GB 就配 16GB 的页空间。PP 默认 512MB,需要 32 个 PP,现有页空间占 1 个,再补 31 个:

# 查看当前页空间 lsps -a # 给 hd6 增加 31 个 PP,512MB * 31 约 15.5GB,加上原有 1 个正好 16GB chps -s 31 hd6 # 复核 lsps -a

用chps -s比走 smit 快,-s后面跟的是逻辑分区数量,不是容量。改之前一定用lsps -a确认 PP 大小是不是 512MB,如果系统装的时候选了不同 PP 尺寸,这个数字要重算。

文件系统按项目给的规格建,我在现场是按这张表落地的:

文件系统大小用途
/6GB根文件系统
/tmp10GB临时文件,安装介质解压也走这里
/usr10GB系统命令与共享库
/var90GB日志、队列、error log
/home10GB用户主目录
/opt10GB第三方软件
/softcd10GBOracle 安装介质挂载点
/oracle50GBOracle 程序目录

这里有个小矛盾要说明:手册前文写/softcd对应逻辑卷lvsoftcd大小 1GB,后面的文件系统表里给的是 10GB。我按 10GB 落地,因为安装介质解压过程中会临时占用额外空间,1GB 经常在半路报空间不足,10GB 是留余量。/oracle对应lvoracle逻辑卷,挂载后属主必须改成 Oracle 用户,否则安装程序写不进去:

# 建目录并授权,用户组名按现场实际的 Oracle 用户组来 mkdir -p /oracle /softcd chown -R oracle:oinstall /oracle chmod 775 /oracle

dump 设置必须做,系统崩了要靠它留现场。先用sysdumpdev -e估算需要多大空间,再决定 dump 逻辑卷扩到多少:

# 估算当前内存状态下 dump 需要的大小 sysdumpdev -e # 查看当前 dump 设备与状态 sysdumpdev -l # 允许系统挂死时强制 dump smitty sysdumpdev # 将 "always allow dump" 设为 TRUE # 崩溃后自动重启 chdev -l sys0 -a autorestart=true lsattr -El sys0 | grep restart

sysdumpdev -e给的是估算值,实际分配按估算值的 1.2 倍留比较稳。autorestart=true是崩溃后自动拉起,双机环境里这一项很重要——主节点挂了要尽快回到可接管状态,不然备节点也出问题时就没有退路了。

存储多路径软件 PowerPath 装在系统层,装完必须重启再识别设备:

# 安装后确认版本 powermt version # 查看多路径设备与路径状态 powermt display dev=all

powermt display dev=all的输出里每条路径都应该是alive,出现dead说明光纤链路或者 zoning 有问题,这时候别急着建 VG。多路径生效后,看到的设备名是hdiskpower*而不是hdisk*,VG 必须建在hdiskpower上,建在裸hdisk上等于绕过了多路径,链路一断就全盘不可用,这是很典型的一个血泪坑。

VG 按用途拆成四个,别图省事塞一个卷组里:

卷组用途说明
sqdbvg数据库数据文件独立 PV,避免与归档争 I/O
hddbvg历史库数据文件与主库物理隔离
rmansqvg主库 RMAN 备份备份落盘不占数据盘带宽
rmanhdvg历史库 RMAN 备份同上
# 以 sqdbvg 为例,-s 指定 PP 大小 128MB,-y 指定卷组名 mkvg -y sqdbvg -s 128 hdiskpower1 # 激活并确认 varyonvg sqdbvg lsvg -p sqdbvg

四个卷组用同样的方式建,-s 128的 PP 大小是按数据文件增长粒度定的,PP 太小会导致逻辑卷数量膨胀,PP 太大则空间利用率低。建完用lsvg -p确认每块 PV 的归属,别把两个卷组建到同一块 PV 上。

4. HACMP 6.1 安装与集群配置:软件包、心跳、资源组

4.1 安装 HACMP 与补丁,避开 cluster.hativoli

HACMP 从光盘装,先建 cdrom 文件系统:

# 创建光盘挂载点,设备一般是 cd0,挂载点 /cdrom,开机自动挂载 smitty cdrfs # DEVICE name: cd0 # MOUNT POINT: /cdrom # Mount AUTOMATICALLY at system restart: yes

smitty cdrfs里设备名用 F4 选,一般就是cd0;挂载点写/cdrom;开机自动挂载选yes,选no的话后续每次用光盘都要手工mount,装到一半忘了挂会报找不到安装源。

# 进入软件安装 smitty installp # 选 Install and Update from ALL Available Software # SOFTWARE to install 里全选,唯独排除 cluster.hativoli

cluster.hativoli是 Tivoli 监控集成包,本项目没用这套监控,装上反而会起一个连不上的服务,日志里一直刷连接失败。排除它,其它包全装。装完用lslpp -l | grep cluster确认主要文件集都在。

HACMP 的补丁按版本对应关系打,装完基础包先重启,再按补丁说明装对应的 PTF。补丁没打全的典型表现是集群能起来但资源组切换卡住,日志里报内部函数超时,这类问题几乎都跟补丁级别有关,别指望改配置能绕过去。

4.2 集群、网络、串口心跳与 SVC IP

配置走smit hacmp的扩展配置路径:Extended Configuration→Extended Topology Configuration。顺序不能乱,拓扑没配完就配资源,后面同步会报一堆依赖错误。

先加集群定义和节点:

Extended Topology Configuration -> Add a Cluster Definition # 集群名,两台必须完全一致 -> Add Cluster Nodes # 添加两台主机 Node Name: nodeA / nodeB Communication Path to Other Node: 选串口设备

集群名两台机器必须一字不差,大小写都算。节点名建议就用hostname的输出,跟/etc/hosts对齐,后期排查省很多事。

然后加网络,HACMP 里网络分两类,IP 网络跑业务和心跳,非 IP 网络跑串口心跳:

Extended Topology Configuration -> Add a Network Network Type: ether # 基于 IP 的网络,命名 net_ether_01 -> Add a Network Network Type: serial # 基于非 IP 的网络,命名 net_serial_01 -> Add Communication Interfaces/Devices # en0 加到 net_ether_01 # tty0 加到 net_serial_01

串口心跳是用来防 IP 网络脑裂的,两台机器直连串口线,成本很低但作用很大。IP 网络全断的时候,串口心跳还在,集群能判断对方是死是活,不会两边同时抢资源。这一步偷懒不做,后面做切换测试时很容易出现双节点都认为自己是主的场面。

再加 IP 地址和 SVC IP:

-> Add Communication Interfaces/Devices # 给 net_ether_01 添加 boot IP 和 service IP -> Add Service IP Addresses # 添加业务浮动地址,注意子网掩码和网卡要对上 -> Add Service Labels

SVC IP 就是资源组切换时跟着漂的浮动地址,客户端连的是它,不是物理网卡的 boot IP。加的时候最容易错的是网卡选错、掩码跟物理网络不一致,同步阶段会直接报地址冲突。

4.3 资源组、应用脚本、卷组与同步启动

拓扑配完切到资源配置:Extended Configuration→Extended Resource Configuration。

HACMP Extended Resources Configuration -> Configure HACMP Application Servers # 添加启停脚本,路径两台机器上必须都存在且可执行 # Start Script: /usr/local/bin/app_start.sh # Stop Script: /usr/local/bin/app_stop.sh -> Configure HACMP Resource Groups -> Add a Resource Group # 资源组名、节点顺序(主节点在前)

应用脚本的路径两台机器必须完全一致,脚本里也别写死本机路径。常见做法是脚本里先判断当前节点是不是资源组的持有者,再决定启动还是退出,避免备节点上误起一份。

把卷组和 SVC IP 挂进资源组:

-> Change/Show Resources for a Resource Group # Service IP Label: 选之前加的 SVC IP # Volume Groups: 选 sqdbvg 等共享卷组 # Application Servers: 选之前加的应用

共享卷组在资源组里是随组 varyon/varyoff 的,手动varyonvg之后再让 HACMP 接管会冲突。挂进去之前先确认卷组在两边都是varyoff状态。

同步是最后一步,也是最容易失败的一步:

Extended Configuration -> Extended Verification and Synchronization # 先 Verify,全部 OK 再做 Synchronize

Verify 会检查两台的拓扑、资源、网络定义是否一致,任何一项不一致都会列出来。别跳过 verify 直接同步,同步失败只会给一个笼统的错误,回头看 verify 报告才知道是哪一项对不上。

启动和查看状态:

# 主节点启动集群 smitty clstart # 查看集群管理器状态 lssrc -ls clstrmgrES # 查看集群整体状态,ST_INIT 表示已稳定运行 /usr/es/sbin/cluster/utilities/cldump # 图形化看状态,需要 X 环境 clstat

lssrc -ls clstrmgrES输出里Current State是ST_INIT才算稳定,卡在ST_STARTING说明有资源没起来。cldump能看到资源组当前在哪个节点、SVC IP 绑在哪张网卡上,比界面直观。

切换测试必须做,而且要在业务低峰做:

# 从 smit 里操作资源组迁移 smitty clRGmove # 选资源组,目标节点选备节点,执行迁移 # 或者直接停主节点集群服务,验证被动切换 smitty clstop

主动迁移看的是 SVC IP 能不能正常漂、应用脚本能不能在备节点起来;被动停服务看的是故障检测和接管时间。两轮都过,这套双机才算真配完。

5. 排查:HACMP 双机与系统参数的五类翻车记录

5.1 系统层三个参数坑

第一条,IOCP 状态是 Defined 不是 Available。现象是 Oracle 能起来但压测时 I/O 等待明显偏高,lsdev -Cc iocp显示Defined。原因通常是用chdev改了属性但没跑cfgmgr,设备配置没真正下发。解决是按chdev -l iocp0 -a autoconfig=available加cfgmgr -l iocp0两条一起执行,再复核状态,改完最好重启一次让 Oracle 重新加载。

第二条,fullcore 没开导致 core 文件残缺。现象是进程崩溃后/var/adm/core下的 core 文件很小,用dbx打开看不到有效栈。原因是sys0上的 fullcore 默认是 false,只记录部分内存段。解决是chdev -l sys0 -a fullcore=true,同时确认/etc/security/limits里core = -1,两处都开了才有完整 core。

第三条,syncd 改完重启又变回 60。现象是当天ps -ef | grep syncd看到 10,第二天重启又变回 60。原因是改在了/etc/inittab或者直接 kill 掉进程重起,没动/sbin/rc.boot。解决是改/sbin/rc.boot里nohup /usr/sbin/syncd那行的参数,改完重启验证,别只看当前进程。

5.2 存储与集群层两个坑

第四条,rootvg 镜像做完但备盘不能引导。现象是拔掉 hdisk0 后系统起不来,进维护模式发现 hdisk1 上没有引导记录。原因是mirrorvg只同步了数据,bosboot没在新盘上跑。解决是bosboot -ad /dev/hdisk1重写引导,再用bootlist -m normal cd0 hdisk0 hdisk1更新启动列表,两块盘都写一遍最稳。

第五条,PowerPath 装完 VG 建在 hdisk 上。现象是多路径软件显示路径正常,但拔掉一条光纤业务就中断。原因是建 VG 时选错了设备名,建在了hdisk上而不是hdiskpower上,绕过了多路径层。解决是导出数据后删掉 VG,重新在hdiskpower设备上建,lsvg -p确认 PV 名带power后缀。这条没有后悔药,只能在建 VG 之前用powermt display dev=all确认设备清单。

6. 验证:装完之后怎么确认这套环境真的跑通了

装完不等于跑通,我习惯按一张清单从头到尾核一遍,任何一项对不上就回头查,不往下走。

系统层先看版本和补丁:

# 期望 6100-07-06-1241 oslevel -s # 确认 ifix 都在 emgr -l # IOCP 必须是 Available lsdev -Cc iocp # 关键参数一次看全 lsattr -El sys0 | grep -E "fullcore|maxuproc|maxpout|minpout|autorestart" # syncd 应该是 10 ps -ef | grep syncd | grep -v grep

存储层看镜像和 dump:

# 两块盘都在 rootvg,且都有引导记录 lsvg -p rootvg bootlist -m normal -o # dump 设备状态与估算大小 sysdumpdev -l sysdumpdev -e # 多路径每条都 alive powermt display dev=all

集群层最后看一遍:

# 状态必须是 ST_INIT lssrc -ls clstrmgrES # 资源组归属、SVC IP 绑定位置 /usr/es/sbin/cluster/utilities/cldump

这几条命令的输出我会截图存档,跟实施记录放在一起,后面出问题拿来对比,比凭记忆靠谱。

还有两个容易被跳过但很值得做的动作。一是主动做一次资源组迁移,观察 SVC IP 漂移耗时和应用启停日志,把耗时记下来,这作为后续故障切换的参照基线。二是在备节点上确认共享卷组处于 varyoff 状态,SVC IP 没有残留绑定在网卡上,这两项如果不对,说明上一次切换没收干净,下次切换一定会出问题。

从那以后我每次装完双机,不管多晚,都强制走一遍这张清单:oslevel -s、lsdev -Cc iocp、bootlist -m normal -o、cldump四条命令挨个看,缺一条都不算交付。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询