《[精选]Oracle Clusterware》由会员分享,可在线阅读,更多相关《[精选]Oracle Clusterware(21页珍藏版)》请在金锄头文库上搜索。
1、本章重点讲解集群层 集群层由各个节点上的集群软件组成,集群软件在集群的作用就如同OS Kernel在单机环境中的作用。 在集群环境中,硬件尤其是存储设备是共享使用的,不仅需要协调主机内各个进程对共享存储的使用,还要协调主机间进程的共享使用。依靠传统的OS Kernel显然无法满足。这就需要集群软件的介入。Oracle Clusterware就是满足这个功能的集群软件。 Oracle Clusterware是一款独立的产品,要部署RAC,首先需要部署Clusterware集群,然后在其上安装Database、Database会自动检测到Clsuterware的存在,进而自动部署Database集
2、群。,Clusterware和RAC的关系 在整个的RAC集群中,实际存在两个集群环境。一个是由Clusterware软件组成的集群、另外一个是Database组成的集群。 Clusterware集群负责管理整个集群环境中的硬件资源、并为上层的Database集群提供基础服务。 我们安装完成Clusterware以后,Clusterware启动以后,包含三个资源:GSD、ONS、VIP。Clusterware组成的集群将所有的节点虚拟成一台机器,我们安装软件、建立数据库、配置ASM的时候,只要在一个节点上进行即可。可以将Clusterware看做这个集群的OS Kernel。 RAC将所有节点
3、上的实例虚拟成一个实例,RAC借助集群软件搭建出一个多实例单数据库的环境。集群软件可以选择Oracle的Clusterware,也可以选择别的厂商的集群软件。 Oracle 10g开始Oracle推出了自己的跨所有平台的Clusterware软件。但是目前仅限于Oracle数据库软件来实现RAC。但是Oracle宣称可以提供API让所有软件在Clusterware平台上实现HA功能。 我们目前讲的RAC,指的是Oracle数据库的RAC(多实例、单数据库)集群。 RAC可以在很多厂商的集群软件上运行,但是Oracle10g开始建议使用Oracle的Clusterware作为集群软件。,Orac
4、le Clusterware 1、磁盘文件 Oracle在运行过程中,需要用到两个文件,分别是OCR和Voting Disk。这两个文件必须放在共享存储上。这两个文件重要用来解决“脑裂、健忘”。 OCR:健忘的问题是由于每个节点都有配置信息的拷贝。修改节点的配置信息不同步引起的。解决健忘问题最简单的方式就是整个集群只有一份配置,各节点共用这份配置。Oracle采取的方式就是把配置文件放在共享存储上,这个文件叫做OCR Disk。 OCR保存整个集群的配置信息,配置信息以“Key-value”的形式保存其中。 Oracle 10g以前,这个文件叫做Server Manageability Rep
5、ository(SRVM)。 Oracle 10g以后,这个文件被重新设计,取名OCR。 安装Clusterware的时候,安装程序会提示用户指定OCR位置。我们通常是选择一个裸设备。 用户指定的位置会被记录在一个配置文件中。Oracle Clusterware启动的时候,会根据这里的内容从指定位置读入OCR内容。,OCR的位置信息存储在ocr.loc配置文件中。 整个OCR的信息是一个树形结构,有三个分支。 分别是:SYSTEM、DATABASE、CRS。每个分支下面有很多的子分支。大部分的key代表的含义通过字面都可以看出来。 SYSTEM主要是需要root权限,DATABASE主要是需要
6、oracle权限。,Oracle Clusterware通过在OCR中集中存放配置信息,来解决健忘问题。无论在哪修改配置信息,最终修改的都是OCR内容。因为OCR非常重要,所有对OCR的操作必须确保OCR内容完整性。在Clusterware的运行过程中,并不是每个节点都能操作OCR。,具体说: 每个节点在内存中都有一份OCR内容的拷贝,叫做OCR Cache。每个节点都有一个OCR Process来读写OCR Cache。 只有一个节点的OCR Process能够读写OCR Disk,这个节点叫做OCR Master。这个节点的OCR Process负责更新本地和其他节点的OCR Cache。
7、 所有需要OCR内容的其它进程,比如OCSSD、EVM等都叫做Client Process,这些进程不会直接访问OCR Cache,而是向OCR process发送请求,借助OCR Process获得内容,如果想要修改OCR内容,也是由该节点的OCR Process向Master node的OCR Process提交请求,由Master OCR Process完成物理读写,并同步其他节点OCR Cache中的内容。,Voting Disk 这个磁盘主要用来记录节点中成员状态,在出现脑裂的时候,仲裁哪个Partition获得集群的控制权,而其他Partition必须被从集群中剔除。 通过运行下面
8、的命令可以获得Voting Disk的位置。,Clusterware后台进程 其中最重要的三个进程是CRSD、CSSD、EVMD。在安装Clusterware的最后阶段,会要求在每个节点中执行root.sh脚本,这个脚本会在/etc/inittab文件中最后三行添加三个后台进程的启动信息。 如果CRSD和EVMD出现异常,系统会自动重启这两个进程。但是如果CSSD进程异常,系统会立即重启。,Cluster Synchronization Service(CSS) init.cssd ocssd ocssd.bin Cluster Ready Service crsd.bin Event Man
9、ager Service evmd evmdlogger Oracle Notification Service(ONS) ons Process Monitor Daemon oprocd RACG racgmain、racgimon,OCSSD这个进程是Clusterware最关键的进程,如果这个进程出现异常,会导致系统重启。 通过多种心跳机制 实时监控集群健康状态 提供脑裂保护等基础集群服务 两种心跳机制 1、通过Private Network Heartbeat 2、通过Vlting Disk的Disk Heartbeat 两个心跳都有最大时延 对于Disk Heartbeat,这个时
10、延叫做IOT(I/O Timeout) 对于Network Heartbeat,这个时延叫做MC(MisCount) 都是以秒为单位,缺省时IOT大于MC,Oracle自动设置这两个参数,不建议用户手工修改。,CRSD CRSD是实现“高可用性HA”的主要进程,他所提供的服务叫做Cluster Ready Service。 Clusterware是位于集群层的组件,他要为应用层资源(CRS Resource)提供“高可用”。 Oracle clusterware必须要监控这些资源,并在这些资源运行异常时进行干预,包括关闭、重启、或者转移服务。CRSD进程提供的就是这些服务。 所有需要高可用的组
11、件,都会在安装配置的时候,以CRS Resource的形式登记到OCR中,OCR进程根据OCR中的内容,决定监控哪些进程、如何监控、出现问题时如何Failover这些资源,默认CRS会自动尝试重启资源5次,如果还是失败,则放弃尝试。 CRS Resource包括GSD(Global Service Daemon)、ONS(Oracle Notification Service)、VIP、Listener、Database、Instance和Service。前三者属于nodeapps、后面的属于Database-Related。因为前三者是和节点有关的。 GSD、ONS、VIP这三种服务是在安装
12、Oracle Clusterware的最后,执行VIP时创建并登记到OCR中的。 RAC则是各自的服务配置的时候注册到OCR中的。,EVMD 负责发布CRS产生的各种事件(Event)。 1、可以通过ONS发布给客户 2、Callout Script 某些事件产生以后,EVMD自动扫描特定的目录,并调用用户的脚本,具体调用是通过racgevt来实现的。 后面会讲到,如何把自定义的脚本提交给EVMD,以便在事务发生的时候,调用用户的处理脚本。 EVMD除了负责发布CRS进程产生的各种事件以外,还是CRSD和CSSD两个进程之间的桥梁。两个进程之间的通信就是通过EVMD进程完成的。,RACGIMO
13、N 这个进程负责检查数据库健康状况,负责Service的启动、停止、故障转移。这个进程会建立到数据库的持久连接,定期检查SGA中的特定信息,该信息由PMON进程定时更新。 上面提到的数据库其实就是实例。 OPROCD 这个进程叫做Process Monitor Daemon,如果在非Linux平台上,并且没有使用第三方的集群软件,会看到这个进程,这个进程检查节点的Processor Hang(CPU挂起),如果调度时间超过15秒,就认为CPU异常,会重启节点。在windows平台上,这个进程的服务名叫做OraFenceService。 在Linux平台上,我们使用hangcheck-timer
14、模块来实现。 当一个节点出现问题以后,我们需要对这个节点进行IO Fencing,因为一个节点有问题,也会影响RAC的正常对外提供服务,需要进行隔离。 对上面所讲的所有的进程进行分析以后发现,clusterware其实就是一个HA的作用。具体的RAC(LB)还是上层的进程实现的。,网络组件 1、Public NIC 2、Private NIC 专门用来进行节点间的通信:Network Heartbeat和Cache Fusion 单独的一个通道(单独的高带宽交换机) 大数据量、低延迟 很多种方式实现私有网络的联通,最便宜的即使G级以太网 3、VIP 每个节点上,除了需要有Public和Priv
15、ate以外,还需要有一个VIP,很多的应用都是建立在VIP之上的,例如Listener,TCP/IP模型 Oracle的TAF就是建立在VIP技术上,首先来讲一下TCP/IP四层协议。,Listener运行在应用层 IP和VIP都是IP层、IP层主要负责数据包的路由,不负责数据传送的完整性 传输层(TCP),提供数据传送的完整,接收端的TCP层收到数据包以后,必须给发送端一个确认消息,如果在指定的时间内发送端没有收到确认消息,发送端认为数据包丢失,重发数据包。如果几次重发以后都不能响应,TCP就认为网络出现问题,终止发送尝试,通知上层的应用,如果连接服务器使用的是SQL*Plus,则SQL*P
16、lus就会抛出连接错误。 上面是单实例中,使用IP而不是VIP 的情况下,使用的机制叫做(TCP/IP协议栈超时)。,VIP原理 如果没有使用VIP,Oracle客户端靠“TCP/IP协议栈超时”来判断服务器故障。 TCP/IP协议栈是作为OS Kernel的一部分实现的,不同的OS有不同的阈值。 Oracle引入了VIP,从而避开了对TCP协议栈超时的依赖。 IP和VIP最大的区别是:VIP 是浮动的、IP是固定的,VIP1,VIP2,Listener1,Listener2,VIP1,VIP2,Listener1,Listener2,1、CRS检测到节点2异常,触发Clusterware的重构,最后把节点2踢出集群,由节点1组成新的集群,虽然这个集群只有一个节点。 2、节点2的VIP转移到节点1,节点1的Public NIC就会有VIP1、VIP2两个VIP 和Public IP三个IP地址 3、访问节点2的数据包被顺利的转移到节点1,但是因为节点1的应用在VIP2上没有启动,也就是节点1没有对应的应用负责接收,这个错误马上反馈到客户端(不需要超时)。客户端根据故障切换配