天天看点

Oracle 11g RAC各组件介绍

作者:执着的花猫Jp

1 术语解释

1.1 高可用(HA)

什么是高可用?顾名思义我们能轻松地理解是高度可用的意思,也就是说高可用(high availability) 指的是运行时间能满足预计或期望的一个系统或组件,我们常听说的 24*7*365 系统,这种系统追求一种 不间断提供服务的目标,任何时候都不能停止服务,否则会给用户造成比较大的影响。在信息、通讯、 互联网技术发展如此快的今天,越来越多的系统都希望成为一个高可用的系统,比如银行、证券系统等。

1.2 负载均衡(LB)

负载均衡(load balance)是指将业务的负载尽可能平均、合理地分摊到集群的各个节点,每个节 点都可以处理一部分负载,并且可以根据节点负载进行动态平衡,提高各个节点硬件资源的利用率以及 降低单节点因为负载过高而导致的故障。

1.3 RAC 集群

RAC 集群,全称 Real Application Clusters,译为“实时应用集群”,是 Oracle 提供的一种高可用、 并行集群系统,RAC 除了具有高可用能力还有负载均衡能力,整个 RAC 集群系统由 Oracle Clusterware(集 群软件)和 Real Application Clusters(RAC)两大部分组成。 我们平时一直经常提的 RAC,它仅仅是 RAC 集群中的一部分,是运行在集群软件 Oracle Clusterware 上的一个应用,就是数据库,它和集群软 件的关系类似单机环境中应用程序和操作系统的关系。

1.4 CRS

我们知道 RAC 集群需要集群软件,那么 CRS 是什么呢?在 Oracle 10g 版本前,RAC 集群所需的集群 软件依赖于硬件厂商,在不同平台上实施 RAC 集群都需要安装和配置厂商的集群软件,而 Oracle 只提供 了 Linux 和 Windows 平台上的集群软件,叫 Oracle Cluster Manager。但从 10.1 版本开始,Oracle 推 出了一个与平台独立的集群产品:Cluster Ready Service,简称 CRS,从此 RAC 集群的实施不再依赖各 个硬件厂商,从 10.2 版本开始,Oracle 将这个集群产品改名为 Oracle Clusterware,在 11g 中又被称 为 GI(Oracle Grid Infrastructure),但我们叫惯了 CRS,所以平时很多时候也就称之为 CRS,这个产 品并不局限用于数据库的集群,其他应用都可以借用其 API 轻易实现集群功能。

2 RAC 架构

2.1 RAC 环境组成

2.1.1 硬件环境

整个 RAC 集群的硬件环境包括主机、共享存储、互联网络设备。

  • 主机(节点)

一个 RAC 集群环境中至少有两台主机,也就是两个节点,每个节点的硬件配置应该都一样,每个 节点至少配置两块物理网卡。

  • 互联网络设备
  1. 两块网卡:也就是上面所说的每个节点上必须至少配置两块物理网卡。一块网卡用于集群内 部的私有通信,集群节点间数据块的传输都是通过这块网卡,我们称之为私有网卡,上面配 的 IP 称为 Private IP;另一块网卡用于对外服务,比如数据库的查询等,我们称之为公有 网卡,上面配的 IP 称为 Public IP。除此之外,每个节点还有第三个 IP,我们称之为 VIP(Virtual IP),在所有节点都正常运行时,每个节点的 VIP 会被分配到公有网卡上,当某个 节点出现故障宕机时,这个节点的 VIP 会被移到还在正常运行节点的公有网卡上。
  2. 网络交换机:整个 RAC 集群中需要几个网络交换机呢?个人认为至少两个。一个用于连接所 有节点的公有网卡以提供对外的数据库服务,一个用于连接各个节点之间的私有网卡(当然 Oracle 官方也认为如果是两个节点,其实也可以通过网线直连的方式,但是生产环境中几乎 不存在这种方式)以传递集群节点之间的心跳数据和数据库数据块(Cache Fusion)。
  • 共享存储

在 RAC 集群中,最重要的是共享存储,RAC 是一个“多实例、单一数据库”的架构,所有的节点 共享一个数据库。数据文件、联机日志、参数文件、控制文件都必须放在共享存储上以保证每个节点 的实例都能访问。每个节点必须安装 HBA 卡,然后通过光纤线和存储设备连接。

2.1.2 软件组成

概括来说,RAC 集群的软件组成包含:操作系统、集群软件、集群文件系统、数据库软件。

1. 操作系统

每个节点上所安装的操作系统必须是相同版本的,操作系统在 RAC 架构中所处位置是硬件与集群 件中间。

2. 集群件(CRS)

集群件是安装在操作系统之上的一个特殊软件,负责管理整个集群环境中的硬件资源,并为上 层的 RAC 集群提供基础服务。它与上层应用(例如数据库)的关系类似于单机环境中操作系统和应用程序的关系。单机环境下,OS 能代理应用程序对硬件访问,但是在集群中有多台计算机,把整个集 群想象成一台虚拟的计算机,那集群件就是这台虚拟计算机上的操作系统,RAC 是运行在它上面的一 个应用程序。

3. 集群文件系统

RAC 集群中有很多的文件必须放在共享存储上,保证所有节点都能访问。这就需要对节点的访问 进行控制,普通的文件系统并不支持集群功能,必须采取特殊的存储策略。在 10g 以前,Oracle 只 提供了对裸设备的支持,并没有提供集群文件系统,但从 Oracle 10g 开始,Oracle 提供了 OCFS 和 ASM 两种集群文件系统,后者在现在的环境中用的最多,也最为流行。

4. 数据库软件

这个就是 rdbms 软件了,只有安装了数据库软件,我们才能创建数据库,存储数据,对外提供数 据服务。这里附上一张 RAC 集群简单的拓扑图:

Oracle 11g RAC各组件介绍

2.2 CRS 组成

Oracle Clusterware,在 11g 中又被称为 GI(Oracle Grid Infrastructure),我们这里统一直接称之为 CRS 好了,它由磁盘文件、后台进程、网络组件组成。

1. 磁盘文件

1) OCR:OCR(Oracle Cluster Registry)是为了避免每个节点的配置信息不同步而保存了整个集群的 配置信息,且整个集群只有一份配置,所有节点共享,配置信息以“Key-value”的形式保存其中。 当集群配置需要发生改变时,每个节点都有一个 OCR Process 来读取 OCR Cache 中的内容,而只有 一个节点(OCR Master)有权限读写 OCR Disk 的内容,然后同步到本地和其他节点的 OCR Cache。

2) Voting Disk:Voting Disk 这个文件主要用于记录各个节点的状态,以防在某个或某几个节点出现 问题时,决定哪部分节点具有集群的控制权,而把其他节点从集群中剔除,从而能够继续正常地对 外提供服务。

2. CRS 后台进程

其中最重要的三个进程是 CRSD、CSSD、EVMD,分别对应了 CRS、CSS、EVM 三个服务,而每个服务又 是由一系列的模块组成的,我们可以通过 crsctl 命令来查看有哪些模块组成,如查看 css 服务,crsctl lsmodules css。那么这三个进程又是什么时候启来的呢?在安装 Clusterware 的最后阶段,会要求在每 个节点中执行 root.sh 脚本,这个脚本会在/etc/inittab 文件中最后三行添加三个后台进程的启动信息, 类似:

Oracle 11g RAC各组件介绍

如果 CRSD 和 EVMD 出现异常,系统会自动重启这两个进程。但是如果 CSSD 进程异常,系统会立即重 启。罗列 Linux 和 Unix 中各个服务所对应的进程如下:

Oracle 11g RAC各组件介绍

以 Oracle 11g 在 linux 上为例来查看一下各个进程:

[oracle@node1 ~]$ ps -ef|grep css

root 4408 1 0 04:23 ? 00:00:05 /oracle/app/grid/product/11.2.0/bin/cssdmonitor

root 4427 1 0 04:23 ? 00:00:05 /oracle/app/grid/product/11.2.0/bin/cssdagent

grid 4445 1 0 04:23 ? 00:00:56 /oracle/app/grid/product/11.2.0/bin/ocssd.bin

[grid@node1 bin]$ ps -ef|grep crs

root 4767 1 0 04:24 ? 00:00:20 /oracle/app/grid/product/11.2.0/bin/crsd.bin reboot

[grid@node1 bin]$ ps -ef|grep evm

grid 4623 1 0 04:24 ? 00:00:07 /oracle/app/grid/product/11.2.0/bin/evmd.bin

grid 4861 4623 0 04:24 ? 00:00:00 /oracle/app/grid/product/11.2.0/bin/evmlogger.bin -o

/oracle/app/grid/product/11.2.0/evm/log/evmlogger.info -l

/oracle/app/grid/product/11.2.0/evm/log/evmlogger.log

我们来看一下各个进程的作用:

OCSSD

进程是 Clusterware 最关键的进程,如果出现异常会导致系统重启,这个进程提供 CSS(Cluster Synchronization Service)服务,它通过多种心跳机制实时监控集群的健康状态,提供集群的基础服务 功能。

CRSD

是实现高可用的主要进程,它提供了 CRS(Cluster Ready Service)服务。这些服务包括 Clusterware 上集群资源的关闭、重启、转移、监控等。集群资源分为两类:一类是 Nodeapps 型的,就是说每个节点 只需要一个就行,这类有 GSD(Global Service Daemon)、ONS(Oracle Notification Service Daemon)、 VIP、Listener;另一类是 Database-Related,就是和数据库相关,不受节点限制,这类有 Database、 Instance、Service 等。

EVMD

该进程负责发布 CRS 产生的各种事件,同时也是 CRSD 和 CSSD 两个进程之间的桥梁。

RACGIMON

该进程负责检查数据库健康状态,负责 Service 的启动、停止、故障转移等。 OPROCD

在非 Linux 平台,且没有使用第三方集群软件时才有该进程,用来检测节点的 CPU 挂起,起过 1.5秒会重启节点。

OHASd

Oracle 在 11gR2 引入了 OHASd(Oracle High Availability Services Daemon,Oracle 高可用服务 后台进程),再由它来启动其他的集群件守护进程。

3. 网络组件

我们从 RAC 集群架构中的硬件环境组成已经知道,集群环境中的节点上必须配置两块物理网卡,在 公网网卡上面我们除了设置公有 IP 外还设置了 VIP,Oracle 的 TAF(所谓 TAF 就是连接建立后,如果某 个实例发生故障,连接到这个实例上的用户会被自动迁移到其他健康实例上,对于应用程序而言,这个 迁移过程透明,不需要人工介入)是建立在 VIP 技术上的,它与 IP 最主要的不同就是 VIP 是浮动的,IP 是固定的,当某个节点宕机时,该节点上的 VIP 自动会移到健康节点的公网网卡上,所能对该节点的连 接自动会移到健康节点。

VIP 还有几个特点需要我们注意一下:

a) VIP 是在 Clusterware 安装最后阶段通过脚本 vipca 创建的;

b) VIP 作为一个 Nodeapps 类型的 CRS 资源注册到 OCR,并由 CRS 维护状态; c) 每个节点的监听会同时在 Public 网卡的 Public Ip 和 VIP 两个地址上监听;

d) 客户端的 tnsnames.ora 一般配置指向节点的 VIP

2.3 单实例与 RAC 环境

1、 单实例与 RAC 环境对比

组件 单实例 RAC
SGA 实例有自己的 SGA 每个实例有自己的 SGA
后台进程 实例有自己的后台进程集 每个实例有自己的后台进程集
数据文件 仅由一个实例访问 由所有实例共享,必须放于共享存储上
控制文件 仅由一个实例访问 由所有实例共享,必须放于共享存储上

联机重做日志文

专供一个实例写入与读取 只有一个实例可以写入,但其他实例可以在回复和归档期间读取,如果一个实例关闭,那么 其他实例的日志切换可以对空闲实例日志进 行归档

归档重做日志文

专供一个实例使用 专属于一个实例,但在介质恢复期间,其他实例需要访问所需的归档日志
闪回日志 专供一个实例使用 由所有实例共享,必须放于共享存储上

告警日志与其他

跟踪文件

专供一个实例使用 专属于每个实例,其他实例不会读写这些文件
ORACLE_HOME 同一个节点上访问不同数据库的多个实例可以使用 相同的可执行文件 通常与单个实例相同,但也可以放置于共享文件系统中,允许所 有实例共用一 个 ORACLE_HOME

2、 RAC 新增的组件和后台进程

RAC 的环境中虽然每个实例都有自己的 buffer cache 与 shared pool,但它们现在已经变成全局的, 需要特殊处理才能做到没有冲突、无损坏地管理资源,所以也新增了一些单实例环境中没有的组件,最 主要的有以下两部分:

1) GRD

RAC 实例的 SGA 中多了一个 GRD(Global Resource Directory)部分,Oracle 数据库中数据的操作 都是在内存 SGA 中完成的,与传统的单实例数据库不同,RAC 有多个实例,每个数据块在任何一个实 例中都有拷贝,RAC 必须知道这些拷贝的分布、版本、状态,而 GRD 就是保存这种信息的内存区。值 得注意的是,每个节点都只有部分 GRD 内容,所有节点合在一起才能构成完整的 GRD。

2) 后台进程

RAC 也有和单实例中的 DBWR、LGWR、ARCn、CKPT 这些后台进程,此外还有一些 RAC 特有的后台进程:

lms

该进程是 Cache Fusion 的主要进程,负责数据块在实例间的传递,对应的服务是 GCS(Global Cache Service),可以通过 GCS_SERVER_PROCESSES 参数来控制进程的数量,默认是 2 个,取值范围为 0~9。

lmd

该进程提供 GES(Global Enqueue Service)服务,在多个实例间协调对数据块的访问序,保证数据 的一致性访问,和 LMSn 进程以及 GRD 共同构成 RAC 的核心功能 Cache Fusion。

lck

这个进程负责 Non-Cache Fusion 资源的同步访问,每个实例都有一个 LCK 进程。 lmon

各个实例的 LMON 进程都会定期通信,检查集群中各节点的健康状态,当某个节点出现故障,该进程 负责集群重构、GRD 恢复等,它提供的服务是 CGS(Cluster Group Services)。

diag

Diag 进程监控实例的健康状态,并在实例出现运行错误时收集诊断数据记录到 Alert.log 日志中。

GSD

这个进程负责从客户端工具,比如 srvctl 接收用户命令,为用户提供管理接口。