大话Oracle Grid:云时代的RAC
上QQ阅读APP看书,第一时间看更新

第3章 认识 Grid 2.0

Grid即网格。网格计算的概念并非Oracle的发明,但似乎只有Oracle把它作为商标贴在自己脸上,即“10g”的“g”。不过Oracle当时的想法只有数据库才能撑得起网格这个门面,因此这个“g”当时只是给了DB,而同期落地的Clusterware头上并没有这个光圈。

随着无处不在的云计算的来临,业界充分见识到了平台的力量,显然,做一个能网格化的平台要比单纯的数据库更富有“钱”景。于是Oracle 11g里,除了DB网格的继续发扬光大外,Clusterware也和光同尘的黄袍加身,Grid化了。

所以,我认为Oracle Grid 11g应该算是Oracle的Grid 2.0。

接下来,我们会对Oracle Grid进行深入的剖析,深入到Grid的内部去看个究竟。这会是一个很有挑战性的旅程,这个探索之旅我们必须要借助一些工具才能完成,包括EM、crsctl、srvctl、cluvfy、oifcfg、ocrconfig、ocrcheck和ocrdump。

在这些工具中,我们用得最多的将会是 crsctl、srvctl,它们不仅是我们研究过程中的有益助手,也是我们日常运维过程中的得力工具。

用过Oracle Clusterware 10g的读者应该知道,Oracle 10g有一组以crs_开头命名的工具,每个工具都有一个特定的功能。这些工具包括crs_stat、crs_register、crs_unregister、crs_start、crs_stop、crs_getperm、crs_profile、crs_relocate和crs_setperm。

在Oracle Grid 11.2中,这些工具都被废弃掉了。当然被废除的只是工具,功能还是要保留的,这些功能都被整合到crsctl一个工具中了,于是crsctl就成了Grid的瑞士军刀了。另外,crsctl工具本身也有些变化,下面这些用法在Oracle Grid 11.2 中被废除了:

crsctl check crsd;

crsctl check cssd;

crsctl check evmd;

crsctl debug log;

crsctl set css votedisk;

crsctl start resources;

crsctl stop resources。

因为在Oracle Grid 11.2的日常使用中最常用到的命令就是crsctl和srvctl,所以我们先学习这两个命令。

3.1 借我一双慧眼

crsctl和srvctl这两个工具每个拎出来都是个“十项全能”。尽管在对资源的操作能力上,二者有些重叠,但是区别也是挺明显的。区别就在于对于那些名字以ora为前缀命名的实体(包括资源、资源类型、Server Pool)都要通过srvctl来维护。而集群层面的一般通过crsctl来维护。

3.1.1 CRSCTL

crsctl在Oracle Grid 11.2中得到了很大的加强,它是之前版本中crsctl和crs_*两个工具的复合体。所以,crsctl就是个“万金油”。从clusterware的启动、关闭、监控,到voting disk以及其他资源的管理无所不能,当然其中有一些需要关注的变化。

1.功成身退的crs_***

Clusterware 10.2 中有很多以 crs_开头的命令,比如 crs_profile、crs_stat 等,这些 crs_***样式的命令从Oracle Grid 11.2开始被慢慢淘汰。不过Oracle为了保证向后兼容,这些命令在Grid 11.2中还保留着,但功能已经整合到crsctl中了。这种并行的局面可能还要持续一段时间,作为最终用户,我们最好从现在就开始记住crsctl只此一家,别无分号。

不妨看看之前的这些命令是怎么对应的。比如,crs_stat是查看资源状态的,现在对应的是crsctl status res -t ……

再比如,以前资源的启停、重新分配用的是crs_start、crs_stop、crs_relocate这3个命令。现在就可以这么做了:crsctl start/stop/relocate resource resourcename。

如果用 Clusterware 维护第三方的应用程序,比如 Tomcat,之前我们要用到 crs_profile、crs_register、crs_setperm 一系列命令,这些命令同样也整合到 crsctl 里了。也就是说,现在可以通过crsctl来创建资源、设置资源权限等。后面会用个例子演示如何用Grid来给第三方程序提供高可用性的保护功能。

注意:Clusterware所维护的资源,如果资源的名字是以ora.开头的,这类资源应该用srvctl来维护;否则,就应该用crsctl命令来维护。

另外,crsctl status resource –t命令查看的资源中,并没有包括OHAS栈的daemon,要想查看这部分daemon,还要加上-init,比如“crsctl status res -t –init”。

2.手工启动集群方式的变化

Oracle集群栈一般是伴随着操作系统的启动过程启动的,当然也支持手工方法的启动。但手动方法在Oracle 11.2中发生了变化。这主要是因为Grid 11.2中的Clusterware结构发生了变化。这个变化稍后会有详细介绍,这里先开个头。

Oracle Clusterware 10.2 有CRSD、CSSD、EVMD 三大服务,操作系统的init 会启动这3个daemon。如果要手工启动,命令如下:

crsctl start crs

这个命令到了Oracle Grid 11.2还是有效的,不过意义已经不一样了,在Oracle 11.2之前,CRS就是Clusterware的全部,动CRS就是动Clusterware。

而到了Oracle 11.2之后,位于整个集群栈最底层的元素是OHASD,CRS风光不再,它已经降格为OHASD管理的资源,而且还只是其中之一。

如果 OHASD 没有启动或者被关闭了,那这个命令的结果就是“这里的黎明静悄悄”,不会有任何的东西被启动,这个节点无法加入到集群中。

换句话说,在Grid 11.2中的crsctl start crs已经沦落到只能启动CRS这么一个daemon的境地。而且这还得看别人脸色,如果 OHASD 没有启动,这条命令也是干赚吆喝,没有任何效果。

所以在Grid 11.2中正确启动集群的做法是crsctl start cluster。于是,Oracle Grid 11.2中正确的手工启动、关闭、检查所有集群件的命令是这样的:

crsctl start cluster –all

crsctl stop cluster –all

crsctl check cluster –all

对于crsctl的变化,暂时就了解这么多,具体的用法我们会在后面的过程中现学现卖。接下来,来看另一个重要工具srvctl。

3.1.2 SRVCTL

在Oracle RAC的层次结构中,srvctl是用来维护上层应用或者资源的。对于Oracle Grid 11.2来说,可以由srvctl维护的资源包括ASM、Database、Instance、Service、Node Applications、Listener、VIP Address、GNS、SCAN VIP、SCAN Listener、Oracle Home、OC4J、SERVER、SERVER POOLS、ASM Disk Group、ASM File System(黑体部分是Grid 11.2中增加的资源)。

srvctl能够执行的操作和之前版本是相同的,包括enable、disable、start、stop、relocate、status、add、remove、modify、config、getenv、setenv、unsetenv。但并不是说每一种资源都支持这么多种操作,支持关系如表3-1所示。

表3-1 SRVCTL命令参考

续表

使用srvctl时,需要注意的是ASM。要是之前的版本,像srvctl stop asm这种用法没有任何问题的。到了Oracle 11.2 中就不行了,因为ASM 中有了OCR 和Voting File,这时候CSS是作为客户端连接到ASM中的。要想关闭ASM,就必须要关闭CSSD,因此,关闭ASM的唯一正确方法就是关闭OHAS。如果要关闭的Oracle Home恰好也是ASM Home的话,也会有同样的问题。

对这两个工具先介绍这么多,这两个工具的用法非常类似,语法格式都是一样的;而且功能上也有重叠,都能够操纵资源。所以使用时需要注意区分,我们目前可以记住这么一个窍门:对集群层的操作是crsctl的功能,srvctl没这功能。那些名字是以ora.开头的资源,都应该用srvctl来操作。其他的就需要我们在以后的使用过程中慢慢总结和体会了。

接下来进入Grid的正题,先从Oracle Grid的前世今生开始说起。

3.2 Clusterware的前世今生

其实用图3-1就能讲清楚Clusterware和Grid的关系,以及Oracle 10.2和11.2的变化。

图3-1 Grid、Clusterware、ASM的关系

图3-1包含以下两层意思:

在Oracle 11.2 之前,ASM是DB的功能。从Oracle 11.2 开始,ASM从DB中移出来,合并到Clusterware中;

Clusterware和ASM合并一处后,再叫原来这两个名字中的哪个都不合适了,于是就叫Grid了。

那我们就先回顾历史,看看Clusterware的老底。

Oracle集群从Oracle 7就有了,只是当时还不叫RAC,而是叫OPS(Oracle Parallel Server),RAC 是后来的事。因为是集群数据库,所以不可避免地需要一个集群支撑系统。最初 Oracle是没有这个系统的,怎么办呢?只能使用第三方的了,比如IBM的HACMP、Sun的Cluster、HP的True Cluster,这些都是针对特定操作系统的,也有些通用产品,比如Veritas。总之必须借助于一个非Oracle的东西才能搞出Oracle集群来。

可能是Oracle不甘受制于人,也可能是Oracle认为集群的市场巨大、想分一杯羹。Oracle在9i时拿出了它的第一款集群软件OCM(是Oracle Cluster Manager,不是Oracle认证大师),不过在9i时期,这个产品还只是针对Linux和Windows平台的,并不支持其他UNIX平台。

当然,OCM 只是一个试水产品,真正用在生产环境中商用的案例并不多。而且这个时期Linux还没成气候,只是个学院工具或者技术狂热分子的玩具,没有进入企业应用的领域。

再接下来就是Oracle 10g了,“g”是Grid(网格)的意思。应该说,Oracle网格的概念提得忒超前了,很长时间内大家都搞不清“网格”是要革谁的命。就像后来人云亦云的“云计算”一样,其实今天再回头想想,如果把网格再加上虚拟化,基本就是“云”的翻版。

有点扯远了,回来说集群软件,Oracle 10gR1时,Oracle推出了第一款可商用的集群软件Cluster Ready Service,这是一款跨平台的产品,能够支持Windows、Linux、UNIX系统。到了Oracle 10.2,Oracle把它改名成Oracle Clusterware,这也是目前装机量最多的一个版本。

经过这么几年的市场考验,Oracle Clusterware已经得到了用户的认可,事实上已经成了部署RAC的标准配置了,而其他的集群件却年景惨淡。根据我的体验,除了IBM的HACMP目前还没被彻底否决外,Sun、Linux 上基本是Oracle Clusterware 的天下了,Veritas 更是“不可闻”。从这个侧面也可以看出Oracle对其他厂商的挤压,以前Oracle会把Sun、HP、IBM、Red Hat当作亲密的合作伙伴。现在的Oracle是年轻力壮、财大气粗,再也不用看其他人的脸色了。比如,Red Hat收购JBoss后,Oracle马上推出了自己的Oracle Enterprise Linux,而且提供全线支持,着实把红顶企鹅恶心够呛。

既然在UNIX平台上有两种集群管理软件(厂商自己的、Oracle的Clusterware)可以选择,那么它们有什么关系呢?又该如何选择呢?可以给读者这样的结论:不管什么平台,Oracle Clusterware(Oracle Grid)是必需的,而厂商的集群软件是可选的。

如果同时安装了厂商的集群管理软件,则Oracle Clusterware就会发挥桥梁的作用,让OracleRAC和厂商的集群管理软件协同工作。在这种情况下,需要先安装厂商的集群软件,然后再安装Oracle Clusterware。这样一来,会在/optORCcluster目录下创建一个叫做libskgxn.so的库。

比如,在我的AIX环境下因为使用了HACMP,所以可以看到这个目录:

[oracle@guangdong_rac1 lib]$cd /opt/ORCLcluster/

[oracle@ rac1 ORCLcluster]$ls

bin lib lib32

[oracle@ rac1 ORCLcluster]$ll lib

total 784

drwxr-xr-x 2 root system  256 Jun 8 2010 .

drwxr-xr-x 5 root system  256 Jun 6 2010 ..

lrwxrwxrwx  1 root  system    32 Jun 8 2010 libskgxn2.a ->/opt/ORCLcluster/lib/libskgxnr.a

lrwxrwxrwx  1 root  system    33 Jun 8 2010 libskgxn2.so ->/opt/ORCLcluster/lib/libskgxnr.so

-rw-r--r-- 1 oracle dba  204669 Jun 7 2010 libskgxnr.a

-rwxr-xr-x 1 oracle dba  194440 Jun 7 2010 libskgxnr.so

[oracle@guangdong_rac1 ORCLcluster]$ll lib32/

total 728

drwxr-xr-x 2 root system  256 Jun 8 2010 .

drwxr-xr-x 5 root system  256 Jun 6 2010 ..

lrwxrwxrwx  1 root  system    34 Jun 8 2010 libskgxn2.a ->/opt/ORCLcluster/lib32/libskgxnr.a

lrwxrwxrwx  1 root  system    35 Jun 8 2010 libskgxn2.so ->/opt/ORCLcluster/lib32/libskgxnr.so

-rw-r--r-- 1 oracle dba  189609 Jun 8 2010 libskgxnr.a

-rwxr-xr-x 1 oracle dba  179363 Jun 7 2010 libskgxnr.so

[oracle@guangdong_rac1 ORCLcluster]$ll bin

total 0

drwxr-xr-x 2 root system  256 Jun 6 2010 .

drwxr-xr-x 5 root system  256 Jun 6 2010 ..

而在另一个Sun集群中,因为只用了Oracle Clusterware,所以就看不到这个目录。

1.Clusterware要管什么

Oracle 10g的Clusterware提供三大功能:

节点成员身份管理(Node Membership);

全局资源管理;

高可用性保证。

成员身份,就是说一个节点属于一个集群。而所谓节点的成员身份管理,就是要判断一个节点是否属于集群或者是否该被踢出集群。

属于集群的成员就意味着这个节点能够操作集群里的资源,再说浅显点就是能够读写共享存储上的数据文件。我们知道,Oracle是一种共享一切的集群模式,所有节点共同操作一份数据,包括读和写,读还好一点,写必须要控制。

之所以要做成员身份管理,就是要保证所有这些成员对于这仅有的一份共享数据文件的IO活动是在一个受控的环境下进行的。一旦某个节点的活动不受控,或者说这个节点失去了联系(没有了心跳响应),那这个节点的 IO 操作就很可能造成对数据的破坏。因此这时就要取消它的成员身份,也就是把它踢出集群。

集群固然重要,24×7固然重要,快速响应固然重要,但都比不上用户数据的准确。因此,成员身份管理当之无愧的是头等大事。既然大家共同开发,就一定要服从命令听指挥,不能野蛮生长。

再看全局资源。

一个RAC环境中其实有两个集群存在:一个是由Oracle Clusterware(或者Oracle Grid)组成的集群,这是一个基础架构层级的集群。另一个是各个数据库实例组成的集群,这是一个应用层的集群。

二者的关系可以这样理解,前一个集群就相当于是一个剧场,这里有舞台、灯光、音响、烟火、道具,提供了一切必要的物质条件,但是只有这些东西没用,观众真正要看的是演员的表演,这些不过是烘托演员表演的,不能喧宾夺主。后一个集群就是在这个平台上的演员。

因此,Clusterware只是一个平台,它上面可以支持各种各样的应用,Oracle数据库恰好是这样的应用之一,可能也是目前为止唯一的一种应用。但我们不怀疑以后可能会有越来越多其他的应用跑在上面。就算我们自己不这么做,Oracle也会把它作为其他产品的HA方案捆绑销售,强加给我们的。

所有这些想要运行在Clusterware上或者说想交给Clusterware(Grid)管理、实现集群目标的应用程序,都是Clusterware的资源。资源必须注册到Oracle Clusterware集群中,委托Oracle Clusterware对自己进行监管。

Oracle Clusterware所提供的是一个完整的监控框架,它并不知道该怎么应付一个具体的资源,必须由我们来告诉它。于是 Oracle Clusterware 又提供了一套完整的接口(有 API 的、有命令行的),方便我们把这些程序作为资源注册到 Clusterware、交给 Clusterware 维护、借助Clusterware实现各种集群能力。

而高可用性是Clusterware的价值所在,这一点我们不需要做过多的讨论。

上面这三点是Clusterware所要提供的最基础的功能。具体到实现上,Oracle 10g Clusterware是通过三大服务来完成它的使命的,分别是CSS、CRS和EVM。

CSS 服务(Cluster Synchronization Service)提供了节点管理(Node Monitor)和组管理 (Group Manager)的功能,可以理解成CSS提供的就是节点成员身份管理;CRS(Cluster Ready Service)提供的是资源的管理能力;而EVM(Event Management)提供的是事件管理能力。

从DBA的角度来说,这3个服务中我们最需要关注的就是CSS服务了,这是因为Oracle的CSS服务有一个相当霸道的功能:自行重启节点。注意,它这个重启不是说重启数据库实例或者Clusterware,而是把操作系统重启,相当于init -6。

要知道对电信、券商、银行这样的单位来说,重启系统是一件非常严肃的事情,需要层层上报审批、双规(在规定时间按照规定的流程)执行。Oracle的这个功能显然太野蛮了。所以,我们必须要了解CSS中到底有哪些进程、会以什么样的方式重启操作系统。

Clusterware的进程可以配合这3个服务分成3组,如图3-2所示。

图3-2 Oracle 10.2 Clusterware的进程

CSS服务的进程包括ocssd、oprocd、oclsomon,这3个进程都具有重启系统的功能。

如果ocssd进程被kill或者挂掉,节点就会重启。

Oracle 10.2 之后出现了oclsmon 进程,它负责监控ocssd进程的状态,如果发现问题,也会重启节点。

在UNIX平台上,如果没有使用第三方的集群软件,会有oprocd进程,Linux的10.2.0.4及以后的版本也有这个进程,这个进程替代之前的hangcheck timer 模块,其功能和工作方式也与hangcheck timer 模块一样,它也可以导致节点的重启。

CRS 服务的主进程是 crsd,这个进程负责启动、关闭、监控资源状态。Oracle 10.2 的Clusterware是通过一个所谓RACG框架来维护资源的,所有ora.*格式的资源都是通过这个框架来维护的。而其他的应用程序要想交给 CRS 维护,必须提供一个符合 Oracle 规范的 action脚本,然后Clusterware就可以通过这个脚本来操作这些程序了。

最后,EVM 服务对应的进程就是 evmd,这个进程还会有几个辅助进程,比如 evmlogger记录日志,另一个重要的辅助进程是racgevt,Oracle Clusterware为用户提供了响应集群事件的机制,用户可以把自己的脚本放在指定的目录下,然后当有事件发生时,EVM就会执行racgevt,后者再执行该目录下的用户脚本,并把事件名等一堆参数传给脚本。于是我们就可以对感兴趣的事情做出个性化处理,比如发邮件、发短信等。

2.Clusterware的文件

Oracle Clusterware 10.2中用到的文件有3个,分别是OCR、Voting Disk(Voting File)和Control File。

从 OCR 这个文件的名字我们应该能体会到,它对于 Oracle 集群的作用就像注册表(Registry)对 Windows 操作系统的作用。这是 Oracle 集群的配置文件,数据库的、集群的配置信息都在这里,比如集群的节点列表、集群数据库实例和节点对应关系、CRS应用程序资源profile位置等。

另一个文件是Voting Disk(其他的叫法还有Voting File、表决磁盘、投票磁盘,指的都是同一个文件),它是用来管理节点的成员身份的。Voting Disk也是Oracle Clusterware中重要通信渠道,集群有两个心跳机制,一个是通过私有网络的网络心跳,另一个就是通过Voting Disk的磁盘心跳。当网络心跳丢失时,集群会通过Voting Disk解决脑裂风暴。

不管是Oracle Clusterware 10.2还是Grid 11.2都有控制文件,这些文件控制一些重要进程的启用、停用,进而控制重要的集群功能。比如是否启动oprocd进程。在Linux、AIX系统中这些文件的位置在/etc/oracle/scls_scr/<nodename>/root目录下,而Sun是在/var/opt/oracle/scls_scr/<nodename>/root目录下,不同的版本中这个目录下文件的个数有些区别。

这是Clusterware 10.2的文件:

[oracle@center-rac2 root]$pwd

/var/opt/oracle/scls_scr/center-rac2/root

[oracle@center-rac2 root]$ll

total 3

-rw-r--r-- 1 root root 37 Jun 24 19:11 crsdboot

-rw-r--r-- 1 root root 7 Apr 2 2010 crsstart

-rw-r--r-- 1 root root 37 Jun 24 19:11 cssrun

-rw-r--r-- 1 root root 0 Apr 2 2010 noclsmon

-rw-r--r-- 1 root root 0 Jun 24 19:11 noclsvmon

这是Grid 11.2的文件:

[grid@indexserver1 indexserver1]$ ls

grid root

有grid、root两个子目录,先看grid目录:

[grid@indexserver1 indexserver1]$ ll grid/

total 4

-rw-r--r-- 1 grid root 8 Jul 5 13:05 cssfatal

再看root目录:

[grid@indexserver1 indexserver1]$ ll root/

total 12

-rw-r--r-- 1 root root7 Jul 5 13:05 crsstart

-rw-r--r-- 1 root oinstall 8 Jul 18 16:11 ohasdrun

-rw-r--r-- 1 root oinstall 7 Jul 5 13:05 ohasdstr

这些文件的内容一般都是 enable、disable、restart 这样的字符串,进而控制同名进程的启停。这些文件内容是由集群自动维护的。比如init.cssd或者crsctl工具,所以我们不要试图手工去改变这些文件,知道就好了。

3.Clusterware的启动

Oracle Clusterware是利用操作系统级的init脚本启动的,Clusterware部署完成后,/etc/inittab中就会被加上下面的内容:

h1:35:respawn:/etc/init.d/init.evmd run >/dev/null 2>&1 </dev/null

h2:35:respawn:/etc/init.d/init.cssd fatal >/dev/null 2>&1 </dev/null

h3:35:respawn:/etc/init.d/init.crsd run >/dev/null 2>&1 </dev/null

这些就是Oracle Clusterware 10.2的核心内容,接下来使用本章开头介绍的工具来对它进行剖析,以便从操作系统层面来看看它到底都有些什么。

首先使用以下命令检查集群的运行状态:

[oracle@center-rac2 admin]$crsctl check crs

CSS appears healthy

CRS appears healthy

EVM appears healthy

该命令用来检查上面提到的三大基本服务,上面的结果显示集群的状态是正常的。

再看一看Clusterware所维护的资源清单,需要用到下面这个命令:

[oracle@center-rac2 admin]$crs_stat -t

NameType Target State Host

------------------------------------------------------------

ora....SM1.asm application ONLINE ONLINE center-rac1

ora....C1.lsnr application ONLINE ONLINE center-rac1

ora....ac1.gsd application ONLINE ONLINE center-rac1

ora....ac1.ons application ONLINE ONLINE center-rac1

ora....ac1.vip application ONLINE ONLINE center-rac1

ora....SM2.asm application ONLINE ONLINE center-rac2

ora....C2.lsnr application ONLINE ONLINE center-rac2

ora....ac2.gsd application ONLINE ONLINE center-rac2

ora....ac2.ons application ONLINE ONLINE center-rac2

ora....ac2.vip application ONLINE ONLINE center-rac2

ora.wxxrdb.db application ONLINE ONLINE center-rac1

ora....b1.inst application ONLINE ONLINE center-rac1

ora....b2.inst application ONLINE ONLINE center-rac2

从列表可以看到,Oracle Clusterware管理的典型资源包括ASM、Listener、VIP、Database、Instance、GSD、ONS。图3-3就是Oracle Clusterware 10.2环境的示意图。

图3-3 Clusterware 10.2的组成示意图

说明:这一部分内容是对Oracle 10.2 RAC 的概要结论,因此这里不展开说明。

3.3 Grid中都有些什么

Oracle Grid 是在 Oracle Clusterware 基础上发展过来的,Oracle Grid 又分成了 11.1 和11.2 两个版本,11.1 这个版本基本上是 Clusterware 10.2 的延续,形式和内容上都没有什么变化。

而Oracle Grid 11.2和Oracle Clusterware或者Oracle Grid 11.1比起来,形式和内容上都有重大的更改,初次接触容易产生面目全非的错觉。甚至会有之前积累的知识“都白学了”的感觉。不过,随着研究的不断深入,就会发现,Oracle Grid 的变化不是颠覆性的,所有 Oracle Clusterware的内容都在。

打个比方,Oracle Clusterware 就像是个“毛坯房”,三大功能往那一戳,像三根棍子似的顶着 RAC 数据库。一眼就看到底了,不妩媚、不深邃、不复杂。得装修,精装修后,于是就有了Grid。

Grid 和 Clusterware 比起来,无论门面、内饰、细节上都做得更精细,所以会让我们有不认识的错觉,其实扒开来看看房子还是框架结构的,不过确实更好用,也更唬人了。

接下来,使用本章开始介绍的两个工具来看看Grid 11.2到底长成什么样,用类似的命令查看同样的信息,不过命令的语法、输出的格式这些细节会有些变化,格式上的变化并不是重点,重点要关注内容上的变化。最后,我们还要给出Grid 11.2的组成示意图。

1.集群栈状态

检查集群状态还是用crsctl命令,也还是用check动作,不过后面的参数不一样了,Grid 11.2中不再支持crs,而是要用cluster,于是就是下面这个命令:

[grid@indexserver2 ~]$ crsctl check cluster -all

**************************************************************

indexserver1:

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online

**************************************************************

indexserver2:

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online

**************************************************************

indexserver3:

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online

**************************************************************

indexserver4:

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online

**************************************************************

这个命令等同于Clusterware 10.2 中的crsctl check crs,输出也类似,我们用-all把所有节点上的信息都显示出来,可以看到,在Grid 11.2中,基本服务仍然是CRS、CSS、EVM三个。我们再接着来看一看资源情况。

2.集群的资源

在Clusterware 10.2 中,检查资源的命令是crs_stat,在Grid 11.2中,这个命令被整合到了crsctl中,用法是这样的:

[grid@indexserver1 root]$ crsctl status res -t

--------------------------------------------------------------------------------

NAME  TARGET STATE  SERVER    STATE_DETAILS

--------------------------------------------------------------------------------

Local Resources

--------------------------------------------------------------------------------

ora.DATA.dg

ONLINE ONLINE  indexserver1

ONLINE ONLINE  indexserver2

ONLINE ONLINE  indexserver3

ONLINE ONLINE  indexserver4

ora.LISTENER.lsnr

ONLINE ONLINE  indexserver1

ONLINE ONLINE  indexserver2

ONLINE ONLINE  indexserver3

ONLINE ONLINE  indexserver4

ora.asm

ONLINE ONLINE  indexserver1

ONLINE ONLINE  indexserver2   Started

ONLINE ONLINE  indexserver3

ONLINE ONLINE  indexserver4   Started

ora.gsd

OFFLINE OFFLINE indexserver1

OFFLINE OFFLINE indexserver2

OFFLINE OFFLINE indexserver3

OFFLINE OFFLINE indexserver4

ora.net1.network

ONLINE ONLINE  indexserver1

ONLINE ONLINE  indexserver2

ONLINE ONLINE  indexserver3

ONLINE ONLINE  indexserver4

ora.ons

ONLINE ONLINE  indexserver1

ONLINE ONLINE  indexserver2

ONLINE ONLINE  indexserver3

ONLINE ONLINE  indexserver4

ora.registry.acfs

ONLINE ONLINE  indexserver1

ONLINE ONLINE  indexserver2

ONLINE ONLINE  indexserver3

ONLINE ONLINE  indexserver4

--------------------------------------------------------------------------------

Cluster Resources

--------------------------------------------------------------------------------

ora.LISTENER_SCAN1.lsnr

1  ONLINE ONLINE  indexserver1

ora.LISTENER_SCAN2.lsnr

1  ONLINE ONLINE  indexserver3

ora.LISTENER_SCAN3.lsnr

1  ONLINE ONLINE  indexserver4

ora.cvu

1  ONLINE ONLINE  indexserver3

ora.indexserver1.vip

1  ONLINE ONLINE  indexserver1

ora.indexserver2.vip

1  ONLINE ONLINE  indexserver2

ora.indexserver3.vip

1  ONLINE ONLINE  indexserver3

ora.indexserver4.vip

1  ONLINE ONLINE  indexserver4

ora.oc4j

1  ONLINE ONLINE  indexserver4

ora.scan1.vip

1  ONLINE ONLINE  indexserver1

ora.scan2.vip

1  ONLINE ONLINE  indexserver3

ora.scan3.vip

1  ONLINE ONLINE  indexserver4

ora.wxxrdb.db

1  ONLINE ONLINE  indexserver1   Open

2  ONLINE ONLINE  indexserver2   Open

3  ONLINE ONLINE  indexserver3   Open

一眼望去,密密麻麻,资源多了好多啊!不错,Oracle Grid 11.2 中资源类型远比 Oracle Clusterware丰富,目前为止有些资源我们是认识的,很多都不认识,不过没关系,后面都会一一介绍到。

但是,可以注意到这些资源似乎被做了某种划分,注意输出中有几条虚线,这就是分类。所以,这些资源被分成了两类,一类是“Local Resources”,代表在每个节点上运行的本地资源,另一类是“Cluster Resources”,代表集群范围的资源。

这么多资源都有 TARGET、STATE、SERVER 几个属性。TARGET 是目标状态,STATE是当前状态,SERVER是现在跑在哪个机器上。我们注意到这些资源基本上都是ONLINE状态,只有一个ora.gsd的状态是OFFLINE的。这个大家不用担心,GSD是一个向前(和Oracle 9i RAC)相兼容的一个服务,其实是管理 Oracle 9i RAC 的一个接口而已。如果环境中没有 9i 的 RAC数据库,那GSD就什么用都没有,因此都是OFFLINE的状态,这是正确的,并不是说部署有问题。

注意,这个命令看到的不是全部资源,还有一些重要的后台DAEMON没有罗列出来,如果要查看这些后台DAEMON,则需要使用以下命令:

[grid@indexserver1 indexserver1]$ crsctl stat res -t -init

--------------------------------------------------------------------------------

NAME  TARGET STATE  SERVER    STATE_DETAILS

--------------------------------------------------------------------------------

Cluster Resources

--------------------------------------------------------------------------------

ora.asm

1  ONLINE ONLINE  indexserver1   Started

ora.cluster_interconnect.haip

1  ONLINE ONLINE  indexserver1

ora.crf

1  ONLINE ONLINE  indexserver1

ora.crsd

1  ONLINE ONLINE  indexserver1

ora.cssd

1  ONLINE ONLINE  indexserver1

ora.cssdmonitor

1  ONLINE ONLINE  indexserver1

ora.ctssd

1  ONLINE ONLINE  indexserver1   OBSERVER

ora.diskmon

1  ONLINE ONLINE  indexserver1

ora.drivers.acfs

1  ONLINE ONLINE  indexserver1

ora.evmd

1  ONLINE ONLINE  indexserver1

ora.gipcd

1  ONLINE ONLINE  indexserver1

ora.gpnpd

1  ONLINE ONLINE  indexserver1

ora.mdnsd

1  ONLINE ONLINE  indexserver1

这里有两项之前已经介绍过了,即使用黑体字体的那两行。ora.cluster_interconnect.haip就是上一章提到的HAIP,ora.ctssd就是之前提到的时间服务CTSS。

到目前为止,我们已经对Oracle Grid 11.2的变化有一定的直观认识了,它增加了很多的新内容。但是,上面看到的两个列表还不是全部,还有一些重要的进程无法用命令方式来查看。此外,文字形式看起来也不直观,所谓“一图抵千言”,图3-4就是Grid 11.2的组成示意图。目前看到的也只是其中第3 列(Oracle Clusterware Process)和第5 列(Oracle Clusterware Resources)的内容。

图3-4 Grid 11.2的组成示意图

这一章的目的就是让读者对Grid有个感性认识,而不在于深入难点,读者可以比较图3-3和图3-4,看看差别在哪里。

3.4 Grid,你好吗

在这一章的最后,我们把检查集群状态的命令做一个整理,通常完成一个新的集群部署工作之后,需要使用以下方法做一个彻底的检查。同样,日常工作中也是使用这些命令作为运维活动的开始。

1.集群的名字

每个Grid环境都需要一个名字,在Grid安装的第5步(如图1-9所示)中的Cluster Name输入的就是这个名字。可以用这个命令获得这个名字:

[grid@indexserver3 ~]$ cemutlo -n

Indexcluster

2.集群的资源

这个命令之前刚刚用到,包括:

crsctl status res –t

crsctl status res –t –init

3.nodeapps

所谓节点应用(Node Applications)是指那些位于操作系统和RAC实例之间的那些集群元素,缩写成nodeapps。这些组件包括VIP、ONS Daemon、Network Resource(Grid 11.2中新增的,用来监控公有网络的)、eONS Daemon、GSD,对节点应用的操作一般是通过srvctl命令完成的,查看的方法就是:

[grid@indexserver2 ~]$ srvctl status nodeapps

VIP indexserver1-vip is enabled

VIP indexserver1-vip is running on node: indexserver1

VIP indexserver2-vip is enabled

VIP indexserver2-vip is running on node: indexserver2

VIP indexserver3-vip is enabled

VIP indexserver3-vip is running on node: indexserver3

VIP indexserver4-vip is enabled

VIP indexserver4-vip is running on node: indexserver4

Network is enabled

Network is running on node: indexserver1

Network is running on node: indexserver2

Network is running on node: indexserver3

Network is running on node: indexserver4

GSD is disabled

GSD is not running on node: indexserver1

GSD is not running on node: indexserver2

GSD is not running on node: indexserver3

GSD is not running on node: indexserver4

ONS is enabled

ONS daemon is running on node: indexserver1

ONS daemon is running on node: indexserver2

ONS daemon is running on node: indexserver3

ONS daemon is running on node: indexserver4

4.SCAN

SCAN是Grid 11.2新出现的资源,SCAN是由SCAN-VIP和SCAN Listener配对组成的,因此检查时这两部分都要检查。

(1)检查SCAN-IP地址的配置:

[grid@indexserver2 ~]$ srvctl config scan

SCAN name: indexgrid.wxxr.com.cn, Network: 1/192.168.123.0/255.255.255.0/eth0

SCAN VIP name: scan1, IP: /192.168.123.216/192.168.123.216

SCAN VIP name: scan2, IP: /192.168.123.214/192.168.123.214

SCAN VIP name: scan3, IP: /192.168.123.215/192.168.123.215

SCAN-IP一共有3个,分别是192.168.123.214/215/216。

(2)检查SCAN-IP地址的实际分布方式:

[grid@indexserver2 ~]$ srvctl status scan

SCAN VIP scan1 is enabled

SCAN VIP scan1 is running on node indexserver2

SCAN VIP scan2 is enabled

SCAN VIP scan2 is running on node indexserver3

SCAN VIP scan3 is enabled

SCAN VIP scan3 is running on node indexserver1

(3)检查SCAN监听情况:

[grid@indexserver2 ~]$ srvctl status scan_listener

SCAN Listener LISTENER_SCAN1 is enabled

SCAN listener LISTENER_SCAN1 is running on node indexserver2

SCAN Listener LISTENER_SCAN2 is enabled

SCAN listener LISTENER_SCAN2 is running on node indexserver3

SCAN Listener LISTENER_SCAN3 is enabled

SCAN listener LISTENER_SCAN3 is running on node indexserver1

5.VIP和监听

每个节点都会有自己的VIP以及对应的监听器,可以这么查看VIP的配置情况:

[grid@indexserver2 ~]$ srvctl config vip -n indexserver1

VIP exists: /indexserver1-vip/192.168.123.210/192.168.123.0/255.255.255.0/eth0, hosting node indexserver1

[grid@indexserver2 ~]$ srvctl config vip -n indexserver2

VIP exists: /indexserver2-vip/192.168.123.211/192.168.123.0/255.255.255.0/eth0, hosting node indexserver2

[grid@indexserver2 ~]$ srvctl config vip -n indexserver3

VIP exists: /indexserver3-vip/192.168.123.212/192.168.123.0/255.255.255.0/eth0, hosting node indexserver3

[grid@indexserver2 ~]$ srvctl config vip -n indexserver4

VIP exists: /indexserver4-vip/192.168.123.213/192.168.123.0/255.255.255.0/eth0, hosting node indexserver4

查看VIP资源当前的状态。在前面检查nodeapps中,已经看到了VIP资源的状况如下:

[grid@indexserver2 ~]$ srvctl status nodeapps

VIP indexserver1-vip is enabled

VIP indexserver1-vip is running on node: indexserver1

VIP indexserver2-vip is enabled

VIP indexserver2-vip is running on node: indexserver2

VIP indexserver3-vip is enabled

VIP indexserver3-vip is running on node: indexserver3

VIP indexserver4-vip is enabled

VIP indexserver4-vip is running on node: indexserver4

也可以用srvctl命令一个一个地查看:

[grid@indexserver2 ~]$ srvctl status vip -n indexserver1

VIP indexserver1-vip is enabled

VIP indexserver1-vip is running on node: indexserver1

[grid@indexserver2 ~]$ srvctl status vip -n indexserver2

VIP indexserver2-vip is enabled

VIP indexserver2-vip is running on node: indexserver2

[grid@indexserver2 ~]$ srvctl status vip -n indexserver3

VIP indexserver3-vip is enabled

VIP indexserver3-vip is running on node: indexserver3

[grid@indexserver2 ~]$ srvctl status vip -n indexserver4

VIP indexserver4-vip is enabled

VIP indexserver4-vip is running on node: indexserver4

和VIP关系最紧密的就是本地的监听器,我们来检查监听器配置:

[grid@indexserver2 ~]$ srvctl config listener -a

Name: LISTENER

Network: 1, Owner: grid

Home: <CRS home>

/u01/app/11.2.0/grid on node(s) indexserver4,indexserver3,indexserver2,indexserver1

End points: TCP:1521

检查监听器状态:

[grid@indexserver1 grid]$ srvctl status listener

Listener LISTENER is enabled

Listener LISTENER is running on node(s): indexserver2,indexserver3,indexserver4,indexserver1

可见,监听器在所有节点上都运行。根据刚才这一顿检查,我们可以试着把SCAN VIP、SCAN Listener、VIP、Listener的关系用示意图总结出来,如图3-5所示。

图3-5 资源的分布

6.ASM资源

最后再对ASM的资源进行一个检查,在Clusterware时期,ASM是作为一个上层资源存在的,并不是 Clusterware 集群乃至数据库集群(RAC)所必需的,相关的资源只有一个,那就是ASM实例。

另外,Clusterware时代,ASM是作为Oracle Database的一部分,没装Database之前是没有的。Grid 11.2 中ASM 的地位大大提升了,和Clusterware 结合为一体,在Grid 部署过程中就用到了。ASM实例和ASM磁盘组的地位也成了Grid集群的必需品,因此ASM实例和ASM磁盘组都是被管理的对象。

对于ASM实例,可以这么检查:

[grid@indexserver1 grid]$ srvctl status asm -a

ASM is running on indexserver2,indexserver3,indexserver4,indexserver1

ASM is enabled.

对于磁盘组资源,可以这么检查:

[grid@indexserver1 grid]$ srvctl status diskgroup -g DATA

Disk Group DATA is running on indexserver2,indexserver3,indexserver4,indexserver1

这样一圈下来,对Grid的检查就算完成了。你的环境有问题吗?

3.5 小结

通过这一章学习,我们熟悉了Oracle Grid 中最主要的两个工具CRSCTL和SRVCTL,复习了Oracle Grid的发展历史,对Oracle Grid有了感性的认识,并演示了检查Grid的步骤和方法。接下来我们就要深入研究Grid的组成了。