大家好,这里是 Lucifer三思而后行,专注于提升数据库运维效率。
前言
前几天使用脚本在 Rocky Linux 9.4 一键安装 Oracle 11GR2 RAC,安装完之后发现集群无法正常启动,后经过分析发现原来是因为 RHEL9 版本默认安装移除了 initscripts
软件包,需要人为手动安装,在 RHEL8 之前是默认安装的。
在分析问题的过程中,顺便对 Oracle RAC 集群启动顺序进行了更深入的了解,下面简单整理了一下,分享给大家一起看看,本文主要是以 11GR2 为例。
Oracle 11GR2 RAC 集群启动顺序
参考 MOS 文档:11GR2 Clusterware 和 Grid Home – 你需要知道的事 (Doc ID 2225748.1)[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>
下的结构:
alert<NODENAME>.log
(📢 注意:对于 clusterware 的问题,可以先检查这个文件)./admin: ./agent: ./agent/crsd: ./agent/crsd/oraagent_oracle: ./agent/crsd/ora_oc4j_type_oracle: ./agent/crsd/orarootagent_root: ./agent/ohasd: ./agent/ohasd/oraagent_oracle: ./agent/ohasd/oracssdagent_root: ./agent/ohasd/oracssdmonitor_root: ./agent/ohasd/orarootagent_root: ./client: ./crsd: ./cssd: ./ctssd: ./diskmon: ./evmd: ./gipcd: ./gnsd: ./gpnpd: ./mdnsd: ./ohasd: ./racg: ./racg/racgeut: ./racg/racgevtf: ./racg/racgmain: ./srvm:
<GRID_HOME>
和 $ORACLE_BASE
目录下的 cfgtoollogs 目录存放了一些其它的重要日志。比如 rootcrs.pl
以及其它配置工具,比如 ASMCA 等等。
ASM 日志存放在 $ORACLE_BASE/diag/asm/+asm/<ASM Instance Name>/trace
。
<GRID_HOME>/bin
目录下的 diagcollection.pl 可以自动收集重要的日志。以 root 用户执行它。
官方文档
以下列出官方文档中关于 Cluster Startup
的示例图。
11GR2
Figure 1-2 Cluster Startup[2]
12CR2
Figure 1-2 Cluster Startup[3]
18C
Figure 1-2 Cluster Startup[4]
19C
Figure 1-2 Cluster Startup[5]
21C
Figure 1-1 Cluster Startup[6]
23ai
Figure 1-1 Cluster Startup[7]
往期精彩文章推荐
分享几个数据库备份脚本
一文搞懂 Oracle 统计信息
我的 Oracle ACE 心路历程
MOP 系列|MOP 三种主流数据库索引简介
Oracle 主流版本不同架构下的静默安装指南
关机重启导致 ASM 磁盘丢失数据库无法启动
Oracle SQL 性能分析(SPA)原理与实战演练
Oracle 11g 升级到 19c 需要关注的几个问题
Windows 10 环境下 MySQL 8.0.33 安装指南
SQL 大全(四)|数据库迁移升级时常用 SQL 语句
OGG|使用 OGG19c 迁移 Oracle11g 到 19C(第二版)
Oracle 大数据量导出工具——sqluldr2 的安装与使用
从国产数据库调研报告中你都能了解哪些信息及我的总结建议
使用数据泵利用 rowid 分片导出导入 lob 大表及最佳实践
在归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?
参考资料
11GR2 Clusterware 和 Grid Home – 你需要知道的事 (Doc ID 2225748.1):
https://support.oracle.com/epmos/faces/DocContentDisplay?id=2225748.1
Figure 1-2 Cluster Startup:
https://docs.oracle.com/cd/E11882_01/rac.112/e41959/intro.htm#BABIDEFI
Figure 1-2 Cluster Startup:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/cwadd/introduction-to-oracle-clusterware.html#GUID-10B78E53-2047-46DE-A9E0-6EA15117D373__BABIDEFI
Figure 1-2 Cluster Startup:
https://docs.oracle.com/en/database/oracle/oracle-database/18/cwadd/introduction-to-oracle-clusterware.html#GUID-10B78E53-2047-46DE-A9E0-6EA15117D373__BABIDEFI
Figure 1-2 Cluster Startup:
https://docs.oracle.com/en/database/oracle/oracle-database/19/cwadd/introduction-to-oracle-clusterware.html#GUID-10B78E53-2047-46DE-A9E0-6EA15117D373__BABIDEFI
Figure 1-1 Cluster Startup:
https://docs.oracle.com/en/database/oracle/oracle-database/21/cwadd/introduction-to-oracle-clusterware.html#GUID-10B78E53-2047-46DE-A9E0-6EA15117D373__BABIDEFI
Figure 1-1 Cluster Startup:
https://docs.oracle.com/en/database/oracle/oracle-database/23/cwadd/introduction-to-oracle-clusterware.html#GUID-10B78E53-2047-46DE-A9E0-6EA15117D373__BABIDEFI