《oracle大型数据库系统在AIX/unix上的实战详解》集中讨论34:在AIX环境下实施Oracle 集群RAC的结构 文平
看来能用的起IBM p服务器的用户,都能用的起RAC.大家纷纷来信探讨在AIX上实施RAC的一些问题,大多数问题集中的构架上. 这里我开一个专题集中讨论之!
从Oracle 9i开始,Oracle推出真正应用集群Real Application Cluster,简称RAC,来实现Oracle的并行服务。其主要思想是在需要的时候插入Oracle节点以支持更多的工作载荷,在轻载的情况下删除节点,并将计算能力转移给需要的地方。
Oracle 10g、11g都把RAC作为Oracle产品组成中的重要部分。并持续简化节点操作的过程和复杂度,增加RAC集群支持的节点数。
AIX5L、AIX6中都可以完美地实现RAC,而且在众多不同的硬件拓扑结构下支持RAC——无论是多通道本地直连存储(DAS)、还是通过光纤连接的SAN存储结构、或者是iSCSI协议下的IP SAN、甚至通过网络文件系统NFS方式,都可以实现。其数据库文件存储格式,也即可以是裸设备、GPFS共享文件系统、亦或是Oracle的ASM方式,还可以是NFS文件系统。
上面列出了RAC构架的四种基本方式:GPFS模式下的RAC、NFS方式的RAC、ASM方式下的RAC、HACMP下的RAC。针对具体在工程上的实施,由于物理设备上的差异性和挂载方式的不同,其安装配置可能会有不同,足够的灵活性是极其必要的!
在Oracle 集群下,Oracle集群服务是很重要的!
构筑数据库集群,需要集群件的支持。在传统的集群系统中,往往是专业存储厂商或集群供应商等第三方企业提供集群件,Oracle将集群服务构筑在其上。随着Oracle 10g、11g的推出,Oracle开发了自己的集群组件(Cluster Ware),称之为集群就绪服务组件CRS (Cluster Ready Services)。CRS由Oracle提供,能够将集群中的各节点,通过共享存储的硬件支持,集合在一起。其支持平台方位涉及AIX、HP、Sun、Linux、Windows等主流平台。通过使用CRS,Oracle集群结构可以避免使用第三方的集群件,降低了系统复杂度和费用支出。不仅如此,CRS仍然可以与第三方集群件共同使用,将现有的第三方集群件集成在Oracle集群中,使Oracle 集群数据库可以运行在现有集群软件之上。
下图即为Oracle实现集群的体系结构示意。在通过网络连接的各个节点上,运行着不同的数据库实例,每个实例都可以操纵放置在共享存储上的集群数据库,这通过Oracle的集群就绪服务实现。集群之间通过内部网络连接进行数据交换,称之为缓存融合(Cache Fustion),在保证效率的前提下,同步了各个节点的数据:
缓存融合本质上通过私有互连网络在集群内各节点的SGA间进行数据块的传递,而不是把数据块先写到共享存储,再在另一节点重新读入缓存中的策略(Oracle8i前的OPS产品采用如此的方法)。当一个数据块被读入RAC集群中某个节点的实例时,该数据块会获得一个锁资源,以确保集群中其他实例在使用该块时的冲突避免。
另一节点如果要请求该块,而该块已存储在某一实例的缓存结构中,则该块直接通过私有的互连网络被传递过去。如果这个块的内容已更改未提交,那么一个一致性(CR)拷贝就被传递过去。
因此,数据块只需通过私有互联网络在各实例的SGA缓存间互动,从而有效降低了所有节点的磁盘I/O。这也是为什么集群数据库在硬件上要求高速互连网络的原因——至少不能让网络I/O速度低于磁盘I/O速度。
Oracle集群件中,CRS守护进程功不可没!
CRS主要由三部分组成,三个部分都作为守护进程出现,这三个守护进程分别是:ocssd,即集群同步服务守护进程,提供了对集群节点成员的访问和组服务;crsd,它是资源可用性维护的主要引擎;evmd,是事件记录器的守护进程。如下图所示:
在上述这些组成部分中,ocssd和evmd在oracle用户下运行的,而crsd在root用户下运行。crsd和evmd守护进程在启动时被设置为使用respawn选项,因此一旦发生故障它们会被重新启动。当ocssd守护进程作为CRS的组成部分,它使用fatal选项启动,这意味着发生守护进程故障时将会重启整个节点。
CRS服务的启动在AIX系统中通过/etc/inittab文件指定:
RAC中,虚拟IP地址用来失败转移和用户连接。
Oracle CRS为了在节点发生故障时能够更快地进行故障切换,使用了虚拟IP地址(virtual IP Address,VIP)的概念。这样,每个节点不仅拥有自己静态分配的IP地址,而且拥有一个分配给它的虚拟IP地址。每个节点上的监听器实际上监听的是虚拟IP地址(VIP),客户程序连接也是针对VIP进行的。一旦节点发生故障,虚拟IP地址将进行实际的故障切换,并在集群中的其他节点上继续保持联机。
配置RAC过程中重要的一项就是配置虚拟地址,如下图所示RAC节点之一的/etc/hosts文件,列出了RAC中虚拟地址的配置情况:
注意,使用虚拟IP的目的并非是让客户程序能够使用其他节点上的VIP继续与数据库保持连接。IP地址故障切换的目的是降低客户程序识别节点故障所要花费的时间。
如果IP进行故障切换并从其他节点上进行响应,那么正在与该VIP连接的客户程序会立刻得到一个响应,只是响应的内容并不是连接成功,而是登录失败,这说明IP是活跃的,但该地址上没有可用的实例。这时,客户程序就能够立刻尝试地址列表上的其他地址再次进行连接,从而成功与集群中可用节点的VIP进行连接,形成快速的失败转移和再连接机制。
在构建Oracle RAC时,CRS安装时机比较讲究。
在Oracle10g、11g中,CRS的安装是独立于Oracle的。同时,CRS的安装必须在Oracle 系统安装之前,而且必须使用自己的主目录,该目录不能与Oracle数据库的主目录相同(通常指ORACLE_CRS_HOME)。
理论上讲,CRS应当是服务器上首先安装的Oracle软件。因此,如果应用系统当前只需要Oracle单节点运行环境(单实例),但以后可能会使用RAC集群结构,则可以考虑先将CRS安装到它自己的主目录上,然后再安装Oracle系统。数据库安装时,选择本地安装方式即可(也就是不选RAC的安装方式)。由于CRS已经安装,如果日后再向RAC结构迁移,迁移就会变的很简单。
要达到这个目的,需要在CRS主目录下启动ocssd守护进程,而该守护进程也用于其他Oracle 10g、11g中的ASM实例,无论是本地安装还是RAC安装。
未完、待续.