什么是RAC集群。

来源:互联网 发布:ubuntu退出文件夹命令 编辑:程序博客网 时间:2024/04/30 10:41

1、集群环境的特殊问题

健忘症:这个问题发生在集群环境配置文件不是集中存放,而是每个节点都有一个本地副本。在集群正常运行时,用户可以在任何节点修改集群的配置,并且这个更改会自动同步到其他节点。但是考虑这样一种场景:两个节点的集群,节点1因为正常的维护需要被关闭,然后在节点2修改了某些配置,然后关闭节点2,启动节点1。因为之前在节点2做的配置修改没有同步到节点1,所以节点1启动后,它仍然是用旧的配置文件工作,这时就会造成配置丢失,也就是所谓的“健忘症”。

要想解决“健忘”问题,最简单的办法就是整个集群只有一份配置,各节点公用这份配置,无论在哪个节点修改配置,都是修改相同的配置文件,这样就是保证修改不会丢失。Oracle采用的方法就是把这个配置文件放在共享存储上,这个文件就是OCR Disk。
[root@racnode2 ~]# cat /etc/oracle/ocr.lococrconfig_loc=+OCR_VOTElocal_only=FALSE

脑列:在集群里,节点间需要通过某种机制(心跳)了解彼此的健康状况,以确保各节点协调工作。假设只是“心跳”出现故障,但各个节点还在正常运行。这时,每个节点都认为其他节点宕机,自己是整个集群环境中的“唯一健在者”,自己应该获得整个集群的“控制权”。在集群环境中,存储设备都是共享的,这就意味着数据灾难,这样一种状况就是“脑列”。
Voting Disk这个文件主要用于记录节点中成员状态,在出现“脑列”时,仲裁哪个Parition获得集群的控制权,而其他Parition必须从集群中剔除。
[grid@racnode1 ~]$ crsctl query css votedisk##  STATE    File Universal Id                File Name Disk group--  -----    -----------------                --------- --------- 1. ONLINE   660450b5dcce4f2dbff0710c018ee835 (/dev/raw/raw1) [OCR_VOTE] 2. ONLINE   a1fe3ce9ee114f61bf35874d642db9b5 (/dev/raw/raw2) [OCR_VOTE] 3. ONLINE   4831bafd23404fb2bf89c2825afb9dfa (/dev/raw/raw3) [OCR_VOTE]找到了 3 个表决磁盘。

2、RAC集群

从逻辑上看,RAC集群由存储层、网络层、集群件层、应用层4层组成。

存储层:RAC是一个多实例、单数据库的系统。数据文件、联机日志、控制文件等文件在集群中只有一份。不管有几个节点,这些节点都平等的使用这些数据文件。
网络层:整个RAC环境中,实际有3个网络存在。一个是由public网卡接入的网络,用于对外提供数据查询等服务;另一个是由private网卡组成的私有网络,用于RAC心跳和cache fusion;第三个是存储设备、光纤交换机、每个节点的HBA卡组成的存储网络。前两个网络上面传输的是IP数据,而后一个网络传输的SCSI数据。
集群件层:在单机环境下,Oracle是运行在OS Kernel之上。OS Kernel负责管理硬件设备,并提供硬件访问接口。Oracle不会直接操作硬件,而是由OS Kernel代替它来完成对硬件的调用请求。到了集群环境下,存储设备是共享的。OS Kernel的设计都是针对单击的,只能控制单击上多个进程间的访问,如果还依赖OS Kernel的服务,就无法保证多个主机之间的协调工作。这时就需要引入额外的控制机制,在RAC中,这个机制就是位于Oracle和OS Kernel之间的Clusterware,它会在OS Kernel之前截获请求,然后和其他节点上Clusterware协商,最终完成上层的请求。
应用层:在介绍这一层时,需要先引入一个名词CRS Resource,整个应用层是由若干 CRS Resource组成的。可以简单的理解,一个Resource通常是一个进程,或者有一组进程组成的完整服务。集群环境之所以能够提供高可用性,是因为集群软件(CRS)对运行于其上的应用进行监视,并在发生异常时进行重启、切换等干预手段。


3、Clusterware和RAC的关系
在整个RAC集群中,实际有两个集群环境存在。一个是由Clusterware软件组成的集群,另一个是由Database组成的集群。其中Clusterware集群负责管理整个集群环境中的硬件资源,并为上层的Database就群提供基础服务。二者之间的关系非常类似于单机环境下应用程序和OS的关系。可以把这个Clusterware集群看作是OS Kernel,那么RAC就是其上的Database应用。或者可以这样说,Clusterware组成的集群把所有的节点虚拟成一个计算机,而RAC又把所有节点上的实例虚拟成一个实例。严格意义上说,RAC特指借组于“某种集群软件产品”搭建出来的一个“多实例、单一数据库”的环境。


4、Oracle RAC 组件

Oracle 集群件由“集群就绪服务”(CRS)使用“Oracle 集群注册表”(OCR)和表决磁盘(Voting Disk)进行管理,OCR 记录和维持集群及节点的成员资格信息,表决磁盘(Voting Disk)在通信故障时充当一个仲裁者(tiebreaker)。

Oracle 安装3 个包装器脚本:init.crsd、init.evmd 和init.cssd。CRS 有5 个组件:

CRSd:CRS守护进程(CRSd)。CRSd 的故障或终止可能导致节点故障,它会自动重启节点,以避免因为节点之间可能存在的通信故障而导致数据丢失。CRSd 在UNIX 平台中以超级用户root 身份运行。

  下面是CRS 的功能列表:
  ● CRS 是从一个名为GRID_HOME 的不同Oracle 主目录安装和运行的(在以前版本中称为ORA_CRS_HOME),它独立于ORACLE_HOME。
  ● CRSd 对资源进行管理,例如启动和停止应用程序资源的服务及故障转移。它生成独立的进程来管理应用程序资源。
  ● CRSd 在启动期间和关闭之后有两种运行模式。在计划内的集群件启动期间,它以reboot 模式启动。在计划外关闭之后,它以restart 模式启动。在reboot 模式中,CRSd 启动受其管理的所有资源。在restart 模式中,它保持原来的状态,并使资源返回关闭前的状态。
  ● CRS 管理Oracle 集群注册表(OCR),并将当前已知状态存储在OCR 中。
  ● CRS 在UNIX 中以root 身份运行,在Windows 上以LocalSystem 身份运行,在发生故障时会自动重新启动。
  ● CRS 需要公共接口、私有接口和虚拟IP(VIP)才能运行。在开始安装CRS 之前,公共和私有接口应当处于运行状态,而且能够相互执行ping 操作。没有这一网络基础设施,就不能安装CRS。

OCSSd:Oracle 集群同步服务守护进程(OCSSd)。OCSSd 的故障会导致计算机重新启动,OCSSd 以oracle 用户身份运行。

  下面的列表总结了OCSSd 的功能:
  ● CSS 提供基本的组服务支持。组服务是一种分布式组成员资格系统,它允许应用程序协调活动,以得出一个公共结果。
  ● 如果可以,那么组服务会使用供应商的集群件组服务。但是,即使没有集群件组服务可用,它也能够独立工作。
  ● 锁服务提供了基本的集群范围内序列化锁定功能。它使用先入先出(FIFO)机制来管理锁定。
  ● 节点服务使用OCR 来存储数据,并在重新配置期间更新信息。它还管理OCR 数据,这些OCR 数据在其他方面是静态的。

EVMd:事件卷管理器守护进程(EVMd)。evmd 进程的终止不会使实例停止。EVMd 以oracle 用户身份运行。

OPROCd:即进程监控器守护进程(OPROCd;在11g R2 版本中废弃)。“Oracle 进程监控器”守护进程(OPROCd)为Oracle 集群件提供了I/O 隔离(fencing)解决方案。

ONS:Oracle 通知服务(ONS)。只要集群资源的状态发生改变,每个集群节点上的ONS 进程就会相互通信,并交换高可用性事件信息。


可以使用以下命令手动启动、停止、启用和禁用Oracle 集群件(必须以超级用户角色运行这些命令):
crsctl stop crs # stops Oracle Clusterware
crsctl start crs # starts Oracle Clusterware
crsctl enable crs # enables Oracle Clusterware

crsctl disable crs # disables Oracle Clusterware


Oracle 在Oracle 11g R2 中引入了“Oracle 高可用性服务”守护进程(OHASd),它启动所有其他Oracle 集群件守护进程。在安装Oracle Grid Infrastructure 期间,Oracle 向/etc/inittab 文件中添加一项,如下所示:
h1:35:respawn:/etc/init.d/init.ohasd run >/dev/null 2>&1 </dev/null
/etc/inittab 文件执行带有run 参数的/etc/init.d/init.ohasd 控制脚本,它生成ohasd.bin可执行文件。集群控制文件的存储位置与11g R1 版本相同(/etc/oracle/scls_scr/<hostname>/root)。/etc/init.d/init.ohasd 控制脚本根据ohasdrun 集群控制文件的值启动OHASd。值restart 导致Oracle 使用$GRID_HOME/bin/ohasd restart 重新启动崩溃的OHASd。值stop指示OHASd 的计划内关机,而值reboot 则导致Oracle 用值restart 更新ohasdrun 文件,使Oracle 重新启动崩溃的OHASd。
放到上下文中来说,在Oracle 11g R2 以上版本中,OHASd 将启动所有其他集群件守护进程,并代替在11g R2 之前版本中用于启动集群件守护进程的init 脚本。一旦启动,OHASd 将启动守护进程资源,使用各自代理的守护进程资源将启动底层集群件代理。

原创粉丝点击