ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

IBM P740小型机AIX+HACMP双机安装配置与排错

IBM P740小型机AIX+HACMP双机安装配置与排错

简介:《IBM P740小机安装配置手册》面向AIX系统管理员、实施工程师及数据库运维人员,聚焦P740小型机从裸机到HACMP高可用集群的落地配置,帮助读者在项目交付中减少参数遗漏与配置返工。资源包共1个doc文档,约4.5MB,以分步操作记录和参数说明为主,便于按章节查阅与现场对照。已有1264人学习下载,具备一定实践参考热度。内容覆盖AIX系统安装、bundle与补丁、limit参数(maxpout、minpout、maxuproc)、IOCP与fullcore、AIO/VM及HBA卡调优、语言包、Oracle文件系统规划、SWAP与dump设置,并延伸到HACMP软件安装、集群网络、串口心跳、资源组与SVC IP等配置环节,适合需要搭建测试环境或梳理实施清单的读者参考。

1. 一台 P740 上架之后:这套 AIX + HACMP 手册解决什么问题

某业务系统的数据库要落到两台 Power 小型机上,机器上架、光纤插好、存储 LUN 划完,剩下的活是装 AIX、调内核参数,再做 HACMP 双机。很多人的预期是系统装完就结束了,真正耗时间的是后面三十多步:IOCP 端口是 Defined 还是 Available、rootvg 镜像完有没有重写 boot image、卷组创建时有没有带并发位。这套 IBM P740 小机安装配置手册把 42 个步骤串成一条线,从 AIX 介质安装、参数调整、PowerPath 多路径,一直走到 HACMP 集群和四个业务卷组。它适合手上有一台刚上架的小机、需要按顺序交付、并且要对切换结果负责的人。

2. 系统底座:AIX 安装、bundle 与补丁链的一次性打完

2.1 安装介质与「全新完全覆盖」的选项含义

介质统一用 6100-07 SP4,这一步不要混用不同 TL 的光盘,后面补丁链对不上会很麻烦。上电后前面板液晶屏自检,出现01 N V=F时按白色按钮,同时把第一张盘塞进光驱;听到提示音、屏幕变白后再按 2 进管理菜单,默认口令是 admin(这个口令只用于引导设置,别和系统 root 混为一谈),把启动顺序改成光驱优先。

从光驱起来后第一屏选 console 作为主控台,安装语言选 English。语言环境选英文不是崇洋,是为了避开中文 locale 下部分脚本路径和字符集解析的麻烦,中文语言包后面单独装,两者不冲突。接着选第 2 项进入修改安装设置,几个关键项按下面这张表定。

设置项取值说明
Method of InstallationNew and Complete Overwrite整盘清空重装,新机首选
Disk Where You Want to Installhdisk0rootvg 落在第一块盘
Cultural Convention / LanguageEnglish (United States)避免字符集干扰
Install Trusted Computing Baseno不开 TCB,减少权限排查干扰

选完回到主菜单输入 0 开始装 BOS。装完系统会自动重启进入 Configuration Assistant,这一步的处理方式直接决定后面能不能顺利接管,见第 5 章的坑。进入系统后先确认 rootvg 在 hdisk0 上,用lsvg -p rootvg看一眼物理卷列表,只有一块盘是正常的,第二块盘这时还没加进来。

提示:安装过程中液晶屏会持续跳数字,551、518 这类代码在装机阶段是正常进度,别急着断电,真正需要关注的是长时间停在同一个码不动。

2.2 bundle 与安全组件:cde、server、app-dev、openssh

如果走的是串口安装,系统默认没装图形界面,需要补 cde 的 bundle;用显示器装的可以跳过这一步。真正必须装的是 server 和 app-dev 两个 bundle,Oracle 和 HACMP 依赖的库文件基本都在里面。除此之外还有 bos.cifs_fs 和 bos.data 两个包,前者提供 CIFS 客户端文件系统,后者是数据文件支持,装 Oracle 介质拷贝和后续挂载会用到。

AIX 缺省只启了 telnet,远程管理全走明文。要换 SSH 就得单独装 openssl 和 openssh,文件在 AIX 6 安装光盘里。图形化入口是smitty installp,但批量装的时候命令行更快,也更容易留痕。

# 先看清家底:server、app-dev、cde 是否已经在 lslpp -l | grep -E "bos\.(server|app-dev|cde)" # 从光盘设备一次性装 bundle 与 ssh 相关包 installp -acgXYd /dev/cd0 bos.server bos.app-dev bos.cifs_fs bos.data \ openssl.base openssl.license openssh.base openssh.msg

参数逐个说:-a是应用,-c是提交(不提交的话补丁回退会留一堆中间态),-g自动带依赖,-X展开扩展包,-Y接受许可协议,-d指定源设备。装完用lslpp -l openssh.base确认状态是 COMMITTED。openssh 装好后/etc/ssh/sshd_config里把 PermitRootLogin 按交付要求关掉,这一步常被漏掉,等漏扫报告出来再补就晚了。

2.3 补丁链与版本核对:TL7 SP06 与 ifix

装完系统先记一笔基线版本,oslevel -s在刚装完时一般是 6100-07-04 这一类。补丁目标是 AIX 6.1 TL7 SP06,装完再查应该是6100-07-06-1241。除了 SP,还有两个 ifix 需要单独装,包名带时间戳,用 emgr 而不是 installp。

# 打补丁前先记录基线,回退时靠它对照 oslevel -s # 装 ifix,两个包都要,别只装第一个就收工 emgr -e IV30896m6a.130214.epkg.Z emgr -e IV32377s6a.130129.epkg.Z # 看临时补丁列表,STATE 为 APPLIED 才算成功 emgr -l

这里有个细节值得单独说:emgr 装完最后一行输出是Return Status: SUCCESS,手册里印成了 SECUSS。别小看这一个字母,我在现场见过有人盯着这行字反复重装,其实包早就装上了。判断成功与否不要看那句提示,看emgr -l里状态列和oslevel -s的版本号。补丁顺序也别乱,先 SP 后 ifix,反过来的话 ifix 会被 SP 覆盖掉,等于白干。

3. 参数调优:limit、IOCP、VM、AIO 与 HBA 的分层设置

3.1 用户限制与系统级开关:limit、IOCP、fullcore

limit 是第一个要动的文件。Oracle 的进程数多、打开文件多,默认的 nofiles 和 fsize 限制在生产上跑两天就会撞墙,表现是数据库进程莫名报错、trace 里一堆 EMFILE。手册给的做法是把 default 段的核心项全部改成 -1,也就是 unlimited。

# 改之前备份,limits 改错会导致用户登录后被立刻踢出 cp /etc/security/limits /etc/security/limits.bak # 编辑 default 段 vi /etc/security/limits

内容改成下面这样,注意缩进和段名,AIX 这个文件对格式比较敏感。

default: fsize = -1 core = -1 cpu = -1 data = -1 rss = -1 stack = -1 stack_hard = -1 nofiles = -1

core = -1是为了配合后面的 fullcore,崩溃时能拿到完整的内存转储而不是被截断的碎片。IOCP 是异步 I/O 完成端口,AIX 6.1 默认已经装了bos.iocp.rte,但端口状态可能是 Defined 而不是 Available,Defined 状态下 Oracle 用不上它。

# 看 IOCP 端口状态 lsdev -Cc iocp # 状态是 Defined 就改成 Available,并让 ODM 重新配置 chdev -l iocp0 -a autoconfig=available cfgmgr -l iocp0 # fullcore 开关,崩溃转储是否完整就看它 lsattr -El sys0 | grep fullcore chdev -l sys0 -a fullcore=true

注意:fullcore 打开之后 dump 设备要留足空间,否则崩溃时转储写一半失败,前面这些设置等于没做。dump 大小的估算和扩容放在 4.2 节讲。

3.2 队列、进程数与刷盘频率

maxpout 和 minpout 控制文件系统页输出队列的高低水位。队列满到 maxpout 时进程被挂起,降到 minpout 以下才恢复。默认值偏小,大并发写的时候进程频繁进出睡眠,表现出来就是 IO 等待高但磁盘并不忙。这个项目按 8192 和 4096 设。

maxuproc 是每个用户最大进程数,默认 128。Oracle 的后台进程加上并行查询、加上 RMAN 通道,破千很轻松,撞上限之后新进程直接起不来,报错信息还不直观。这里设成 16384。

chdev -l sys0 -a maxpout=8192 -a minpout=4096 chdev -l sys0 -a maxuproc=16384 # syncd 不在 ODM 里,改启动脚本 vi /sbin/rc.boot

打开 rc.boot 找到nohup /usr/sbin/syncd 60 > /dev/null 2>&1 &这一行,把 60 改成 10。syncd 是内存脏页回写磁盘的频率,默认 60 秒刷一次,改成 10 秒意味着更频繁落盘。这是一个明确的取舍:拿一部分 IO 开销换掉电时更小的数据丢失窗口,对账务类系统值,对纯查询库就未必。改完记得两台机器都改,双机参数不一致在切换后会出现性能落差,排查起来很费劲。

3.3 网络参数与时间、日志

网络参数用no命令批量设,-p表示永久生效(写进 ODM),-r表示需要重启才生效。这里涉及的有二十来项,没必要全背,按用途分组记就行:缓冲区类(sb_max、tcp_sendspace、tcp_recvspace、udp_sendspace、udp_recvspace)、连接行为类(tcp_keepidle、tcp_finwait2、clean_partial_conns)、以及端口区间类(tcp/udp_ephemeral_low/high)。

# 缓冲区:大包场景下把单连接窗口和系统上限一起抬 no -p -o sb_max=2097152 no -p -o tcp_sendspace=262144 no -p -o tcp_recvspace=262144 no -p -o udp_sendspace=65536 no -p -o udp_recvspace=655360 # 连接行为:长连接保活、缩短 FIN_WAIT_2 停留 no -p -o tcp_keepidle=1800 no -p -o tcp_finwait2=300 no -p -o clean_partial_conns=1 no -p -o tcp_nodelayack=1 no -p -o rfc1323=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 # 队列长度需要重启 no -r -o ipqmaxlen=512

tcp_nodelayack=1是拿带宽换延迟,小包会变多,在数据库私网这种低延迟场景合适,跨广域网的链路就别照搬。rfc1323=1打开窗口缩放和时间戳,是长肥管道场景的前提,不打开的话前面把 tcp_sendspace 调到 256KB 也没意义。

时区用chtz BEIST-8,走 POSIX 接口的东八区格式。别用菜单里那些城市名,跨时区迁移和夏令时规则容易出岔子。系统 error log 默认只有 1MB,转一圈就覆盖了,出问题时什么都查不到,调到 10MB:smitty errdemon里把 Maximum LOGSIZE 改成 10485760,或者直接/usr/lib/errdemon -s 10485760,改完用/usr/lib/errdemon -l核对,再ps -ef | grep errdemon确认进程活着。

3.4 AIO、VM 与 HBA:I/O 路径上的三处关键值

AIO 的 maxservers 通常按并行磁盘数的 10 倍估,上限 80,最小取上限的一半。这个项目直接给到 80。注意 AIO 只对文件系统生效,裸设备不走这条路径,所以如果库建在裸设备上,这个值调多大意义都有限。

VM 参数这组是让文件缓存更积极、同时避免内存被文件页吃光。maxperm%=90、minperm%=3、maxclient%=90、strict_maxclient=1、lru_file_repage=0,再加page_steal_method=1。最后这个参数用-r设,需要重启才生效,很多人-p和-r混着用,结果重启后配置丢了或者当场没生效,来回折腾。

# AIO 服务数 ioo -p -o aio_maxservers=80 # 内存与文件缓存策略 vmo -p -o maxperm%=90 vmo -p -o minperm%=3 vmo -p -o maxclient%=90 vmo -p -o strict_maxperm=0 vmo -p -o strict_maxclient=1 vmo -p -o lru_file_repage=0 vmo -r -o page_steal_method=1 # HBA:链路抖动快速失败,动态跟踪设备变化 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 fcs0 -a num_cmd_elems=500 -P chdev -l fcs1 -a num_cmd_elems=500 -P

HBA 这组里dyntrk=yes很关键。存储侧做 zone 变更或者换端口的时候,不开动态跟踪的话设备名会漂,多路径软件认不到盘,得重启才能恢复;开了之后驱动自己处理。num_cmd_elems=500是单卡并发命令数,配合多路径和队列深度用,调太高反而可能压垮后端。所有chdev -P结尾的都要重启才生效,别设完就去跑压测。

4. 存储布局与双机:rootvg 镜像、文件系统、PowerPath 与 HACMP

4.1 rootvg 镜像与 bootlist 的先后顺序

rootvg 做镜像之前先把主机重启一次,清掉安装过程中的临时状态。然后把第二块盘加进 rootvg 再镜像。

extendvg rootvg hdisk1 mirrorvg rootvg # STALE 分区数为 0 才算同步完成 lsvg rootvg | grep STALE # 关键一步:备盘也要写引导记录 bosboot -ad /dev/hdisk1 bootlist -m normal cd0 hdisk0 hdisk1 shutdown -Fr

mirrorvg只同步数据,不写引导记录。这一步漏掉的话,hdisk0 故障时从 hdisk1 起不来,屏幕会停在 518 或 551,现场看起来像硬件坏了。bosboot -ad /dev/hdisk1必须显式对备盘执行一次。bootlist 里把 cd0 放第一位是为了保留光驱应急引导能力,正常启动会跳过它找 hdisk0。

4.2 文件系统与 SWAP 的容量规划

文件系统按下面这张表建,注意/var给到 90GB,AIX 的日志、errlog、HACMP 日志、以及 Oracle 的 audit 文件都往这里写,给小了运行几个月就满。

挂载点大小用途
/6GB根文件系统
/tmp10GB临时文件、安装解压
/usr10GB系统程序
/var90GB日志、审计、errlog
/home10GB用户目录
/opt10GB第三方软件
/softcd10GBOracle 安装介质
/oracle50GBOracle 程序目录

SWAP 按内存 1:1 设,物理内存 16GB,page space 也做 16GB。PP 默认 512MB 一个,32 个 PP 正好 16GB,用smit lv里的 page space 菜单加。dump 设置跟 SWAP 放在一起做:smit sysdumpdev里把 always allow dump 设为 true,这样系统挂死时还能强制 dump;sysdumpdev -e估算需要的空间,sysdumpdev -l看当前配置;再确认崩溃后自动重启是开的,lsattr -El sys0 | grep restart应该看到autorestart true,没开就chdev -l sys0 -a autorestart=true。

提示:dump 逻辑卷要单独扩,别指望它自动跟着 SWAP 长。逻辑卷大小不够时,崩溃转储会写到一半失败,前面 fullcore 和 limits 的功夫全白费。

4.3 PowerPath 与四个业务 VG

存储多路径用 PowerPath。装完软件先注册,再让它接管设备,最后确认每块 LUN 都识别出多条路径。

emcpreg -install powermt config powermt display dev=all

powermt display dev=all的输出里要看到每块盘有多个 path,状态都是 alive。只有一条路径的话,要么光纤 zone 没划对,要么 HBA 卡没认到,先查lsdev -Cc adapter | grep fcs再查交换机侧。

卷组按业务分四个:sqdbvg 放数据库文件,hddbvg 放历史数据,rmansqvg 放 RMAN 备份数据,rmanhdvg 放 RMAN 历史备份。建的时候必须带-c,也就是 concurrent capable,这是 HACMP 资源组在两台机器之间切换卷组的前提。少了这个位,切换时 varyon 会直接失败。

# -c 并发位,-s 256 表示 PP 大小 256MB mkvg -y sqdbvg -s 256 -c hdiskpower3 mkvg -y hddbvg -s 256 -c hdiskpower4 mkvg -y rmansqvg -s 256 -c hdiskpower5 mkvg -y rmanhdvg -s 256 -c hdiskpower6

PP 大小定 256MB 是折中:太小会导致单个逻辑卷的 PP 数量爆炸,管理开销大;太大则空间碎片浪费明显。四个卷组容量相近,用同一套参数便于后面统一扩。

4.4 HACMP:cluster、心跳网络与资源组

HACMP 6.1 装机时除了 cluster.hativoli 之外全装,那个包是给 Tivoli 集成用的,不装不影响双机。装之前先建 cdrom 文件系统:smitty cdrfs添加,设备选 cd0,挂载点 /cdrom,开机自动挂载选 yes。然后smitty installp选全部包安装。

配置走 smit 的扩展配置路径,按下面这张表逐项填。

配置对象smit 路径取值
集群名Extended Topology → Cluster → Add/Change/Showp740cl
节点Extended Topology → Cluster Node → Addp740a、p740b
IP 网络Extended Topology → Networks → Add a Networknet_ether,类型 ether
非 IP 网络同上net_serial,类型 serial
通信接口Extended Topology → Communication Interfaces/Devicesen0 绑 net_ether,tty0 绑 net_serial
资源组Extended Resource → Resource Group → Addrg_ora,节点顺序 p740a 优先
服务 IPExtended Resource → Service IP Labelssvc_ora,绑 net_ether
应用脚本Extended Resource → Application Serversapp_ora,含 start/stop 脚本
卷组Extended Resource → VG to Resource Groupsqdbvg、hddbvg

串口心跳是很多项目容易省掉的部分,觉得有 IP 网络就够了。真出网络故障时,两个节点互相收不到心跳,会同时认为对方死了,资源组抢同一个卷组,后果比不切换更糟。串口线接好之后用smit tty核对两端参数,9600、8 位、无校验、1 位停止位,两边必须完全一致。

4.5 同步、启动与切换测试

配置改完先同步。在一台节点上执行,它会检查配置语法并把结果推到对端。

# 语法检查,返回 0 才继续 /usr/sbin/cluster/utilities/clsyncd # 启动集群 smit clstart # 看集群状态和资源组归属 clstat

启动顺序有讲究:先起主节点,确认 cluster 状态是 UP、资源组 online 之后再起备节点。两边同时起容易在资源组归属上产生竞争,虽然最终会协商一致,但日志里一堆告警会干扰判断。

切换测试至少做两次。第一次在主节点上用smit clstop停掉集群服务,观察资源组是否被备节点接管,重点看三件事:SVC IP 多久漂过去、卷组是否成功 varyon、应用脚本有没有把数据库拉起来。第二次用资源组移动的方式做计划内切换,smit cl_resource_group里选 Move Resource Groups,这种方式对业务影响小,适合演练。两次都通过才算这套双机立住了。

5. 避坑排查:五处最容易在上线前翻车的地方

5.1 安装与补丁阶段的三个坑

配置助手没关掉。现象是系统装完重启后卡在 Configuration Assistant 界面,远程串口只能看到黑屏、敲什么都没反应,自动化流程直接断在这里。原因是 AIX 首次启动默认拉起这个向导,它会占住控制台。解决方式是在向导里选「Finish now, and do not start Configuration Assistant when restarting the operating system」,如果已经错过了,从单用户模式进去把 /etc/inittab 里 cfgassist 那一行注释掉再重启。

root 口令照抄了文档示例。现象是装机当天一切正常,两周后安全扫描报告出来,root 弱口令直接高危,整个系统被挂起整改。原因是手册里的 123456 是演示值,被当成交付值用了。解决很简单:交付前统一改强口令,同时把/etc/security/user里的 loginretries 调小、root 的 remote login 按需关闭。这类问题不难修,难的是它出现在验收前一周。

补丁返回码看错。现象是 emgr 装完最后一行显示 SECUSS,执行人以为是拼写错误的失败提示,反复重装三次,把已提交的包又装了一遍。原因是输出被终端截断加上手册笔误。真正的判断依据是emgr -l里 STATE 列是否为 APPLIED,以及oslevel -s的版本号是否到位,别只盯最后一行。

5.2 参数与存储阶段的两个坑

文件系统大小前后不一致。现象是装 Oracle 介质时/softcd报空间不足,明明按手册建了。原因是手册第 17 步写的是 1GB,第 20 步的容量表又写 10GB,两处是不同阶段的值,照前面的建就小了。解决方式是按最终容量表一次建到位;已经建小的用chfs -a size=+9G /softcd扩,扩之前确认所在卷组还有空闲 PP。

rootvg 镜像完没重写 boot image。现象是模拟 hdisk0 故障后从 hdisk1 引导,屏幕停在 518,系统起不来。原因是 mirrorvg 只同步数据不同步引导记录。解决是bosboot -ad /dev/hdisk1补写,再bootlist -m normal cd0 hdisk0 hdisk1更新顺序。这个坑的隐蔽之处在于:不模拟故障就永远发现不了,等真坏了才暴露。

卷组没带并发位。现象是资源组切换时备节点 varyon 失败,HACMP 日志里能看到 not concurrent capable 的字样。原因是 mkvg 时漏了-c。已经建好的卷组在未激活状态下可以用chvg -c sqdbvg补上,但如果上面已经有数据、又被两边同时激活过,就得先理清楚状态再动,别硬来。

5.3 双机切换阶段的坑

串口心跳两端参数不一致。现象是集群起来后资源组偶尔自己来回切,日志里心跳时断时续。原因是一端 tty 是 9600,另一端还是默认的 19200,或者流控没关。解决是用smit tty把两端逐项对齐,再用clverify做一次配置校验。心跳这种事平时看不出问题,压力上来才发作,属于典型的黑匣子。

6. 验收与答辩:一份可以照着念的检查单

6.1 交付前必须走完的核对表

参数类的东西最容易出现「设了但没生效」,所以验收不能只看命令有没有执行过,要看当前值。下面这张表是我每次交付前必跑的,逐项打勾,缺一项不算完。

检查项命令合格标准
系统版本oslevel -s6100-07-06-1241
ifix 状态emgr -l两个包 STATE 均为 APPLIED
IOCP 端口lsdev -Cc iocpAvailable
fullcorelsattr -El sys0fullcore true
进程上限lsattr -El sys0maxuproc 16384
网络参数no -asb_max 2097152、rfc1323 1
AIOioo -laio_maxservers 80
内存策略vmo -lpage_steal_method 1
rootvg 镜像lsvg rootvg两块盘,STALE 为 0
引导顺序bootlist -m normal -ocd0 hdisk0 hdisk1
卷组并发位lsvg sqdbvgConcurrent 为 Yes
集群状态clstat两节点 UP,资源组 online

表格里前九项是单机项,两台机器都要对一遍;后三项是集群项,在主节点上执行即可。有条件的把切换测试也放进验收流程,停一次主节点,看资源组是不是在预期时间内完成接管,实测比看配置可靠。

6.2 答辩时怎么讲清楚「为什么这么配」

被问到参数取值时,别背数字,讲

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进