前言
前几天使用脚本在 RockyLinux 9.4 安装 Oracle 11GR2 RAC,安装完之后发现集群无法正常启动,后经过分析发现原来是因为 RHEL9 版本默认安装移除了 initscripts
软件包,需要人为手动安装,在 RHEL8 之前是默认安装的。
在分析问题的过程中,顺便对 Oracle RAC 集群启动顺序进行了更深入的了解,下面简单整理了一下,分享给大家一起看看,本文主要是以 11GR2 为例。
Oracle 11GR2 RAC 集群启动顺序
参考文档: 11GR2 Clusterware 和 Grid Home – 你需要知道的事 (Doc ID 2225748.1)
11GR2 Clusterware 的一些关键特性:
- 在安装运行 11GR2 的 Real Application Clusters 数据库之前需要先安装 11GR2 Clusterware。
- GRID HOME 包括 Oracle Clusterware 和 ASM。ASM 不能够放在另外单独的 HOME 下。
- 11GR2 Clusterware 可以安装为 Standalone 模式(以来支持 ASM)或者 Oracle Restart 模式(单节点)。此时 Clusterware 是完整版 Clusterware 的子集。
- 11GR2 Clusterware 可以独立运行,也可以运行在第三方 Clusterware 之上。关于支持矩阵请参考文档 Note: 184875.1 “How To Check The Certification Matrix for Real Application Clusters”
- GRID HOME 和 RAC/DB HOME 必须安装在不同的路径下。
- 11GR2 Clusterware 的 OCR 和 voting 文件必须是共享的,它们可以放在 ASM 里或者集群文件系统中。
- OCR 每4个小时自动备份一次,备份文件放在
<GRID_HOME>/cdata/<clustername>/
目录下,并且可以使用 ocrconfig 工具恢复。 - 每次配置改变时,voting file 会被备份到 OCR 中,并且可以使用 crsctl 工具恢复。
- 11GR2 Clusterware 需要最少一个私有网络(为了节点间的通信)和最少一个公共网络(为了和集群外通信)。多个虚拟 IP 需要注册到 DNS 中,包括 node VIPs (每个节点一个), SCAN VIPs (3个)。这可以通过网络管理员手工操作来完成也可以使用 GNS (Grid Naming Service) 来完成。(注意 GNS 也需要一个自己的 VIP)。
- 客户端通过 SCAN (Single Client Access Name)来访问数据库。关于 SCAN 的更多信息请参照 Note: 887522.1
- 集群安装后期,root.sh 会启动 clusterware。关于如何处理 root.sh 的相关问题,请参照 Note: 1053970.1
- 每个节点只允许运行一套集群相关的后台进程。
- 在 Unix 下,clusterware 是由 init.ohasd 脚本启动的。而 init.ohasd 脚本以 respawn 模式定义在 /etc/inittab 中。
- 如果某个节点被认定为不健康,那么它会被从集群中驱逐(或者重启),以此来维持整个集群的健康。关于更多信息,请参照文档 Note: 1050693.1 “Troubleshooting 11.2 Clusterware Node Evictions (Reboots)”
- 可以使用第三方时间同步软件(比如 NTP)来保持节点间的时间同步,也可以不使用第三方时间同步软件,而由 CTSS 来同步节点间时间,关于更多信息,请参照文档 Note: 1054006.1
- 如果要安装低版本的数据库软件,那么需要在集群中 pin 住节点,否则会碰到 ORA-29702 错误。 更多信息请参照文档 Note 946332.1 以及 Note:948456.1。
- 可以通过启动节点,或者执行"crsctl start crs"来启动集群。也可以执行"crsctl start cluster"来在所有的节点上启动集群。注意 crsctl 在 <GRID_HOME> 目录,注意 crsctl start cluster 仅在 ohasd 运行的时候才可以工作。
- 可以通过关闭节点,或者执行"crsctl stop crs"来关闭 clusterware。或者执行""crsctl stop cluster"来关闭所有节点上的 clusterware。注意 crsctl 在 <GRID_HOME> 目录。
- 手工杀掉(kill)集群的进程是不支持的。
- 实例现在在
crsctl stat res -t
的输出中是 .db 资源的一部分,在 11GR2 上,没有单独的 .inst 资源。
下面的图片清晰的列出了各个层级:
关于启动顺序的简述:INIT 启动 init.ohasd
(以 respawn 参数),而 init.ohasd 启动 OHASD
进程(Oracle High Availability Services Daemon),而 OHASD 又启动其它 4 个进程。
第一层:OHASD 启动:
- cssdagent - 负责启动 CSSD 的 Agent。
- cssdmonitor - 监控 CSSD 以及节点健康(和 cssdagent 一起)。
- orarootagent - 负责启动所有 root 用户下的 ohasd 资源 的 Agent。
- oraagent - 负责启动所有 oracle 用户下的 ohasd 资源的 Agent。
第二层:OHASD rootagent 启动:
- CRSD - 管理集群资源的主要后台进程。
- CTSSD - Cluster Time Synchronization Services Daemon
- Diskmon
- ACFS (ASM Cluster File System)驱动
第二层:OHASD oraagent 启动:
- MDNSD - 用来实现 DNS 查询
- GIPCD - 用来做节点间通信
- GPNPD - Grid Plug & Play Profile Daemon
- EVMD - Event Monitor Daemon
- ASM - ASM 资源
第三层:CRSD 启动:
- orarootagent - 负责启动所有 root 用户下的 crsd 资源的 Agent。
- oraagent - 负责启动所有 oracle 用户下的 crsd 资源的 Agent。
第四层:CRSD rootagent 启动:
- Network resource - 监控公共网络
- SCAN VIP(s) - Single Client Access Name Virtual IPs
- Node VIPs - 每个节点1个
- ACFS Registery - 挂载 ASM Cluster File System
- GNS VIP (optional) - VIP for GNS
第四层:CRSD oraagent 启动:
- ASM Resouce - ASM 资源
- Diskgroup - 用来管理/监控 ASM 磁盘组
- DB Resource - 用来管理/监控数据库和实例
- SCAN Listener - SCAN 监听,监听在 SCAN VIP 上
- Listener - 节点监听,监听在 Node VIP 上
- Services - 用来管理/监控 services
- ONS - Oracle Notification Service
- eONS - 加强版 Oracle Notification Service
- GSD - 为了向下兼容 9i
- GNS (optional) - Grid Naming Service - 处理域名解析
重要日志的路径
11GR2 Clusterware 后台进程日志都放在 <GRID_HOME>/log/<nodename>
。 <GRID_HOME>/log/<nodename>
下的结构: