9、RAC的典型Cluster栈
在Cluster中的每个节点都需要一个被支持的相互连接的软件协议来支持内部Instance的交互,同时需要TCP/IP支持CRS的轮询。所有的UNIX平台在千兆以太网上使用user datagram protocol(UDP)作为主要的协议并进行RAC内部Instance 的IPC交互。其他支持的特有协议包括用于SCI和Sunfire的连接交互的远程共享内存协议和超文本协议,用于超光纤交互。在任何情况下,交互必须能被平台的Oracle所辨识。
使用Oracle clusterware,可以降低安装并支持并发症。但如果用户使用非以太交互,或开发了依赖clusterware的应用程序在RAC上,可能需要vendor clusterware。
同交互连接一样,共享存储方案必须被当前平台的Oracle所辨识。如果在目标平台上,CFS可用,Database area和flash recovery area都可以被创建到CFS或ASM上。如果在目标平台上,CFS不可用,则Database area可以创建在ASM或是裸设备上(需要卷标管理器)并且flash recovery area必须被创建在ASM中。
10、RAC certification Matrix:它设计用于处理任何认证问题。可以使用matrix回答任何RAC相关的认证问题。具体使用步骤如下:
* 连接并登陆 http://metalink.oracle.com
* 点击菜单栏的“certify and availability”按钮
* 点击“view certifications by product”连接
* 选择RAC
* 选择正确的平台
11、必要的全局资源
一个single-Instance环境,锁坐标通向一个共享的资源就像表中的一行。lock避免了两个进程同事修改相同的资源。
在RAC环境中,内部节点的同步时关键,因为它维持着不同节点中各自进程的一致性,避免其在同时修改相同的资源数据。内部节点的同步确保每个Instance看到buffer cache中block的最近的版本。上图中显示了当不存在加锁的情况。
1)全局资源的协调
cluster操作要求在所有Instance中对控制共享资源的访问进行同步。RAC使用Global Resource Directory来记录cluster Database中资源的使用信息。Global Cache Service(GCS)和Global Enqueue Service(GES)管理GRD中的信息。
每个Instance在其本地的SGA中维护GRD的一部分。GCS和GES指定一个Instance管理特殊资源的所有信息,它被称为资源的master。每个Instance都知道resource的Instance masters。
维护RAC的活动中的cache的依附性(cache coherency)是非常重要的。所谓cache coherency是保持在不同Oracle Instances中的多个block版本的一致性的技术。GCS通过所谓的cache融合算法来实现cache coherency。
GES管理所有非cache 融合算法的内部Instance资源操作和Oracle入队机制的状态轨迹。GES主要的控制的资源是字典cache locks和library cache locks。同时,它还对所有死锁敏感的队列和资源起到死锁检测的作用。
2)Global cache coordination实例
假设某data block被第一个节点修改,成为脏数据。并且在clusterwide中,只有一个block copy版本,其内容用SCN号代替了。则具体的步骤如下:
① 第二个Instance视图修改该block,向GCS提出请求。
② GCS向block的holder(持有者)提交请求。在此,第一个Instance就是holder。
③ 第一个Instance接到消息,并将block发送给第二个Instance。第一个Instance保存脏buffer用于恢复的目的。block的脏镜像被称作block的past image。一个past image block将不能进一步被改变。
④收到block后,第二个Instance通知GCS,告知已经holds该block。
3)write to disk coordination:example
在cluster结构中的Instances中的caches中,可能存在同一个block的不同的修改版本。由GCS管理的写协议确保了只有最近一个版本被写入磁盘中。它同时需要确保其他之前的版本从其他cache中被清洗。一个写磁盘的请求可以从任意一个Instance上发起,无论它是保存了block的当前版本还是过去的版本。假设第一个Instance hold过去的block镜像,请求Oracle将buffer写入磁盘,如上图,过程如下:
①第一个Instance发送一个写请求给GCS
②GCS将请求转给第二个Instance,当前该block的holder
③第二个Instance接到写请求后将block写入磁盘
④第二个Instance通知GCS,告知其写操作完成
⑤当接到GCS接到通知后,GCS命令所有的过去的镜像的holders删除其过去的镜像。此镜像将不会在因恢复而需要。