简介:《IBM P740小机安装配置手册》面向需要部署 IBM P740 小型机的系统管理员与运维工程师,聚焦 AIX 操作系统安装、参数调优及 HACMP 高可用集群配置,适合具备一定 UNIX 基础、希望按项目流程落地实施的读者。压缩包仅含 1 个 doc 文档,体积约 4.5MB,以单一手册形式集中呈现完整操作脉络。已有 1267 人学习,说明其在同类实施场景中具有一定参考价值。内容从操作系统安装、bundle 与补丁包部署讲起,覆盖 limit、IOCP、fullcore、maxpout/minpout、maxuproc、syncd、时区与 error log 等系统参数设置,并延伸到网络、AIO、VM、HBA 卡配置、语言包、Oracle 文件系统、系统镜像、SWAP、dump 及 HACMP 安装与集群资源组配置,便于读者按章节对照完成一台小机从裸机到高可用环境的配置与核查。
1. P740 双机安装配置中容易出问题的地方:AIX 和 HACMP 的实施顺序比命令本身更要紧
凌晨两点,一套刚上架的双机环境里,主机已上电,系统已装完,HACMP 也同步过了,但资源组就是无法切换过去。查到最后发现,两台机器上的串口心跳没有同步,cluster 互相不认。这类故障的根源很少是某条命令写错,大多数情况下是 IBM AIX HACMP 的安装与配置顺序错了:先装什么、后调什么、哪些参数必须改完重启才生效,弄错一步就得推倒重来。这份 P740 小机的安装配置手册按现场实际顺序组织:从 AIX 6100-07 的装机介质怎么选、bundle 和 ifix 怎么补,到 limits、IOCP、AIO、VM 这些内核参数怎么调,再到 PowerPath 认盘、rootvg 镜像、HACMP 资源组和切换测试。它适合手里已经有机器、要按步骤交付的人,也适合装过几次但总在切换那步翻车的人。
2. 系统底座:AIX 6100-07 从光盘到 ifix 的落地顺序
2.1 SMS 菜单和安装界面上的关键选择
装机这一步看起来最没技术含量,实际三个选择点决定了后面所有工作的起点。机器上电后前面板液晶屏会走硬件自检,等出现01 N V=F字样时按一下白色按钮,同时把第一张系统盘推进光驱;听到滴声、屏幕变白之后再按2进管理菜单,输入提示的密码,把启动顺序改成光驱优先。这三步的顺序不能颠倒,先按键后放盘或者反过来,都可能让机器直接跳过光驱进入原来的系统。
从光驱引导起来之后,第一屏是 console 选择,选本地主控台;接着是安装语言,选 English。这里有一个容易被忽略的细节:语言只影响安装过程界面,不影响装完之后系统的 locale,中文语言包要单独装,放在后面第 2.4 节处理。进到主菜单后选第 2 项修改安装设置,而不是直接选第 1 项开始安装,因为默认设置里的安装方法和目标盘不一定是你要的。
安装方法必须选New and Complete Overwrite,也就是全新完全覆盖。另外两个选项Preservation Install和Migration Install在装生产机的场景里基本用不上:前者会覆盖/usr、/var、/tmp、/四个文件系统但保留其他数据,后者是升级基础操作系统,只有在保留原有应用配置做版本升级时才考虑。新机器到手直接覆盖安装,避免历史残留的 ODM 库把后面 HACMP 的配置带偏。
| 安装界面选项 | 取值 | 说明 |
|---|---|---|
| Method of Installation | New and Complete Overwrite | 全新覆盖,磁盘上原有数据全部丢弃 |
| Disk Where You Want to Install | hdisk0 | 系统盘,另一块盘留作镜像 |
| Cultural Convention | English (United States) | 影响安装期界面 |
| Install Trusted Computing Base | no | 不启用 TCB,避免后期改认证配置受限 |
目标盘只选 hdisk0,选完按 0 继续,回到汇总界面再按 0 开始装 BOS。安装过程大约半小时到一小时,期间不要动光驱。装完自动重启进入 Configuration Assistant,这里做两件事就够了:给 root 设密码,然后点Exit the Configuration Assistant,在下一个界面选Finish now, and do not start Configuration Assistant when restarting the operating system。配置助手如果留着开机自启,后面 HACMP 节点重启时会弹出来卡住启动流程,这是个很容易忽略的问题。
2.2 server 和 app-dev 两个 bundle 的安装与校验
系统装完只是裸的 BOS,Oracle 和 HACMP 需要的一大堆库文件都在 bundle 里。手册里明确要求必须装两个:server和app-dev。用显示器装的机器还要补cdc(CDE 图形环境),用串口装的机器不需要,因为串口本来就没有图形界面。这个区别如果不注意,串口装机后会以为系统坏了——实际上只是少装了一个 bundle。
# 图形方式安装 bundle,进入后选 Install Software smitty installp # 装完后按包名逐个确认,任何一个 Missing 都算没装全 lslpp -L bos.adt.base bos.adt.lib bos.adt.prof \ bos.adt.syscalls bos.net.tcp.server bos.perf.toolssmitty installp进去之后走的是软件安装主菜单,选Install Software从所有可用介质安装,再把ACCEPT new software license agreements设为 yes,否则会在许可确认处反复退回。命令行方式用installp -acgXd /dev/cd0 all也可以,但现场我更倾向 smit,因为它的输出会明确标出哪些包 skipped、哪些 failed,比一屏滚过去的命令行好查。
bundle 装完还差三个零散的东西:bos.cifs_fs、bos.data,以及 openssl 和 openssh 系列。AIX 默认只起了 telnet,远程管理走明文,生产环境不能这么跑。openssl 和 openssh 的安装文件就在 AIX 6.1 的系统盘里,不用另外找介质。
# 按前缀批量确认 openssl / openssh 安装情况 lslpp -l | grep -Ei 'openssh|openssl' # 装指定包 installp -acgXd /dev/cd0 bos.cifs_fs.rte installp -acgXd /dev/cd0 bos.data installp -acgXd /dev/cd0 openssh.base.server openssh.base.client-a表示接受许可,-c表示提交,-g表示忽略依赖检查的强制安装(一般不用,除非明确知道缺的是哪个前置包),-X表示扩展文件系统空间,-d指定设备。装完之后启动 sshd 再验证一遍端口,比看包列表更靠谱:lssrc -s sshd看状态,startsrc -s sshd起服务,然后从另一台机器ssh过来确认密钥交换正常。
2.3 oslevel -s 和 emgr:补丁打到哪个级别才算收工
这套环境的目标版本是6100-07-06-1241,也就是 AIX 6.1 TL7 加 SP6。系统盘装完通常停在6100-07-04这种中间状态,差的这几级就靠 ifix 补上去。判断当前级别只看一条命令:
# 查看当前 TL/SP 级别与 build 日期 oslevel -s # 目标输出:6100-07-06-1241 # 如果显示 6100-07-04 或更低,说明 SP 没打全 oslevel -r instfix -i | grep -i SPoslevel -s给出的是四位式版本号,格式为6100-TL-SP-YYYY;oslevel -r只到 TL 级别,粒度更粗。两个命令对照着看,能快速判断是 TL 没上还是 SP 没上。这一步必须做完再往下走,因为后面装的 HACMP 6.1 对 TL 级别有强依赖,TL 不够的机器上装 HACMP,会在安装后期报一堆找不到符号的错,排查起来非常耗时。
ifix 的安装用emgr,不是installp。ifix 是临时补丁,不进lslpp的常规列表,只由emgr管理,这一点经常让人误以为补丁没装上。
# 确认 ifix 文件在当前目录 ls -l IV30896m6a.130214.epkg.Z IV32377s6a.130129.epkg.Z # 逐个安装,顺序不要反 emgr -e IV30896m6a.130214.epkg.Z emgr -e IV32377s6a.130129.epkg.Z # 安装完查看已挂载的 ifix 列表 emgr -lemgr -e的-e是紧急修复包安装参数,执行完最后一行会打印Return Status: SUCCESS,只要不是这个字样就停下来查日志,日志在/var/adm/ras/emgr.log。注意 ifix 是有顺序的,两个包如果存在依赖关系,反着装会报前置补丁缺失;按手册给的顺序来,别自己调换。
2.4 语言包与收尾验证
中文语言包不是必须项,但如果交付方要求系统里能显示中文,就得装。走smitty的System Environments→Manage Language Environment→Add Additional Language Environments,在 Cultural Convention 和 Language Translation 两栏里都选[Zh-CN] UTF-8加[Zh-CN] GB,两组都装上,因为有些老应用取的是 GB 编码,只装 UTF-8 会显示乱码。
装完语言包和补丁,做一次整体核对再交付:
# 一次性核对:系统级别、已装 bundle、关键服务、语言环境 oslevel -s lslpp -L bos.adt.base bos.perf.tools openssh.base.server locale -a | grep -i zh lssrc -s sshd这四条覆盖了版本、依赖、远程管理和语言四个维度,全部符合预期再进参数调整阶段。我见过不止一次因为跳过这轮核对,到 HACMP 同步阶段才发现两台机器补丁级别不一致,最后只能重装其中一台。
3. 系统参数:limit、IOCP、AIO、VM 与网络的一串 chdev
3.1 limits 改 unlimited 之前先备份
/etc/security/limits控制的是每个用户能拿到的资源上限,Oracle 这类进程在启动阶段会申请很大的栈和文件句柄,默认值基本不够。手册的做法是把核心参数全部拉到-1,也就是 unlimited。
# 改之前一定先备份,改坏了还能回滚 cp /etc/security/limits /etc/security/limits.bak # 直接编辑,找到 default 段和需要放开的具体用户段 vi /etc/security/limits需要改成-1的字段有八个:core、rss、fsize、data、stack、stack_hard、cpu、nofiles。这里最容易出错的是stack和stack_hard必须成对改:只改 soft 不改 hard,用户态ulimit -s看到的还是旧值,程序申请大栈时照样失败。core设为-1是配合后面第 4.4 节的 dump 设置,程序崩了能留下完整的 core 文件。
改完不是立刻对所有会话生效,已经登录的 shell 还是老值。验证方式是重新登录一个新会话,然后:
# 确认当前会话的软硬限制 ulimit -a # 重点看 stack、nofiles、core 三项是否已是 unlimited如果改了/etc/security/limits但ulimit -a没变化,八成是改错了段落——文件里按用户分段,default:段只影响新用户,已有用户要单独加一段或者用chuser命令改。这个改动建议在装 Oracle 之前完成,装完再改需要重启实例才认。
3.2 IOCP 从 Defined 拉到 Available
IOCP 是 I/O 完成端口,异步 I/O 的事件通知走这条通道。Oracle 在 AIX 上跑得动跑不动,这一项是硬指标。AIX 6.1 默认已经装了bos.iocp.rte,但装归装,端口状态可能是 Defined 而不是 Available。
# 查看 IOCP 端口状态 lsdev -Cc iocp # 正常输出:iocp0 Available I/O Completion Ports # 如果是 Defined,用命令拉起来 chdev -l iocp0 -a autoconfig=available cfgmgr -l iocp0 # 或者走 smit:smitty iocp -> Change/Show Characteristics # 把 autoconfig 改成 availablechdev只是改了 ODM 里的属性,cfgmgr才是真正让设备配置生效的动作,两条命令缺一不可。只跑chdev不跑cfgmgr,lsdev还会显示 Defined,很多人卡在这里反复执行同一条命令。如果lsdev -Cc iocp压根没有输出,说明bos.iocp.rte没装,先回第 2.2 节把包补上。
3.3 sys0 上的 fullcore、pout 与 maxuproc
sys0是系统伪设备,一批全局参数都挂在它下面。查看全部属性用lsattr -El sys0,输出很长,实际要关注的就四个。
# 查看 fullcore 是否开启,默认是 false lsattr -El sys0 -a fullcore # 打开 fullcore,进程崩溃时生成完整 core 而不是截断的 chdev -l sys0 -a fullcore=true # 调整 pout 参数,控制文件系统 I/O 拥塞时的行为 chdev -l sys0 -a maxpout=8192 -a minpout=4096 # 调整最大进程数,默认 1024 对数据库实例不够 chdev -l sys0 -a maxuproc=16384 # 崩溃后自动重启,双机环境必须打开 chdev -l sys0 -a autorestart=truemaxpout和minpout是一对:当某个文件系统上等待 I/O 的页数超过maxpout,进程会被挂起;降到minpout以下再唤醒。手册给的是 8192 和 4096,两者保持 2:1 的关系,这个比例在数据库负载下比较稳。如果设成一样大,会出现进程频繁挂起又唤醒的抖动。
maxuproc改完立即生效,但要注意它限制的是全系统进程总数,不是单用户。双机切换时应用会在一台机器上起全套进程,16384 是给这个峰值留的余量,设太小会在切换瞬间报fork: not enough space,报错信息还看不出是进程数问题。
fullcore和autorestart的验证方式都是lsattr -El sys0 | grep -E 'fullcore|autorestart',看第二列是不是true。autorestart这一项如果关着,机器 panic 之后就停在系统维护界面等人敲命令,双机的心跳超时后虽然会切,但故障机不会自己回来,等于白白损失一个节点。
3.4 syncd 与系统时区
syncd是内存脏页回写磁盘的守护进程,默认每 60 秒刷一次。手册要求改成 10 秒,目的是缩短掉电时丢数据的窗口。这个参数不在smit里,得直接改启动脚本。
# 编辑启动脚本,找到 syncd 那一行 vi /sbin/rc.boot # 原文形如: # nohup /usr/sbin/syncd 60 > /dev/null 2>&1 & # 改成: # nohup /usr/sbin/syncd 10 > /dev/null 2>&1 &改完重启生效,或者手工kill掉老进程再用新参数起一个。注意这个值不是越小越好,刷得太频繁会带来额外的 I/O 开销,10 秒是数据库场景下比较常见的折中值。
时区用chtz设置,手册要求用 POSIX 格式。东八区对应的是:
# 设置时区,BEIST-8 是 POSIX 格式的东八区写法 chtz BEIST-8 # 验证 date echo $TZchtz会同时改/etc/environment里的TZ变量和系统时钟的换算基准。改完date显示的时间应该和实际时间一致;如果差八小时,说明只改了变量没重启 cron 或者会话没退,重新登录再看。
3.5 AIO 与 VM:影响数据库实例启动的两组参数
AIO 是异步 I/O,只对文件系统生效,裸设备不走这条路。并行磁盘数决定了aio_maxservers的上限,经验规则是最大值取并行磁盘数的 10 倍、且不超过 80,最小值取最大值的一半。
# 查看当前 AIO 设置 ioo -l | grep aio # 设置为 80,-p 表示永久生效(下次重启后仍然有效) ioo -p -o aio_maxservers=80 # 验证 ioo -o aio_maxserversioo的-p是永久,-T是立即生效但重启丢失,-r是重启后生效。手册里用-p是为了保证重启后参数不丢,代价是当次不生效——如果你急着验证效果,得-T -p一起给,两个标志可以叠加。
VM 参数控制的是内存页的替换策略,这一组参数配合不好,Oracle 的 SGA 会被系统换出去,表现为实例莫名其妙变慢。
# 按手册值逐条设置,注意每条独立执行 vmo -p -o numperm_global=0 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 # page_steal_method 需要 -r,重启后生效 vmo -r -o page_steal_method=1maxperm%设到 90、minperm%压到 3,是为了让文件缓存尽量占内存、同时保证计算型页不会被过早换出。lru_file_repage=0是关键一条:它告诉系统在回收页时优先动文件缓存页,而不是动进程的匿名页,数据库场景下这一项不改,SGA 被换出去的概率明显上升。page_steal_method=1切到基于 LRU 的页窃取算法,需要重启,别指望当场生效。
3.6 no 网络参数与 fscsi 队列深度
网络参数一次性下发,用no -p保证永久。这批值主要围绕三件事:连接保持时间、缓冲区大小、端口随机范围。
# 连接保持与半关闭回收 no -p -o tcp_keepidle=1800 no -p -o tcp_finwait2=300 no -p -o tcp_tcpsecure=5 no -p -o clean_partial_conns=1 # 收发缓冲区,数据库节点之间传大量数据 no -p -o tcp_sendspace=262144 no -p -o tcp_recvspace=262144 no -p -o udp_sendspace=65536 no -p -o udp_recvspace=655360 no -p -o sb_max=2097152 # 小包与路径 MTU no -p -o tcp_nodelayack=1 no -p -o tcp_nagle_limit=1 no -p -o tcp_pmtu_discover=0 # 重定向与源路由,安全加固向 no -p -o ipsendredirects=0 no -p -o ipignoreredirects=1 no -p -o ip6srcrouteforward=0 # 随机端口范围,避开 Oracle 监听常用段 no -p -o tcp_ephemeral_low=9000 no -p -o tcp_ephemeral_high=65500 # 队列长度需要 -r,重启生效 no -r -o ipqmaxlen=512sb_max是套接字缓冲区的总上限,必须大于等于tcp_sendspace和tcp_recvspace的两倍,设小了前面的缓冲区参数会被自动截断,而且不会报错,只是性能上不去。tcp_ephemeral_low从 9000 起步,是为了把 1024 到 9000 这段让给数据库监听和应用固定端口,避免连接建立时端口冲突。
HBA 卡参数在存储侧,改完要重启。
# 先看当前值,确认 fscsi 和 fcs 设备号 lsdev -Cc adapter | grep -E '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 # 队列深度 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 -Pdyntrk=yes让链路在存储端换了端口后能自动重新识别目标,不开启的话阵列侧做一次控制器切换,主机这边就得手工重新扫描设备。fc_err_recov=fast_fail让 I/O 在链路异常时快速失败转交给多路径软件,而不是原地等超时,这对双机切换的响应时间影响很大。num_cmd_elems=500是单卡并发命令数,配合后面的 PowerPath 用,设太大反而会在拥塞时堆积。
4. 存储与 HACMP:从 PowerPath 认盘到资源组切换的完整链路
4.1 PowerPath 安装与 hdiskpower 的命名规律
小机接的是外部阵列,同一块 LUN 通过两块 HBA 看见两次,必须靠多路径软件收敛成一个可管理设备。PowerPath 装完之后,lsdev -Cc disk里原来的hdisk会变成hdiskpower,命名从hdiskpower0开始递增。
# 装完确认软件包已在 lslpp -l | grep -i powerpath # 注册许可并启动服务 emcpreg -install startsrc -s PowerPath # 查看多路径拓扑,确认每块 LUN 都有两条活路径 powermt display dev=allpowermt display dev=all的输出里,每条 LUN 下面应该能看到两行alive的路径,分别指向两块 HBA。如果只有一行alive一行dead,先查光纤跳线和交换机 zone,不是软件问题。emcpreg -install会交互式要求输入注册码,没有注册的多路径软件只认一条路径,等于白装。
设备收敛之后,建卷组用hdiskpower而不是hdisk,这一点在建 VG 之前必须确认清楚,选错了设备名,两个节点看到的卷组 ID 对不上,HACMP 同步时直接失败。
# 确认可用磁盘,注意看类型列 lsdev -Cc disk # 创建 sqdbvg,PP size 取 128MB mkvg -y sqdbvg -s 128 -f hdiskpower2 # 批量创建其余三个卷组 mkvg -y hddbvg -s 128 -f hdiskpower3 mkvg -y rmansqvg -s 128 -f hdiskpower4 mkvg -y rmanhdvg -s 128 -f hdiskpower5 # 核对卷组清单与状态 lsvg -o-s 128指定物理分区大小,128MB 这个粒度对数据库卷组比较合适:太小导致 PP 数量爆炸、LVM 管理开销上升;太大则空间浪费。-f是强制在设备上建 VG,会清掉已有的卷组信息,只在确认盘是空盘时用。四个卷组分别对应数据库主数据、历史数据、归档和归档历史,这是按备份恢复路径拆的,不是按容量拆的——把归档和主数据放在同一个卷组里,做一次全量备份时的 I/O 冲击会直接打到业务库上。
4.2 rootvg 镜像的三个动作,一个都不能省
rootvg 只有一个副本的机器,任何一块系统盘出问题就是整机停。镜像流程看起来简单,但三个动作的顺序错了,一样起不来。
# 第一步:把第二块盘加进 rootvg extendvg rootvg hdisk1 # 第二步:做镜像,后台执行 mirrorvg rootvg # 查看同步进度,STALE 分区数降到 0 才算完成 lsvg rootvg | grep STALE # 第三步:在新盘上重写引导镜像 bosboot -ad hdisk1 # 更新启动列表,光驱在前,两块盘在后 bootlist -m normal cd0 hdisk0 hdisk1 # 重启验证 shutdown -Frmirrorvg只是把逻辑卷复制过去,不做bosboot的话新盘上没有引导块,主盘坏了机器照样起不来。这是最容易漏的一步,因为mirrorvg执行完不会提示你需要补引导镜像,而lsvg看起来一切正常。bootlist的顺序也要检查:cd0放最前是为了以后维护时能直接从光盘引导,但有些现场把cd0去掉,结果系统盘全坏时只能现场拆机。
重启之后用lsvg -p rootvg看两块盘的LV STATE是不是都是open/syncd,再用bootlist -m normal -o确认启动顺序。这两条命令的输出应该保存下来作为交付记录,后面出问题时能对照。
4.3 文件系统划分与 SWAP 的定量依据
手册给定的文件系统尺寸是:根 6GB、/tmp10GB、/usr10GB、/var90GB、/home10GB、/opt10GB,另外两个业务文件系统/softcd和/oracle各给 50GB 和 10GB。
这几个数字里最值得说的是/var的 90GB。默认安装给的/var通常只有几个 GB,跑一段时间就满,原因是/var/adm/ras下的 errlog、wtmp、HACMP 的日志、应用日志全堆在这一个挂载点上。一旦/var满了,syslog 写不进去,HACMP 的日志也写不进去,故障时等于没有任何现场记录,排查只能靠猜。90GB 是按半年日志量估的,配合后面 errdemon 的 10MB 上限,够用。
# 图形方式扩文件系统 smitty chfs # 命令行方式,给 /var 扩到 90GB(单位是 512 字节块) chfs -a size=188743680 /var # 查看所有文件系统的容量与使用率 df -gchfs -a size=的单位是 512 字节块,90GB 换算下来是 188743680 块,算错一个数量级就会把文件系统扩成 900MB 或者报空间不足。用df -g复核,-g是以 GB 为单位显示,比df -m直观。
SWAP 按内存 1:1 配,16GB 内存对应 16GB 分页空间。默认 PP 是 512MB,也就是 32 个 PP,但手册里写的是"增加 31 个",因为系统装完已经有一个默认的 hd6,加起来正好 32。
# 查看当前分页空间 lsps -a lsps -s # 图形方式调整:smitty lvm -> Page Space -> Change # 或直接扩逻辑卷 extendlv hd6 31 # 复核总大小,应该是 16384MB lsps -alsps -a的SIZE列单位是 MB,加起来等于内存大小即可。SWAP 不是越大越好,超过内存两倍的部分基本用不上,反而占盘。但小于内存的话,一旦有进程把内存吃满,系统会先 OOM 杀掉进程而不是换页,数据库实例被 kill 的现场非常难查。
4.4 dump、errdemon 与系统日志
dump 设备决定系统崩溃时内存镜像往哪写、能写多大。默认的 dump 逻辑卷往往只有几百 MB,而 16GB 内存的完整 dump 需要至少 16GB 空间。
# 估算当前配置下 dump 需要多大空间 sysdumpdev -e # 查看当前 dump 设备与状态 sysdumpdev -l # 把主 dump 逻辑卷扩到估算值以上 extendlv hd6 32 # 或走 smit:smitty sysdumpdev 修改 primary dump device # 允许强制 dump(系统挂死时手工触发) smitty sysdumpdev # 把 "always allow dump" 设为 true # 崩溃后自动重启(与 3.3 节重复确认一次) chdev -l sys0 -a autorestart=truesysdumpdev -e输出的估计值是按当前内存占用算的,实际配置要留 20% 余量。dump 设备空间不够时,崩溃瞬间只会写一部分就停,拿到的是残缺镜像,分析工具打不开。这个坑平时看不出来,真出事那天就彻底没法查了。
errdemon 的日志默认上限只有 1MB,生产机上一天就能写满,写满之后循环覆盖,早上的错误到下午就没了。
# 改 error log 上限到 10MB /usr/lib/errdemon -s 10485760 # 查看当前生效的日志属性 /usr/lib/errdemon -l # 确认进程在跑 ps -ef | grep errdemon-s的单位是字节,10485760 就是 10MB。改完-l的输出里Log Size应该同步变化。如果ps里看不到 errdemon 进程,用/usr/lib/errdemon手工拉起来,不带参数就是按当前配置启动。
5. HACMP 双机:从 cluster 名字到资源组切换的完整动作
5.1 安装包选择与 cdrom 文件系统
HACMP 6.1 的安装包有一堆,除了cluster.hativoli之外全部要装。cluster.hativoli是 Tivoli 的监控集成,这套环境不用,装了反而多一层依赖。
# 先建 cdrom 文件系统,否则 smitty 找不到安装源 smitty cdrfs # 选 Add a CDROM File System # DEVICE name: cd0 # MOUNT POINT: /cdrom # Mount AUTOMATICALLY at system restart: yes # 挂载并确认能读到光盘内容 mount /cdrom ls /cdrom # 安装 HACMP smitty installp # 选 Install and Update from ALL Available Software # 在包列表里把 cluster.hativoli 的选中标记去掉,其余全选/cdrom这个挂载点不要用默认之外的名字,HACMP 的安装脚本里有硬编码路径检查,改过之后可能出现"找不到安装介质"的提示。装完用lslpp -l | grep cluster确认包列表,再用lslpp -L cluster.es.server.rte看版本,节点间版本必须完全一致。
5.2 cluster 名字、主机与两类心跳网络
HACMP 的配置顺序是有依赖的:先定 cluster 名字,再加节点主机,再加网络,最后才有 IP 地址和资源组。顺序乱了,后面的菜单项会是灰的。
# 进入 HACMP 配置菜单 smitty hacmp # Extended Configuration -> Extended Topology Configuration第一步加 cluster,名字自己定,两个节点必须用同一个。第二步加 cluster 内的主机,把两台机器的主机名都加进去,注意这里用的是/etc/hosts里能解析到的短名,不是 IP。加完主机之后才能加网络。
网络要加两类:基于 IP 的网络(用业务网卡做心跳,也叫 IP 心跳)和基于非 IP 的网络(串口心跳)。串口心跳走的是机器背后的串口直连线,不占网络带宽,也不受交换机影响,是双机最可靠的一条心跳通道。
# 串口设备确认,通常是 tty0 和 tty1 lsdev -Cc tty # 在 HACMP 里添加串口设备时,两台机器要一一对应 # 节点 A 的 tty0 对节点 B 的 tty0,不能交叉串口线接反是现场高频问题:A 机的 tty0 接到 B 机的 tty1 上,两边的设备名对不上,配置能做完但同步时会报"无法建立心跳"。接线前用标签纸把两端的设备名写好,比事后查日志省事得多。
5.3 资源组、SVC IP 与应用脚本的挂载顺序
资源组是切换的最小单位,里面的东西有严格的先后顺序:先加卷组,再加服务 IP,最后加应用启动脚本。顺序反了,脚本会在 IP 还没漂移过来的时候就去连数据库,直接失败。
# 进入资源配置 smitty hacmp # Extended Configuration -> Extended Resource Configuration # 1. 定义资源组,取名 app_rg # 2. 把 sqdbvg、hddbvg、rmansqvg、rmanhdvg 依次加入资源组 # 3. 添加 service IP,绑定到业务网卡 # 4. 添加应用启停脚本应用脚本这部分是最容易出问题的。脚本必须放在两个节点都能访问的本地路径下(不要放在要被切换的卷组里,否则脚本本身会跟着卷组一起卸载),权限必须是755,属主 root。脚本里如果要su - oracle执行命令,得写完整的环境变量,因为 HACMP 调脚本时的环境比登录 shell 干净得多。
#!/bin/bash # 应用启动脚本示例:/usr/local/bin/app_start.sh # 必须可执行,且两个节点内容完全一致 export ORACLE_BASE=/oracle export ORACLE_HOME=/oracle/product/11.2.0 export ORACLE_SID=proddb export PATH=$ORACLE_HOME/bin:$PATH su - oracle -c "lsnrctl start" su - oracle -c "sqlplus / as sysdba <<EOF startup exit EOF" exit 0脚本最后的exit 0不能省。HACMP 用返回码判断脚本是否执行成功,返回非 0 会认为应用启动失败,资源组进入 ERROR 状态,后续切换全部卡住。脚本里的ORACLE_SID按实际实例名改,sqlplus的 heredoc 写法比-c传字符串稳,避免引号转义问题。
5.4 同步、启动与一次真刀真枪的切换
配置做完必须同步,同步动作会把节点 A 上的配置推到节点 B,并校验两边的一致性。
# 从节点 A 同步到节点 B smitty hacmp # Extended Configuration -> Synchronize HACMP Configuration # 同步完成后在主节点启动 cluster smitty clstart # 或命令行 /usr/es/sbin/cluster/sbin/cl_clstart # 在备节点启动 smitty clstart # 查看集群状态 /usr/es/sbin/cluster/utilities/clshowstateclshowstate的输出里,集群状态应该是STABLE,节点状态是UP,资源组状态在一台上是ONLINE、另一台是OFFLINE。如果显示UNSTABLE或者资源组在两边都ONLINE,说明心跳没通、两个节点各自
本文还有配套的精品资源,点击获取