你可能不知道的关于Oracle Rac的事...

RAC集群软件组件

Oracle集群软件后台进程图
Oracle Rac集群软件有两大组件,分别为CRS和CSS组件。

CRS

CRS作用是管理集群内高可用操作的基本程序。

  1. CRS管理的任何事务都被称之为资源,数据库、实例、监听、VIP地址、应用进程等;
  2. CRS是根据存储于OCR中的资源配置信息来管理这些资源【当某一资源状态改变时,CRS进程生成一个事件】

CSS

CSS作用是管理集群节点的成员信息。

  1. 控制哪个节点为集群成员
  2. 节点加入或离开集群时通知集群成员来控制集群的配置信息
  3. 进程故障会导致集群重启

RAC集群启动原理

启动过程

  1. 操作系统守护进程 /sbin/init 调用集群软件 /etc/init.d/init.ohasd启动脚本。
  2. 集群软件启动脚本启动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

顺序分析

RAC启动顺序
RAC启动进程
观察以上两张图,我们可以得到如下信息:

从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集群的能力。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值