
RAC结构组成:
(1) 集群的节点(cluster nodes) 2个到n节点或者主机运行Oracle Database Server.
(2) 私有网络(Network Interconnect) RAC之间需要一个高速互联的私有网络来处理通信和Cache Fusion。
(3) 共享存储(Shared Storage) RAC需要共享存储设备让所有的节点都可以访问数据文件。
RAC的特点:
(1) 每一个节点的instance都有自己的SGA。
(2) 每一个节点的instance都有自己的background process
(3) 每一个节点的instance都有自己的redo logs。
(4) 每一个节点的instance都有自己的undo表空间。
(5) 所有节点都共享一份datafiles和controlfiles.
总结:每个节点都有SGA、background process、redo logs、undo表空间。
共享的存储上存放datafiles、controlfiles
RAC数据库和单实例数据库的区别
为了让RAC中的所有实例能够访问数据库,所有的datafiles、control files、pfile/spfile、redo log files都必须保存在共享磁盘上,
并且都能被所有节点同时访问,就涉及裸设备(raw)和集群文件系统等。
在结构上区别
至少为每个实例多配置一个redo线程,如:两个实例组成的集群至少要4个redo log group,另外要为每个实例准备一个undo表空间。
(1) redo和undo
很显然,每个实例在数据库的修改时各用各的redo和undo段,各自锁定自己修改的数据,把不同实例的操作独立开,避免了数据不一致。
后面就要考虑备份或恢复时redo log和归档日志在这种情况下的特殊考虑了。
(2) 内存和进程
各个节点的实例都有自己的内存结构和进程结构,各节点之间结构是基本相同的。
通过Cache Fusion(缓存融合)技术,RAC在各个节点之间同步SGA中的缓存信息,达到提高访问速度的效果,也保证了一致性。
后台进程Background process
Oracle RAC 有一些自己独特的后台进程,在单一实例中不发挥配置作用。
LMS (Global Cache Service Monitor) 全局缓存服务进程
进程主要用来管理集群内数据块的访问,并在不同的实例的Buffer Cache中传输数据块镜像。
直接从控制的实例的缓存复制数据库块,然后发送一个副本到请求实例上。并保证在所有实例的Buffer Cache中一个数据
块的镜像只能出现一次。
LMS进程保证了在每一时刻只能允许一个实例去更新数据块,并负责保持该数据块的镜像记录(包含更新数据块的状态FLAG),
Oracle RAC 提供了多达10个LMS进程(0-9),这取决于消息传递通信量。
LMON(Lock Monitor Process) 锁监控进程
是全局队列服务监控服务器,各个实例的LMON进程会定期通信,以检查集群中各个节点的健康状态,当某个节点出现故障时,
负责集群重构、GRD恢复等操作,它提供的服务CGS(Cluster Group Services)
LMON主要借助两种心跳机制来完成健康检查。
(1)节点间的网络心跳(Network Heartbeat): 可以想象成节点间定时的发送ping包检测节点状态,如果能在规定时间内收到回应,
就认为对方状态正常。
(2)通过控制文件的磁盘心跳(Controlfile Heartbeat):每个节点的CKPT每3秒检查一次控制文件的一个数据块,这个数据块叫作Checkpoint
Progress Record,控制文件是共享的,所以实例间可以相互检查对方是否及时更新来判断。
LMD (Global Enqueue Service daemo ) 锁管理器守护进程
是一个后台代理进程,即全局服务队列守护进程),因为负责对资源管理要求来控制访问块和全局队列,还负责死锁检查和监控转换超时。
LCK (Lock Process) 锁进程
管理非缓存融合,锁请求是本地的资源请求,LCK进程管理共享资源的实例的资源请求和跨实例调用操作。在恢复过程中它建立一个无效锁
元素的列表,并验证锁的元素。
DIAG(the diagnosability daemon,诊断守护进程)负责捕获RAC环境中进程失败的相关信息,并将跟踪信息写出用于失败分析,DIAG产生的信息
在Oracle Support技术合作来寻找导致失败的原因方面是非常有用的。每个实例仅需要一个Diag进程。
GSD(the global service daemon,全局服务进程)
与RAC的管理工具dbca、srvctl、oem进行交互,用来完成实例的启动关闭等管理任务。为了保证这些管理工具运行正常必须在所选的节点上先 start gsd
并且一个GSD进程支持在一个节点的多个rac.gsd进程位于$ORACLE_HOME/bin目录下,其log文件为$ORACLE_HOME/srvm/log/gsdaemon.log。
GCS和GES两个进程负责通过全局资源目录(Global Resource Directory GRD)维护每个数据文件和缓存块的状态信息。
CKPT (Checkpoint Process) 检查点进程
LGWR (Log writer Process) 日志写进程 => Redolog files
DBWR (Database Writer Process) 数据写进程 =>Data files & Control Files
SCN (System Change Number)
SCN是Oracle 用来跟踪数据库内部发生变化后顺序的机制,相当于高精度的时钟,每个redo日志条目,Undo Data Block都会有SCN号。Oracle的Consistent-Read
(一致性读),Current-Read,Multiversion-Block都是依赖SCN实现。
1. Clusterware的主要进程
(1) crsd: 负责集群的高可用操作,管理crs资源db、instance、listener、vip、ons、gsd等,操作包括启动、关闭、监控及故障切换。该进程由root或者操作系统管理员管理和启动。
crsd如果有故障会导致系统重新启动。
(2)cssd:管理各个节点间的关系,用于节点通信,节点在加入或离开集群的时候通知cluster,这个进程由Oracle用户运行管理,发生故障的时候cssd也会自动重新启动系统。
(3)Process Monitor Daemon (OPROCD): 集群进程管理,用于保护共享数据I/O fencing仅在没有使用vendor的集群软件状态下运行。锁定在内存中监视集群运行并执行I/O隔离。
利用hangchecker,监测、停止、在监测、再停止,如果醒来时间不对则重启该节点。
(4) evmd: 事件监测进程,由Oracle用户运行管理。
Cluster Ready Services (CRS,集群准备服务) 是管理集群内高可用操作的基本程序。CRS管理的任何事务称为资源,他们可以是一个数据库、一个实例、一个监听、一个虚拟IP(VIP)地址、
一个应用进程等。CRS是根据存储于OCR中的资源配置信息来管理这些资源的。这包括启动、关闭、监控及故障切换(start、stop、monitor、failover)操作。当一资源的状态改变时,
CRS进程生成一个事件。CRS进程生成一个事件。当用户安装RAC时,CRS进程监控Oracle的实例、监听等,并在故障发生时自动启动这些组件。默认情况下,CRS进程会进行5次重启操作,
如果资源仍然无法启动则不再尝试。
Event Management (EVM): 后台进程发布有CRS生成的事件。
Oracle Notification Service(ONS): 通信FAN消息的发布和订阅服务。
RACG: 扩展集群支持Oracle特定的需求和复杂的资源。
Cluster Synchronization Services(CSS集群同步服务):管理集群配置,谁是成员、谁来、谁走、通知成员,是集群环境中进程间通信的基础。
CSS可用于在单实例环境中处理ASM实例与常规RDBMS实例之间的交互作用。还提供了组服务,即关于在任意给定时间内哪些节点和实例构成集群的动态信息,节点的名称和节点数的静态信息
(这些信息在节点被加入或移除时被修改)。CSS维护集群内的基本锁功能。
CSS还负责在集群内节点间维持一个心跳的程序,并监控投票磁盘的Split-brain故障。

