资讯详情

资讯详情

P740小型机AIX 6.1安装与HACMP 6.1双机配置手册

简介《IBM P740小机安装配置手册》面向承担小型机部署与运维的系统管理员和实施工程师针对AIX系统安装参数多、高可用集群配置链路长且容易漏项的问题提供可按步骤执行的配置参考适合具备一定系统基础的中级读者。压缩包内为1个doc文档约4.5MB以单文档分步说明和配置项清单组织便于项目现场查阅、打印归档或逐项核对。内容从操作系统安装、系统包安装、核心参数调优、时区与错误日志调整延伸到网络、异步读写、虚拟机管理、存储卡参数配置并覆盖语言包与补丁、数据库文件系统、系统镜像、交换空间、转储设置等准备环节。后半部分围绕HACMP高可用集群软件及补丁安装、集群与主机添加、网络地址配置、串口心跳、资源组、服务地址、应用脚本和卷组加入资源组展开。已有1267人学习下载可作为小型机实施前的检查清单、配置复盘与排错参照。1. 从 01 N VF 到集群起飞这套手册解决什么问题机房上架第一台 P740前面板液晶屏跳出01 N VF的时候不少第一次接触 Power 机器的人会下意识去按电源键——按下去基本等于重来一遍。小型机装机跟 x86 最大的差别就在这里它有独立的管理菜单、有独立的启动顺序逻辑、有字符界面的安装方式选择全程没有图形化引导能靠点点点混过去每一步都得看清提示再敲数字。这份《P740 小机安装配置手册》值得拆开来看是因为它把 AIX 6.1 裸机安装、内核与 IO 参数成组下发、HACMP 6.1 双机搭建、多路径软件落地、VG 规划这几件事串成了一条从光盘塞进光驱一直走到两个节点都跑起 cluster 的完整链路并且是某省操作风险管理系统实施现场踩出来的顺序。适合正在做双机高可用改造、手里有 Power 机器要交付、或者接手了一套前任只留了半截文档的老系统的同行。2. AIX 6.1 裸机安装从液晶面板到 BOS 落盘的六步装机这一段是整个链路里最没法跳过的部分。x86 上装系统插上 U 盘选个引导项就完事Power 机器上你面对的是固件自检码、SMS 管理菜单、安装方式选择、磁盘选择、语言环境、配置助手任何一步选错都得重做。手册里统一使用6100-07 SP4介质这条约束不是随便写的——AIX 6.1 的 TL 级别决定了后面 HACMP 补丁能不能对得上也决定了 oracle 相关的包依赖能不能满足。2.1 上电自检与 SMS 启动顺序设置把电源线插进机器后面对应的接口前面板液晶小屏会开始滚动自检信息。等到出现01 N VF字样时按一下面板上的白色按钮同时把 AIX 系统安装盘的第一张光盘放进光驱。这一步的时间窗口比较窄按早了自检还没到那个阶段按晚了已经跳过去了实践中通常的做法是盯着小屏看到字样出来立刻按。接着屏幕刷新听到一声提示音、画面转白之后再按一下2键进入管理菜单SMS。菜单会要求输入口令默认是admin。进去之后做的是启动顺序Boot Sequence设置把 CD/DVD 设备挪到列表最前面保存退出。手册里没说具体的菜单层级按 AIX 上常见做法走是Select Boot Options→Select Device Type→CD/DVD→ 选设备 → 把它设为第一项最后按x保存并重启。提示设完启动顺序一定要确认保存成功SMS 里有不少操作是点进去就退出、不落盘的看着像设了其实没生效重启后又回到硬盘引导。这里有个容易忽略的点如果机器上已经装过系统、rootvg 里有可引导的镜像固件可能直接跳过光盘。遇到这种情况先确认光驱里的盘是首张安装盘、SMS 里光驱设备状态是 Available再检查启动项的排序是不是真的被保存了。2.2 安装方式与磁盘选择为什么必须选全新完全覆盖从光驱顺利启动之后屏幕第一屏会问 console 主控台的选择按提示选 console随后进入语言选择选English。这里选择 English 是工程惯例不是不会中文——英文界面下报错信息、参数名、日志关键字跟官方文档能对得上出问题时搜索资料效率高一个量级。语言包留到后面单独补手册第 15 步就是干这个的。到了安装设置菜单会看到三项1. Start Installation Now with Default Settings 2. Change/Show Installation Settings and Install 3. Start Maintenance Mode for System Recovery选2进去改设置。进去之后能看到一屏汇总信息第一项是 System Settings里面放着三个关键值安装方法、安装磁盘、是否启用 Trusted Computing Base。手册给的操作是先把安装方法改成New and Complete Overwrite然后把安装磁盘选成hdisk0。Installation and Settings 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) Language --------------------- English (United States) Keyboard --------------------- English (United States) Keyboard Type ---------------- Default 3. Install Trusted Computing Base ------------- no 0 Install AIX with the current setting listed above.这几种安装方式的区别必须说清楚选错会毁数据安装方式行为适用场景New and Complete Overwrite抹掉所选磁盘上的全部内容从零建 rootvg全新机器、磁盘要重做Preservation Install保留用户数据但会重写 /usr、/var、/tmp、/系统盘要换版本但数据在其他 VGMigration Install保留已装产品与配置只升级基础操作系统原地升级 TL/SP在磁盘选择界面如果机器上挂了两块盘hdisk0和hdisk1只勾hdisk0作为安装目标hdisk1留空——后面做 rootvg 镜像的时候才会用到它。手册截图里hdisk1是othervg状态这正是为镜像预留的位置。选完磁盘后再回到汇总页输入0开始安装 BOS。这一步会跑比较久中途不要断电、不要拔光盘。2.3 配置助手必须关掉root 密码与首次登录BOS 装完系统会自动重启进到 Configuration Assistant 界面。这个助手会引导你配网络、配时区、配用户、配 NFS 等看起来很贴心但对双机场景来说是个麻烦制造者——它会把一套并行节点里不该自动配的东西按单机思路配掉。手册的做法是Accept 之后一路 Next只在Set password for administrator (root user)这一项上停下来把 root 密码设好然后直接点Exit the Configuration Assistant。到最后的确认页必须选Finish now, and do not start Configuration Assistant when restarting the operating system.选完点 Finish出现Welcome to AIX6.1登录界面。注意这个“不再启动配置助手”的选项一定要选。否则下次重启助手还会出来节点在 cluster 里重启时会被它拦在登录前的配置页面导致 HACMP 守护进程起不来排查半天才发现是助手挡住了。2.4 安装后 bundle 补齐server、app-dev 与 SSH 替换装完裸系统只是有了一个能登录的壳子编译环境、图形环境、网络服务都得补。如果安装时用的是显示器方式图形界面已经带上了如果是串口方式安装系统可能没有图形界面这时候要先补 CDE 的 bundle# 串口安装的场景下补 CDE图形界面安装可跳过 smitty installp # 菜单路径Install Software - Install and Update from ALL Available Software # INPUT device / directory for software 填 /dev/cd0 # SOFTWARE to install 里用 F4 列出选中 cde.dt.rte 一组不管哪种安装方式有两个 bundle 是必须装的server和app-dev。装完这两个oracle 与 HACMP 所需要的大部分补丁依赖就齐了。但仍有两个文件集要单独补bos.cifs_fs和bos.data。安全方面还一件事AIX 默认只装了 telnet用它做远程管理在交付环境里是不合格的。openssl 和 openssh 的安装文件在 AIX 6 安装光盘里安装方式同样是走smitty installp# 安装 openssl / openssh 与两个独立文件集 smitty installp # INPUT device / directory for software: /dev/cd0 # SOFTWARE to install 中依次选中F7 多选 # bos.cifs_fs # bos.data # openssl.base # openssl.man.en_US # openssh.base.client # openssh.base.server # openssh.man.en_US装完之后验证一下别只看 smit 的返回码# 逐个确认关键文件集状态为 COMMITTED lslpp -l bos.cifs_fs bos.data openssl.base openssh.base.server # 确认 sshd 已经注册为子系统 lssrc -a | grep sshd # 没起来的话手工拉一下并设成开机自启 startsrc -s sshd mkitab sshd:2:once:/usr/sbin/sshd /dev/null 21参数说明smitty installp里的INPUT device / directory for software除了写/dev/cd0也可以写本地解压目录或 NFS 路径做批量装机时把补丁包放一台内网机器上统一分发比一张张换光盘快得多。lslpp -l输出的状态列是COMMITTED才代表真正落地APPLIED说明只是打上了但没提交重启后有可能回退。3. 内核与 IO 参数成组下发limits、IOCP、AIO、VMO 的取值逻辑系统装完、能登录只是拿到了一张白纸。数据库要跑在上面、双机要切在上面默认参数基本都偏保守光maxuproc一个值就够让 oracle 在高峰期 fork 不出进程。这一章把手册里散在十几步的参数调整按作用域归成几组讲清楚每个值背后的依据以及改了之后靠什么确认。absolutely要强调一点这些参数不是抄一遍就完事的AIX 的参数分“立即生效”和“下次引导生效”两类改了不重启就等于没改改完不验证就等于不知道自己改没改。3.1 limits、maxuproc、maxpout 的边界先从用户级限制开始。手册给的方案是把/etc/security/limits里 default 段的软硬限制全部放开到-1unlimited# 改之前先留个后悔药 cp /etc/security/limits /etc/security/limits.bak # 编辑该文件default 段各项改为 -1 vi /etc/security/limits # core -1 # rss -1 # fsize -1 # data -1 # stack -1 # stack_hard -1 # cpu -1 # nofiles -1limits文件里每一项都分 soft 和 hard 两列用冒号隔开。-1表示 unlimited。core -1是为了让进程崩溃时能产出完整 core 文件配合后面要开的 fullcore 一起用fsize -1是为了不限制单文件大小oracle 数据文件、导出的 dmp 都可能超过默认的 2GBnofiles -1是让单进程能打开的文件描述符不受限这个值在数据库场景下非常关键。提示nofiles -1在部分 AIX 版本上会被内核悄悄截断成硬上限实践中更稳的做法是写一个明确的大值如 65536然后在应用侧用ulimit -n确认真的生效了。接着是系统级参数。这几个值靠chdev -l sys0改改的是 ODM 里的系统对象属性# 先看当前值别急着改 lsattr -El sys0 -a maxuproc -a maxpout -a minpout -a fullcore # 单进程可创建的最大进程数默认 128oracle HACMP 场景远不够 chdev -l sys0 -a maxuproc16384 # 页输出阻塞阈值单位为 4KB 页 chdev -l sys0 -a maxpout8192 -a minpout4096maxpout和minpout这两个参数控制的是文件系统在页输出page out压力下的阻塞行为当某个文件系统的待写页数超过maxpout时写进程被挂起降到minpout以下才唤醒。单位是 4KB 页所以maxpout8192约等于 32MBminpout4096约等于 16MB。这两个值的约束是minpout maxpout而且maxpout不能超过maxfree相关的内存阈值设得过大反倒会让系统在内存紧张时长时间卡在页回收上。手册取 8192/4096 是给数据库写密集场景留的余量如果机器内存不大比如只有 16GB这两个值要相应往下压。maxuproc16384是从默认 128 一口气拉上去的。oracle 一个实例几百个后台进程加上 HACMP 的 cluster 守护进程、监控脚本、运维登录会话128 这个默认值在压力测试阶段必然会撞墙表现是应用起不来、日志里报fork: not enough space之类。3.2 IOCP 与 fullcore异步 IO 和 core dump 的前置开关IOCP 全称 I/O Completion Port是异步 IO 的接口层。AIX 6.1 默认已经装了bos.iocp.rte这个包但端口对象的状态可能是 Defined 而不是 Available那样异步 IO 就走不起来。# 查看 IOCP 端口状态 lsdev -Cc iocp # 正常输出iocp0 Available I/O Completion Ports # 如果输出是 Defined需要拉起来 chdev -l iocp0 -a autoconfigavailable cfgmgr -l iocp0 # 再确认一次 lsdev -Cc iocpautoconfigavailable这个属性的意思是“设备在系统启动时自动进入可用状态”设成 available 之后cfgmgr会立即配置它不用等重启。用smitty iocp走菜单效果一样但命令行更快适合批量脚本。fullcore 是配套 core dump 用的开关它决定了进程崩溃时是只 dump 一小段还是把整个地址空间都写出来# 查看 fullcore 当前状态 lsattr -El sys0 -a fullcore # 没开的话打开它 chdev -l sys0 -a fullcoretrue这两件事要连着做limits里的core -1保证了不限 core 文件大小fullcore 保证了写的是完整内存镜像两者缺一出问题时拿到的 core 文件要么被截断要么不完整用dbx或者kdb分析时关键栈帧就丢了。血泪经验是——数据库进程半夜崩一次第二天想复盘结果 core 文件只有 200KB什么也看不出来只能等下一次崩。3.3 syncd、errorlog 与时区syncd是 AIX 的数据刷新守护进程负责周期性地把内存里的脏页刷到磁盘默认 60 秒刷一次。手册把这个值改成 10# 找到 syncd 的启动位置 grep -n syncd /sbin/rc.boot # 输出类似nohup /usr/sbin/syncd 10 /dev/null 21 # 编辑该行把 60 改成 10 vi /sbin/rc.boot改这个值的代价和收益要掂量清楚刷新频率提高掉电时丢失的数据窗口从 60 秒缩到 10 秒但磁盘写压力相应上升。数据库自己有一层 redo/checkpoint 机制通常不需要靠syncd来保数据安全把它压到 10 更多是给文件系统层面的元数据操作留冗余。如果没有明确的掉电窗口要求保持在 30 左右是更常见的选择。errorlog 默认只有 1MB这个容量在稳定运行几个月后会被大量无害的记录轮转掉真正出问题时反而找不到关键条目。手册把它调到 10MB# 改 error log 最大尺寸为 10MB10485760 字节 /usr/lib/errdemon -s 10485760 # 查看当前 error log 属性 /usr/lib/errdemon -l # 确认 errdemon 进程在跑 ps -ef | grep errdemon # 没跑的话手工拉起来 /usr/lib/errdemon时区设置要考虑接口兼容性手册要求用 POSIX 接口的时区类型东八区写法是# 设置为东八区 POSIX 时区 chtz BEIST-8 # 验证 date echo $TZBEIST-8这个写法比Asia/Shanghai更底层直接对应 POSIX 的 TZ 格式好处是不依赖系统的 zoneinfo 数据库坏处是不带夏令时信息——国内场景没有夏令时所以没影响。如果有跨时区节点两个节点必须设成同一个 TZ否则 HACMP 的事件时间戳会对不上日志排查时非常痛苦。3.4 网络、AIO、VM、HBA 参数成组下发这一组参数是给数据库和存储链路用的。改法有两种风格网络参数走noAIO 走ioo或chdev -l aio0VM 走vmoHBA 走chdev -l fscsiX/fcsX。手册是混着用的这里按类别理顺。网络参数一次下发注意-p是永久生效下次引导、-r是立即生效且永久# TCP 保活探测起始时间默认 144002 小时调到 30 分钟 no -p -o tcp_keepidle1800 # FIN_WAIT_2 状态超时默认 240调到 300 秒 no -p -o tcp_finwait2300 # UDP 发送/接收缓冲接收缓冲给得比发送大应对突发 no -p -o udp_sendspace65536 no -p -o udp_recvspace655360 # TCP 发送/接收缓冲262144 是数据库长连接常用档位 no -p -o tcp_sendspace262144 no -p -o tcp_recvspace262144 # 关闭延迟 ACK降低小包交互时延 no -p -o tcp_nodelayack1 # 关闭 PMTU 发现避免中间设备丢 ICMP 导致大包卡死 no -p -o tcp_pmtu_discover0 # socket 缓冲上限要大于上面各 send/recvspace 之和 no -p -o sb_max2097152 # 启用 RFC1323 窗口缩放与时间戳 no -p -o rfc13231 # 关闭 IP 源路由转发与重定向双机环境必须 no -p -o ipsendredirects0 no -p -o ipignoreredirects1 no -p -o ip6srcrouteforward0 # 清理半开连接防 SYN 泛洪 no -p -o clean_partial_conns1 # 立即生效的队列长度注意这里用的是 -r no -r -o ipqmaxlen512 # 临时端口范围避开常用服务端口 no -p -o tcp_ephemeral_low9000 no -p -o tcp_ephemeral_high65500 no -p -o udp_ephemeral_low9000 no -p -o udp_ephemeral_high65500sb_max这一项有个隐含约束它必须大于等于tcp_sendspace和tcp_recvspace也大于udp_sendspace和udp_recvspace。手册取 2MB比 256KB 的 TCP 缓冲大 8 倍留足了余量。如果哪天想把tcp_sendspace往上调sb_max必须同步跟上去否则调了也不生效no -o不报错但内核会忽略。AIO 参数# 内核 AIO 最大服务进程数AIX 6.1 用 ioo 接口 ioo -p -o aio_maxservers80 # 另一种等价写法走 aio0 设备属性-P 表示下次引导生效 chdev -l aio0 -a maxservers80 -P取值逻辑手册给了一条经验公式最大值为并行磁盘数的 10 倍且不超过 80最小值为最大值的一半。这里磁盘数包含 rootvg 盘、数据 VG 盘、多路径聚合后的逻辑盘。如果机器挂了 8 块盘80 就是上限如果只挂了 4 块理论上 40 就够但取 80 没坏处AIO 服务进程是按需创建的不会一上来就吃满。注意ioo和chdev -l aio0不要混用。两者改的是同一个底层参数但走不同接口先ioo -p再chdev -P最后lsattr看到的值可能跟你预期的不一致。选一种改完用ioo -a确认。VM 参数# 非计算性内存占比的上限AIX 6.1 TL 里这个参数已逐步废弃 vmo -p -o numperm_global0 # 文件系统缓存可占物理内存的上限百分比 vmo -p -o maxperm%90 # 下限百分比低于这个值开始回收文件缓存 vmo -p -o minperm%3 # 客户端文件缓存上限 vmo -p -o maxclient%90 # 严格模式开关0 表示允许软性突破 vmo -p -o strict_maxperm0 vmo -p -o strict_maxclient1 # 关闭按文件页重调 LRU让文件缓存优先被回收 vmo -p -o lru_file_repage0 # 页窃取算法切换为 1立即生效 vmo -r -o page_steal_method1这组值的核心目标是让文件系统缓存不要长期霸占内存、把数据库的共享内存挤到 swap 里去。maxperm%90minperm%3是一对上限高是为了让文件缓存能充分用起来下限低是为了在内存吃紧时果断回收。lru_file_repage0是 AIX 6.1 上被讨论最多的一个参数设成 0 之后文件页在 LRU 上的权重降低计算性内存数据库 SGA优先留在物理内存里。numperm_global这个参数如果在某些 TL 级别上返回“不支持”不用纠结说明该版本已经把它从可调列表里移除了跳过即可。HBA 卡参数# fscsi 层开启动态跟踪错误恢复策略改为快速失败 chdev -l fscsi0 -a dyntrkyes -a fc_err_recovfast_fail -P chdev -l fscsi1 -a dyntrkyes -a fc_err_recovfast_fail -P chdev -l fscsi2 -a dyntrkyes -a fc_err_recovfast_fail -P chdev -l fscsi3 -a dyntrkyes -a fc_err_recovfast_fail -P # fcs 层单卡并发命令数从默认 200 提到 500 chdev -l fcs0 -a num_cmd_elems500 -P chdev -l fcs1 -a num_cmd_elems500 -P chdev -l fcs2 -a num_cmd_elems500 -P chdev -l fcs3 -a num_cmd_elems500 -Pdyntrkyes开的是动态跟踪SAN 交换机做链路切换、或者多路径软件切换路径之后设备的目标地址会变开了这个属性 AIX 能自动跟上而不是报path failed。fc_err_recovfast_fail让 I/O 在链路异常时快速失败返回上层而不是卡在那里等超时——这对双机场景意义重大卡住的话 HACMP 的切换判断会被拖慢本来该 30 秒切完的变成 5 分钟。num_cmd_elems从默认 200 提到 500是给高并发数据库读写留队列深度。这个值不是越大越好它受 HBA 卡队列容量和交换机 buffering 限制超过 1024 在多数卡上会被截断。4. HACMP 6.1 双机从包裁剪到资源组切换的完整链路前面三章做完两台机器的单机底座就齐了剩下的工作是把它们拼成一个 cluster。HACMP 的配置复杂度不在软件本身而在顺序——SMIT 里那些菜单项是有依赖关系的cluster 名字没建好就加不了节点节点没加就加不了网络网络没通就配不了 IP 地址顺序乱了一步就得推倒重来。手册里把 HACMP 拆成了二十来步从安装包、建 cluster、加节点、加网络、加资源组、加 SVC IP、加应用脚本、加 VG一直到同步、双端启动、状态查看、切换测试。这一章按配置的依赖层级重新组织把每一层该做什么、坑在哪讲清楚。4.1 安装包裁剪与补丁为什么排除 cluster.hativoliHACMP 6.1 的安装介质里带了一堆包安装时不是全选。手册的要求很明确除了cluster.hativoli以外其它所有包都要装。HACMP 的包命名有规律cluster.adt是开发工具和示例脚本cluster.base是核心运行时cluster.cspoc是单点控制台cluster.es是扩展服务cluster.man是手册页cluster.msg是多语言消息cluster.hativoli是面向 Tivoli 管理框架的集成包。不装 Tivoli 就没必要装这个集成包——装了它反倒会引入一堆 Tivoli 相关的依赖在裸机环境下这些依赖不满足安装会失败或者装出一堆未提交的文件集。安装前先建光盘文件系统# 创建 CDROM 文件系统 smitty cdrfs # 选择 Add a CDROM File System # DEVICE name: cd0 # MOUNT POINT: /cdrom # Mount AUTOMATICALLY at system restart? yes/cdrom是通用约定也可以换成别的路径但两个节点要用同一个后面的脚本里如果写死了路径改起来麻烦。设成自动挂载是为了重启后光盘还在省得每次手工mount。然后是装软件# 走通用安装菜单 smitty installp # 选择 Install and Update from ALL Available Software # INPUT device / directory for software: /dev/cd0 # SOFTWARE to install: 用 F4 列出全选后手工去掉 cluster.hativoli 相关项 # ACCEPT new license agreements?: yes # Preview only?: no装完确认一下关键文件集# 逐项检查 HACMP 核心文件集是否为 COMMITTED lslpp -l cluster.es.server.rte cluster.es.client.rte cluster.base.client.rte cluster.base.server.rte # 装完先别急着配把补丁打上 # 补丁包同样走 smitty installp介质可以是光盘也可以是本地目录 oslevel -s补丁这块有个细节手册没强调HACMP 的补丁和 AIX 的 TL/SP 是绑定的。AIX 打到6100-07-06-1241HACMP 的补丁版本也必须对应这个 TL 级别否则smitty clverify那一步会报一堆文件集版本不匹配。先oslevel -s确认系统版本再去查对应 HACMP 的补丁矩阵比反过来做省时间。4.2 cluster、node、network 的添加顺序进入 HACMP 配置菜单smitty hacmp→Extended Configuration→Extended Topology Configuration。这一层的顺序不能乱标准路径是第一步添加 cluster 名字。Extended Topology Configuration Add a Cluster Definition Cluster Name: [oradw_cluster] Cluster ID: [自动生成或留空]cluster 名字在同一个网络广播域里必须唯一。实践中名字里带上业务标识比较实用比如oradw_cluster、rmansq_cluster出问题时一眼能对上。第二步添加 cluster 的主机节点。每个节点要填主机名、通信接口、spoke 节点标记。这里的主机名必须是/etc/hosts里能解析到的而且两个节点的/etc/hosts内容要一致。# 配之前先确认两边 hosts 一致 cat /etc/hosts # 输出里应该包含 # 192.168.10.11 node1 node1_boot # 192.168.10.12 node2 node2_boot # 192.168.10.21 node1_svc # 192.168.10.22 node2_svc第三步添加基于 IP 的网络。这是节点之间、节点与客户端通信的主通道要填网络名、网络类型ether、网络接口。第四步添加基于非 IP 的网络也就是串口心跳。这一步在虚拟化环境里最容易被跳过原因是没接串口线。但在物理机上串口心跳是 HACMP 判断对端存活的最后一个保险IP 网络全断的情况下只有它能防止脑裂。# 配之前先确认两边串口设备都在 lsdev -Cc tty # 常见输出tty0 Available Asynchronous Terminal第五步添加 IP 地址。这一步把第一步建的网络和第二步建的主机关联起来给每个节点的 boot 网卡分配地址。第六步添加串口设备。把第四步建的非 IP 网络和具体的 tty 设备绑起来。提示这六步做完先在两个节点上各跑一次cllsif和cltopinfo确认拓扑一致再往下走。如果两边看到的接口列表不一样说明有一步在某一边漏了往下配资源组会一直报错。4.3 资源组、SVC IP、应用脚本与并发 VG拓扑配完进入资源配置。smitty hacmp→Extended Configuration→Extended Resource Configuration。先建资源组Add a Resource Group Resource Group Name: [oradw_rg] Node Relationship: [Primary / Standby] Participating Node Names: [node1 node2] Startup Policy: [Online On Home Node Only] Fallover Policy: [Fallover To Next Priority Node In The List] Fallback Policy: [Fallback To Higher Priority Node]四个策略字段决定了资源组的行为启动时只在本节点起、故障时按优先级顺序往下一个节点切、高优先级节点恢复后是否切回。Online On Home Node Only是最常用的配置Online On All Available Nodes只适用于并发 VG 场景。然后加 SVC IPAdd a Service IP Label / Address Service IP Label: [oradw_svc] Network Name: [ether_net] IP Address: [192.168.10.20] Netmask: [255.255.255.0]SVC IP 是客户端连进来用的浮动地址两个节点上都配成 alias 形式谁起资源组谁持有。这个 IP 不能在 boot 网卡上静态配置否则切换时会出现地址冲突。接着加应用脚本。HACMP 通过 start/stop 脚本来拉起和停止业务脚本要求放在固定目录、属主 root、权限 755# 创建应用脚本目录与启停脚本 mkdir -p /usr/sbin/cluster/applications cat /usr/sbin/cluster/applications/oradw_start.sh EOF #!/bin/ksh # 由 HACMP 在资源组 online 时调用 # 参数 $1 为资源组名日志写到固定位置便于排查 LOGF/var/hacmp/log/oradw_start.log echo $(date) start rg$1 $LOGF su - oracle -c lsnrctl start $LOGF 21 su - oracle -c sqlplus / as sysdba /home/oracle/start_db.sql $LOGF 21 exit 0 EOF cat /usr/sbin/cluster/applications/oradw_stop.sh EOF #!/bin/ksh # 由 HACMP 在资源组 offline 时调用 LOGF/var/hacmp/log/oradw_stop.log echo $(date) stop rg$1 $LOGF su - oracle -c sqlplus / as sysdba /home/oracle/stop_db.sql $LOGF 21 su - oracle -c lsnrctl stop $LOGF 21 exit 0 EOF chmod 755 /usr/sbin/cluster/applications/oradw_*.sh chown root:system /usr/sbin/cluster/applications/oradw_*.sh脚本里的exit 0必须显式写上HACMP 靠返回码判断脚本成功与否。缺了这行脚本最后一条命令失败就会被当成整个 start 失败资源组起不来但日志里看不出原因。日志路径用绝对路径写死也是为此——相对路径在 HACMP 的调用环境下会落到/下很难找。再往资源组里加卷组。手册里规划了四个 VGsqdbvg、hddbvg、rmansqvg、rmanhdvg分别存数据库数据、RMAN 备份。VG 要设成并发concurrent模式才能被两个节点同时 varyon# VG 必须建在共享盘上且两个节点都能看到 lsvg -o lspv | grep -E hdisk[2-9]|hdisk1[0-9] # 改成并发 VG需要在 VG 未 varyon 时做 chvg -C sqdbvg chvg -C hddbvg chvg -C rmansqvg chvg -C rmanhdvg # 确认并发能力位已置上 lsvg sqdbvgchvg -C这个操作是不可逆的——并发 VG 改回普通 VG 需要重建。改之前确认业务规划里这个 VG 真的要被两个节点同时访问如果只是主备切换、同一时刻只有一个节点访问设成普通 VG 反而更简单。最后把 VG 加到资源组里Change/Show Resources for a Resource Group Volume Groups: [sqdbvg hddbvg rmansqvg rmanhdvg] Application Servers: [oradw_app]应用服务器那一项是在前面配过的应用脚本的封装名要先把脚本注册成 Application Server才能在资源组里选到它。4.4 同步、启动与切换测试的判读配置信息是分别写在两个节点的 ODM 里的同步这一步把它们对齐任何一边改了配置没同步cluster 起来之后两边对资源归属的判断就不一致。# 同步 cluster 拓扑与资源定义两侧都要执行 smitty clsync # 或者命令行 /usr/es/sbin/cluster/utilities/clrsnc # 同步后会生成校验报告重点看 VM 和 HACMP 部分有没有 ERROR /usr/es/sbin/cluster/utilities/clverify同步成功的标志是两边都提示Verification has completed并且没有新增的错误条目。如果报文件集版本不匹配说明补丁没对齐回去补报网络接口不一致说明有一边的 boot IP 没配。启动 cluster 有顺序要求先在主节点起确认状态正常再在备节点起。# 主节点启动 smitty clstart # 或命令行 /usr/es/sbin/cluster/etc/rc.cluster -boot # 启动后看 cluster 状态 lssrc -ls clstrmgrES # 输出里看到 Current state: STABLE 才算真正稳定 # 查看资源组归属 /usr/es/sbin/cluster/utilities/clshowres # 输出里 oradw_rg 的 Node 应该是 node1lssrc -ls clstrmgrES的输出里有一行Current state常见的几个状态值含义不同状态值含义处理STABLE稳定运行正常INITIALIZING正在初始化等超过 10 分钟要查日志STARTING资源组正在起观察应用脚本日志STOPPING资源组正在停观察应用脚本日志UNSTABLE状态不稳定查/var/hacmp/log/clstrmgr.debug切换测试放到最后做而且要做两种一种是手工优雅切换一种是模拟主机宕机。# 方式一优雅切换在当前持有资源组的节点上执行 smitty clstop # 选择 Move Resource Groups让资源组正常 stop 后飘到对端 # 方式二模拟断网把当前节点的 boot 网卡 down 掉 ifconfig en0 down # 观察对端是否在超时后接管再恢复 ifconfig en0 up判断切换成功的标准有三条对端clshowres显示资源组归属已经变了、SVC IP 在对端能 ping 通、应用脚本日志里有两端的时间戳对应记录。三条缺一条都算切换不完整最常见的是 SVC IP 飘过去了但 oracle 没起来原因通常是应用脚本里的 su 环境变量不对、或者 oracle 的 listener 配置里绑了固定 IP 而不是 SVC IP。5. 常见问题排查五个让系统半夜出事、让 cluster 起不来的坑参数和配置抄完只是开始真正花时间的是出问题之后怎么定位。下面这五条是在这套环境里反复撞过的按“现象 → 原因 → 解决”组织都是能直接对上号的。5.1 镜像之后重启卡在 0551 或直接进不了系统现象rootvg 镜像做完了lsvg rootvg显示两块盘都是 active重启后画面停在0551或者干脆找不到引导设备。原因mirrorvg只负责把逻辑卷内容在两块盘上做同步它不会自动重写引导镜像。原来hdisk0上的 boot image 是装系统时写的hdisk1上根本没有固件尝试从hdisk1引导时找不到可执行的引导块。解决镜像完成后必须对两块盘分别执行bosboot并且更新引导顺序。# 对两块物理盘分别重写 boot image bosboot -ad /dev/hdisk0 bosboot -ad /dev/hdisk1 # 更新引导列表把光驱放前面、两块盘跟上 bootlist -m normal cd0 hdisk0 hdisk1 # 确认引导列表 bootlist -m normal -obosboot -ad的-a表示写入引导记录、-d后面跟目标设备。这两条命令不执行镜像等于只做了一半血泪经验是每次做完镜像先跑bosboot再重启绝不图省事省这一步。5.2 AIO 参数改了但 lsattr 看到的还是旧值现象按手册执行了ioo -p -o aio_maxservers80重启之后ioo -a | grep aio_maxservers显示还是 40 或者别的旧值。原因AIO 参数在 AIX 6.1 有两条修改路径——ioo改的是内核 tunablechdev -l aio0 -a maxserversxx改的是设备属性两者在引导时谁覆盖谁跟 TL 级别有关。另外ioo -p只是写进了/etc/tunables/nextboot如果没重启或者重启时该文件被别的脚本覆盖值就不会生效。解决选定一条路径改完显式验证两处。# 用 ioo 改然后同时验证内核层和设备层 ioo -p -o aio_maxservers80 ioo -a | grep aio_maxservers # 检查 nextboot 文件里是否真的写进去了 grep -i aio /etc/tunables/nextboot # 如果走设备路径用 -P 而不是 -T避免立即生效和永久生效分离 chdev -l aio0 -a maxservers80 -P lsattr -El aio0 -a maxservers如果两处值不一致以设备属性为准把ioo设置的那一路清掉不要两边同时改。5.3 HACMP 切换时应用脚本没执行资源组却显示 online现象手工切资源组clshowres显示资源组已经在对端 onlineSVC IP 也能 ping 通但数据库没起来应用脚本日志是空的。原因脚本权限或属主不对。HACMP 调用应用脚本时用的是 root 身份、在受限环境下执行如果脚本属主不是 root、权限不是 755、或者脚本首行 shebang 指向的解释器路径不对调用会静默失败——HACMP 不把这个当致命错误资源组照样标记 online。解决逐个检查脚本的三个属性并在脚本里加上首行日志确认脚本真的被执行到了。# 三件事一起查属主、权限、shebang ls -l /usr/sbin/cluster/applications/ head -1 /usr/sbin/cluster/applications/oradw_start.sh # 属主 root、权限 755、shebang 指向 /bin/ksh 或 /bin/sh chown root:system /usr/sbin/cluster/applications/*.sh chmod 755 /usr/sbin/cluster/applications/*.sh # 手工模拟 HACMP 调用确认脚本能跑通 /usr/sbin/cluster/applications/oradw_start.sh oradw_rg cat /var/hacmp/log/oradw_start.log手工跑能过、HACMP 调不起来多半是环境变量差异脚本里所有路径都写绝对路径su - oracle -c里的-不要省。5.4 串口心跳网络状态一直是 DOWN现象cluster 配完了IP 网络状态是 UP但基于非 IP 的网络串口一直是 DOWNcllsif里看到对应接口状态异常。原因串口线接反了A 机的 tty0 接 B 机的 tty1 但配置里全写成了 tty0、或者串口设备在 ODM 里的状态是 Defined 而不是 Available、或者两边波特率不一致。解决先确认物理层再确认设备状态最后确认配置一致。# 两边都确认串口设备状态是 Available lsdev -Cc tty # 如果不是配置一下 cfgmgr # 检查两边 cluster 配置里的串口设备名是否对应 /usr/es/sbin/cluster/utilities/cllsif # 用一条简单命令验证物理链路是否通 # 在 A 机往串口写B 机读能收到说明线是通的 stty -a /dev/tty0物理链路通、设备 Available、配置里设备名能对上三个条件同时满足非 IP 网络才会是 UP。5.5 maxpout/minpout 设完系统反而更卡现象按手册把maxpout8192、minpout4096设上去数据库批处理跑起来后系统出现明显的周期性卡顿vmstat里po列有尖峰。原因这两个值的量纲是 4KB 页8192 页约等于 32MB 的待写页。在内存不大的机器上比如 16GB页回收的触发阈值被推得太高内核在大量页堆积之后才启动回收回收时一次性刷盘的量很大表现就是周期性卡。解决按物理内存的 1/8 到 1/4 估算合理值把这两个值往下压同时确认maxfree跟它们的关系。# 先看当前内存和 maxfree lsattr -El sys0 -a memory vmo -a | grep -E maxfree|minfree # 内存 16GB 场景下调低阈值 chdev -l sys0 -a maxpout2048 -a minpout1024 # 确认改动 lsattr -El sys0 -a maxpout -a minpout # 观察一段时间 vmstat 5 10maxpout必须小于maxfreefree list 上限单位同样是页否则页回收永远触发不了这个约束在手册里没写但违反了就是上面这个症状。6. 镜像、dump 与交付前自检把手册变成可复用的清单前面五章走完两台机器理论上已经是一套能跑的双机了。但从“能跑”到“敢交付”之间还有一段剩下的活儿是镜像、dump、autorestart 这几件防护性配置以及一份验收清单。这一段最容易被人跳过也最容易在出事后被追责。6.1 rootvg 镜像与引导顺序镜像之前先重启一次让系统在一个干净的状态下做镜像避免有进程正在写盘导致镜像进度卡在 STALE 上。然后把第二块盘扩进 rootvg# 把 hdisk1 扩进 rootvg extendvg rootvg hdisk1 # 执行镜像 mirrorvg rootvg # 观察镜像进度STALE 的 LP 数会逐步减少直到消失 lsvg rootvg | grep STALE lsvg -l rootvg | grep -v SYNC # 镜像完成后重写两块盘的 boot image bosboot -ad /dev/hdisk0 bosboot -ad /dev/hdisk1 # 更新引导顺序并重启验证 bootlist -m normal cd0 hdisk0 hdisk1 shutdown -Frmirrorvg在 AIX 6.1 上默认会做syncvg但大容量 VG 的同步可能持续几十分钟lsvg rootvg | grep STALE是唯一可靠的进度判据STALE 计数归零才算完成。跳过bosboot的后果在第 5 章第 1 条里已经讲过这里再强调一次镜像和 bosboot 是绑定的两个动作不能只做前一个。6.2 dump 与 autorestart出事之后能不能复盘dump 是系统崩溃瞬间把内存镜像写到磁盘的机制。默认配置下 dump 设备可能只有几百 MB而一台 16GB 内存的机器完整 dump 需要十几 GB结果是 dump 写到一半空间不够、直接放弃出事之后什么也拿不到。# 估算当前配置下 dump 需要多大空间 sysdumpdev -e # 查看 dump 设备与状态 sysdumpdev -l # 增加 dump 逻辑卷大小走 smitty lv选中 dumplv 扩容 smitty lv # 确认 always allow dump 已设为 TRUE smitty sysdumpdev # PRIMARY dump device: /dev/lg_dumplv # SECONDARY dump device: /dev/sysdumpnull # Always allow dump: TRUE # Dump compression: OFFsysdumpdev -e输出的估算值是压缩后的字节数如果开了压缩实际需要的 LV 空间可以小一些。但压缩会拖慢 dump 写入速度内存大的机器上关掉压缩、把 dumplv 直接扩到内存的 1.1 倍是更省心的做法。autorestart 是配套的宕机之后系统自动重启把业务尽快拉回来同时也保证了 dump 写入完成之后机器不会一直停在固件界面等人来按电源。# 开启崩溃后自动重启 chdev -l sys0 -a autorestarttrue # 验证 lsattr -El sys0 -a autorestart注意autorestarttrue在双机环境下要谨慎。主节点崩溃后自动重启如果重启速度快过 HACMP 的接管判断可能出现两个节点同时认为自己是主的情况。实践中通常把autorestart保留但在 HACMP 侧把Failure Detection Time调短让接管先于重启完成。6.3 交付前自检表最后这一步是把手册里的所有检查点汇总成一张表交付前逐条过一遍。这张表比任何文档都好用——它不解释原理只问“是不是”。检查项命令期望结果系统版本oslevel -s6100-07-06-1241关键 bundlelslpp -l bos.adt.base bos.adt.lib bos.adt.prof全部 COMMITTEDSSH 服务lssrc -a | grep sshdactiveIOCP 端口lsdev -Cc iocpAvailablefullcorelsattr -El sys0 -a fullcoretruemaxuproclsattr -El sys0 -a maxuproc16384maxpout/minpoutlsattr -El sys0 -a maxpout -a minpout按内存调整后的值AIO 服务数ioo -a | grep aio_maxservers80VM 关键参数vmo -a | grep -E maxpermminpermHBA 参数lsattr -El fscsi0 -a dyntrk -a fc_err_recov本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →