Oracle RAC vs Clusterware vs ASM
Oracle RAC
- RAC即Real Application Clusters,是一种Oracle高可用部署架构。
- Oracle单机部署模式中数据库和实例是一对一的对应关系,而RAC部署模式下数据库和实例是一对多的对应关系。
- Oracle 11g RAC中最多支持100个实例共同管理同一个数据库。实际生产环境中一般最常见的部署模式是2个实例管理同一个数据库。
- Oracle RAC是一种shared everything数据库架构。集群中所有的数据文件、控制文件、参数文件和重做日志文件都必须存储在Clusterware共享磁盘上。
- Oracle RAC底层的Clusterware存储解决方案包括Oracle ASM、OCFS2和NFS。官方推荐使用Oracle ASM。
Cache Fusion
Oracle RAC通过Cache Fusion技术来逻辑连接多个实例的buffer cache,使得看上去整个RAC中所有实例都在使用同一个buffer cache。
Oracle RAC实例通过GCS(Global Cache Service)和GES(Global Enqueue Service)两个进程来实现Cache Fusion。GCS进程和GES进程通过共同维护SGA中的一个GRD(Global Resource Directory)组件来记录每个数据文件和已缓存数据块的状态信息。
当RAC中一个实例缓存了某个数据块时,如果另一个实例需要访问同一个数据块,可以直接通过Cache Fusion来更快地获取,而不是重新从磁盘中读取。Cache Fusion通过集群内部私有网络在不同节点的实例之间传输数据块。
RAC后台进程
Oracle RAC架构中有如下进程(Oracle 11g):
ACMS
:Atomic Controlfile to Memory Service,ACMS进程负责保证在任一实例中对SGA内存数据的更新在RAC集群全局层面上要么全部成功、要么全部失败。GTX0-j
:Global Transaction Process,GTX0-j进程负责对Oracle RAC环境中的XA分布式全局事务提供支持。LMON
:Global Enqueue Service Monitor,LMON进程负责监控全局Enqueue队列和集群资源,并进行全局Enqueue恢复操作。LMD
:Global Enqueue Service Daemon,LMD进程负责管理每个实例内部接收到的远程资源请求。LMS
:Global Cache Service Process,LMS进程负责维护GRD中记录的数据文件状态信息和缓存的数据块信息。LMS还负责控制不同实例间的通信以及Cache Fusion内存数据块的跨实例传输。LCK0
:Instance Enqueue Process,LCK0进程负责library cache、row cache等非Cache Fusion资源请求的管理。RMSn
:Oracle RAC Management Processes,RMSn进程负责RAC集群管理任务,例如新的实例加入集群时相关资源的创建。RSMN
:Remote Slave Monitor,RSMN进程负责管理远程实例上的后台slave进程的创建和通信。这些远程slave进程代表另一个实例上的调度进程处理某些任务。
自动负载管理
Oracle RAC的工作负载自动管理(Automatic WorkLoad Management)包含以下组件:
- 高可用框架(High Availability Framework):Oracle Clusterware会持续监控运行中的集群组件,并自动重启停止运行的关键组件和数据库进程。
- Single Client Access Name:即SCAN,定义在DNS或GNS中的单一网络名和IP地址,客户端通过SCAN来访问RAC数据库。SCAN支持客户端通过Easy Connect连接串来提供负载均衡和连接故障转移功能。当集群配置发生变化时,客户端无需额外做调整。
- Load Balancing Advisory:为应用提供当前数据库服务水平的相关信息。应用可以根据此信息将连接请求转发到集群中能提供最佳服务质量的数据库实例。
- Services:Oracle提供的自动工作负载管理工具。通过定义services来管理数据库工作负载和数据库访问路由。
- Server Pools:CRS管理员通过Server Pools来创建控制Clusterware分配集群资源的策略。
- 连接负载均衡(Connection Load Balancing):Oracle网络服务为数据库连接提供负载均衡。
DBA管理工具
- Oracle Enterprise Manager:Oracle企业管理工具,同时支持数据库和GRID图形管理界面。
- Server Control Utility (SRVCTL):命令行工具,可以用来重启数据库实例、删除或移动实例和服务。SRVCTL还支持管理集群配置信息、Clusterware组件和Oracle ASM。
- SQL*Plus:命令行工具,用于管理连接的数据库实例。
- Cluster Verification Utility (CVU):命令行工具,用于检查集群组件,包括共享存储、网络配置、系统配置、Clusterware配置。CVU工具在集群组件和ASM的预安装检查和安装后检查过程中尤为重要。
- DBCA:创建和初始化数据库的官方推荐工具。
- NETCA:RAC环境的网络配置工具。
Oracle Clusterware
- Clusterware是部署 Oracle RAC 必须安装的基础设施组件和集群管理解决方案。
- Oracle Clusterware支持自动管理VIP、数据库、监听器、服务、存储等RAC集群资源。
- Oracle Clusterware允许从集群中的多个节点并发访问同一份存储和数据文件,同时为集群中各节点进程间通信提供协议支持。
CRS组件
Cluster Ready Service包含以下进程和组件:
-
Cluster Ready Services (CRS):管理集群高可用的主程序。
CRS守护进程crsd
根据OCR中记录的配置信息来管理集群资源。crsd进程管理这些资源的启动、停止、监控、以及故障转移。 -
Cluster Synchronization Services (CSS):管理集群配置,控制节点是否为集群成员,当有节点加入或离开时通知其他集群成员。
CSS守护进程cssdagent
负责监控集群并提供IO Fencing功能来隔离故障节点(防止主节点临时故障时出现数据库脑裂双写问题)。cssdagent进程故障可能会导致节点重启。 -
Cluster Time Synchronization Service (CTSS):负责集群时间管理。
-
Event Management (EVM):负责发布Oracle Clusterware创建的事件。
-
Oracle Notification Service (ONS):负责Fast Application Notification (FAN)事件通信的一种发布/订阅服务。
-
Oracle Agent (oraagent):用于扩展Clusterware以支持特定的Oracle要求和复杂资源。
oraagent
进程在出现FAN事件时会调用特定脚本。 -
Oracle Root Agent (orarootagent):
orarootagent
进程是一类特殊的oraagent
进程,用于协助crsd进程管理root用户下的资源,例如网络、GRID VIP等。 -
Oracle ASM:提供ASM磁盘管理功能。
HAS组件
Oracle High Availability Services包含以下进程和组件:
-
Cluster Logger Service (ologgerd):从集群中所有节点接收信息并进行持久化。该服务仅在集群中的两个节点上运行。
-
System Monitor Service (osysmond):监控和操作系统度量指标采集服务,会将采集到的数据发送给ologgerd做持久化。该服务运行在集群中的每一个节点上。
-
Grid Plug and Play (GPNPD):提供对GPNP profile的访问,协调对GPNP profile的更新,确保所有节点的GPNP profile信息都是最新的。
GPNP profile中存储了集群的基本配置信息,以便在启动集群时能够从本地文件中获取必须信息,而不再需要完全依赖于OCR。 -
Grid Interprocess Communication (GIPC):用于支持Redundant Interconnect Usage私有网络通信技术的守护进程。
-
Multicast Domain Name Service (mDNS):GPNP服务会通过mDNS服务来定位集群中的GPNP profile。GNS服务会通过mDNS服务来进行名称解析。
-
Oracle Grid Naming Service (GNS):处理外部DNS服务器发送的请求,对集群中定义的名称进行解析。
管理工具
- CLUVFY工具:用于集群组件安装、补丁升级、以及其他系统变更之前的检查。
- OLSNODES工具:用于提供集群中的节点状态信息。
- OCRCONFIG工具:用于Oracle Cluster Registry (OCR)管理。OCR中存储了集群中的所有Oracle资源信息,包括Clusterware和Oracle数据库配置信息、集群成员节点信息。
- CRSCTL工具:用于Clusterware集群资源管理,包括但不限于集群资源的停止与启动、集群守护进程的禁用与启用、集群健康检查、第三方应用资源管理、集群组件debug等。
Oracle ASM
- ASM为Oracle数据库和Clusterware提供底层的磁盘管理器和文件系统功能。
ASM实例
- ASM实例与数据库实例类似,也有自己的SGA和后台进程,不过ASM占用的SGA非常小。
- ASM在安装数据库之前随GI一起部署在GRID_HOME下。
- 集群中的每个节点上都会有一个ASM实例。如果ASM实例故障了,其所在节点上的所有数据库实例也会出现问题。
ASM磁盘组
- 多个节点必须都安装Clusterware才能共享同一个ASM磁盘组。
- 单个ASM文件不能跨多个磁盘组。
- 单个磁盘组中可以包含来自多个不同数据库的文件。
- 单个数据库的多个数据库文件可以分布在多个不同的磁盘组中。
- 单个ASM集群中的磁盘组数量一般是一到两个,很少会超过三个。
镜像和故障组
镜像和故障组通过在多个磁盘上存储数据的多个副本来提供冗余,以保护数据完整性。
每个磁盘组在创建时会被分配到某个故障组中,并属于以下三种冗余级别之一:
- Normal:ASM文件的每个extent都会存储量两个副本在不同的磁盘上。单个ASM磁盘故障不会影响数据的完整性。
- High:ASM文件的每个extent都会存储量三个副本在不同的磁盘上。两个ASM磁盘故障不会影响数据的完整性。
- External:Oracle ASM本身不会提供数据冗余,需要在存储层面搭建RAID来提供数据冗余。
ASM磁盘
- 每个ASM磁盘组包含多个ASM磁盘。
- 每个ASM磁盘被分割成多个分配单元(Allocation Units, AU)。AU是磁盘组内最基本的可分配单元。
- 创建磁盘组时,可通过AU_SIZE指定AU的大小,通常为1、2、4、8、16、32或64MB。
ASM文件
ASM文件是存储在ASM磁盘组中的文件。通常包括以下文件:
- 控制文件
- 数据文件、临时文件以及数据文件副本
- spfile参数文件
- 联机重做日志、归档日志、闪回日志
- RMAN备份文件
- 灾难恢复配置文件
- 更改跟踪位图(Change tracking bitmaps)
- 数据泵dump文件
ASM文件名为自动生成,以+DISKGROUP_NAME
开头。
References
【1】https://docs.oracle.com/cd/E11882_01/rac.112/e41960/admcon.htm#RACAD1111
【2】https://docs.oracle.com/cd/E11882_01/rac.112/e41959/intro.htm#CWADD1111
【3】https://docs.oracle.com/cd/E11882_01/server.112/e18951/asmcon.htm#OSTMG036