RAC集群软件组件
Oracle Rac集群软件有两大组件,分别为CRS和CSS组件。
CRS
CRS作用是管理集群内高可用操作的基本程序。
- CRS管理的任何事务都被称之为资源,数据库、实例、监听、VIP地址、应用进程等;
- CRS是根据存储于OCR中的资源配置信息来管理这些资源【当某一资源状态改变时,CRS进程生成一个事件】
CSS
CSS作用是管理集群节点的成员信息。
- 控制哪个节点为集群成员
- 节点加入或离开集群时通知集群成员来控制集群的配置信息
- 进程故障会导致集群重启
RAC集群启动原理
启动过程
- 操作系统守护进程 /sbin/init 调用集群软件 /etc/init.d/init.ohasd启动脚本。
- 集群软件启动脚本启动Oracle集群软件相应进程。
进程展示
RAC集群软件启动之后,分别有root用户和grid用户启动的后台进程。
# root用户启动的进程
[root@rac1 bin]# ps -ef | grep /u01/app/11.2.0/grid/bin | grep -v grep | grep -w root
root 23432 1 0 Nov27 ? 00:00:14 /u01/app/11.2.0/grid/bin/ohasd.bin reboot
root 23778 1 0 Nov27 ? 00:00:12 /u01/app/11.2.0/grid/bin/orarootagent.bin
root 23795 1 1 Nov27 ? 00:00:49 /u01/app/11.2.0/grid/bin/osysmond.bin
root 23822 1 0 Nov27 ? 00:00:02 /u01/app/11.2.0/grid/bin/cssdmonitor
root 23854 1 0 Nov27 ? 00:00:02 /u01/app/11.2.0/grid/bin/cssdagent
root 23988 1 1 Nov27 ? 00:01:02 /u01/app/11.2.0/grid/bin/ologgerd -M -d /u01/app/11.2.0/grid/crf/db/rac1
root 24375 1 0 Nov27 ? 00:00:08 /u01/app/11.2.0/grid/bin/octssd.bin reboot
root 24814 1 0 Nov27 ? 00:00:21 /u01/app/11.2.0/grid/bin/crsd.bin reboot
root 24973 1 0 Nov27 ? 00:00:12 /u01/app/11.2.0/grid/bin/orarootagent.bin
# grid用户启动的进程
[root@rac1 bin]# ps -ef | grep /u01/app/11.2.0/grid/bin | grep -v grep | grep -v root
grid 23680 1 0 Nov27 ? 00:00:06 /u01/app/11.2.0/grid/bin/oraagent.bin
grid 23691 1 0 Nov27 ? 00:00:00 /u01/app/11.2.0/grid/bin/mdnsd.bin
grid 23713 1 0 Nov27 ? 00:00:01 /u01/app/11.2.0/grid/bin/gpnpd.bin
grid 23781 1 0 Nov27 ? 00:00:12 /u01/app/11.2.0/grid/bin/gipcd.bin
grid 23872 1 0 Nov27 ? 00:00:10 /u01/app/11.2.0/grid/bin/ocssd.bin
grid 24453 1 0 Nov27 ? 00:00:08 /u01/app/11.2.0/grid/bin/evmd.bin
grid 24922 24453 0 Nov27 ? 00:00:00 /u01/app/11.2.0/grid/bin/evmlogger.bin -o /u01/app/11.2.0/grid/evm/log/evmlogger.info -l /u01/app/11.2.0/grid/evm/log/evmlogger.log
grid 24984 1 0 Nov27 ? 00:00:05 /u01/app/11.2.0/grid/bin/oraagent.bin
grid 25142 1 0 Nov27 ? 00:00:00 /u01/app/11.2.0/grid/bin/scriptagent.bin
grid 25308 1 0 Nov27 ? 00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN1 -inherit
grid 25360 1 0 Nov27 ? 00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
顺序分析
观察以上两张图,我们可以得到如下信息:
从ohasd开始派生:
-> orarootagent: 负责管理所有root所拥有的ohasd资源的agent代理进程
-> crsd: 负责管理集群资源的主要进程
-> ctssd: 集群时间同步的服务进程
-> diskmon: 磁盘监控进程
-> acfs: asm集群文件系统程序
-> cssdagent: 负责生成cssd的代理进程
-> cssd: 集群同步服务进程
-> oraagent: 负责管理所有oracle所拥有的属于crsd相关资源的代理进程
-> asm resource: asm实例资源
-> diskgroup: 用于管理、监控asm磁盘组使用的资源
-> db resource: 用来监控、管理数据库和实例使用的资源
-> scan listener: 监听器资源,在scan vip上进行监听
-> listener: 节点监听器资源
-> services: 用来监控和管理service使用的资源
-> ons: oracle通知服务
-> eons: 增强的oracle通知服务
-> gsd进程: 向后兼容9i的资源
-> gns(可选): 网格命名服务,该服务用于scan命名解析
-> orarootagent: 负责管理所有root所拥有的属于crsd相关资源的代理进程
-> network resource: 监控公共网络资源
-> scan vip: scan vip资源
-> node vips: 每个节点1个vipz资源
-> acfs registery: 加载acfs资源
-> gns vip(可选)
-> oraagent: 负责管理所有oracle所拥有的ohasd资源的agent代理进程
-> mdnsd: dns lookup时使用的进程
-> evmd: 时间监控进程
-> gipcd: 内联集成和内连接节点通信时使用的进程
-> gpnpd: 即插即用主进程
-> cssdmonitor: 与cssdagent共同负责监控cssd和节点健康
-> cssmonitor: cssd进程监控进程
RAC故障快速定位
了解了RAC集群软件的启动顺序之后,我们定位问题的能力又上升了一大截啦!后续如果遇到集群上出现故障,那么我们便可以快速定位具体组件的日志,通过组件日志找到对应的问题,然后快速解决问题啦!
# 集群软件启动日志路径
[grid@rac1 ~]$ cd $ORACLE_HOME/log
[grid@rac1 log]$
[grid@rac1 log]$ ll
total 4
drwxr-xr-x 2 grid oinstall 6 Nov 22 00:14 crs
drwxrwx--T 5 grid asmadmin 71 Nov 23 00:36 diag
drwxr-xr-t 25 root oinstall 4096 Nov 22 23:55 rac1
[grid@rac1 log]$
# 进入指定实例日志目录下
[grid@rac1 log]$ cd rac1/
# 日志结构展示
[grid@rac1 rac1]$ tree
.
├── acfs
│ └── kernel
│ ├── acfs.log.0
│ └── file.order
├── acfslog
├── acfsrepl
├── acfsreplroot
├── acfssec
├── admin
├── agent
│ ├── crsd
│ │ ├── oraagent_grid
│ │ │ ├── oraagent_grid.log
│ │ │ ├── oraagent_gridOUT.log
│ │ │ └── oraagent_grid.pid
│ │ ├── oraagent_oracle
│ │ │ ├── oraagent_oracle.log
│ │ │ ├── oraagent_oracleOUT.log
│ │ │ └── oraagent_oracle.pid
│ │ ├── orarootagent_root
│ │ │ ├── orarootagent_root.log
│ │ │ ├── orarootagent_rootOUT.log
│ │ │ └── orarootagent_root.pid
│ │ └── scriptagent_grid
│ │ ├── scriptagent_grid.log
│ │ └── scriptagent_gridOUT.log
│ └── ohasd
│ ├── oraagent_grid
│ │ ├── oraagent_grid.log
│ │ ├── oraagent_gridOUT.log
│ │ └── oraagent_grid.pid
│ ├── oracssdagent_root
│ │ └── oracssdagent_root.log
│ ├── oracssdmonitor_root
│ │ └── oracssdmonitor_root.log
│ └── orarootagent_root
│ ├── orarootagent_root.log
│ ├── orarootagent_rootOUT.log
│ └── orarootagent_root.pid
├── alertrac1.log
├── client
│ ├── clsc_10.log
│ ├── clsc_1.log
│ ├── clsc1.log
│ ├── clsc_2.log
│ ├── clsc2.log
│ ├── clsc_3.log
│ ├── clsc3.log
│ ├── clsc_4.log
│ ├── clsc4.log
│ ├── clsc_5.log
│ ├── clsc_6.log
│ ├── clsc_7.log
│ ├── clsc_8.log
│ ├── clsc_9.log
│ ├── clscfg1.log
│ ├── clscfg.log
│ ├── clsc.log
│ ├── crsctl_grid.log
│ ├── crsctl_oracle.log
│ ├── crsctl_root.log
│ ├── crswrapexece.log
│ ├── css1.log
│ ├── css.log
│ ├── gpnptool_2736.log
│ ├── gpnptool_394.log
│ ├── gpnptool_400.log
│ ├── ocr_4187_7.log
│ ├── ocrcheck_9007.log
│ ├── ocrconfig_2096.log
│ ├── ocrconfig_29902.log
│ ├── ocrconfig_32279.log
│ ├── ocrconfig_4742.log
│ ├── oifcfg.log
│ └── olsnodes.log
├── crflogd
│ ├── crflogd.log
│ └── crflogdOUT.log
├── crfmond
│ ├── crfmond.log
│ └── crfmondOUT.log
├── crsd
│ ├── crsd.log
│ └── crsdOUT.log
├── cssd
│ ├── cssdOUT.log
│ └── ocssd.log
├── ctssd
│ ├── ctssdOUT.log
│ └── octssd.log
├── cvu
│ ├── cvulog
│ │ └── cvu20211122174808.log
│ └── cvutrc
│ ├── cvuhelper.log.0
│ └── cvutrace.log.0
├── diskmon
├── evmd
│ ├── evmd.log
│ └── evmdOUT.log
├── gipcd
│ ├── gipcd.l01
│ ├── gipcd.l02
│ ├── gipcd.l03
│ ├── gipcd.log
│ └── gipcdOUT.log
├── gnsd
├── gpnpd
│ ├── gpnpd.log
│ ├── gpnpdOUT.log
│ └── rac1.pid
├── mdnsd
│ ├── mdnsd.log
│ └── mdnsdOUT.log
├── ohasd
│ ├── ohasd.log
│ └── ohasdOUT.log
├── racg
│ ├── evtf.log
│ ├── racgeut
│ ├── racgevtf
│ └── racgmain
└── srvm
我们通过观察日志的结构,不难发现,日志存放的层级与集群启动的顺序是一一对应的,这对于我们快速排查问题提供了极大的便利!
写给读者
本文的目的是深入了解集群底层运行的过程,提高运维Oracle Rac集群的能力。