Oracle 11g RAC运维总结
1 术语解释
1.1 高可用(HA)
什么是高可用?顾名思义我们能轻松地理解是高度可用的意思,也说是说高可用(high availability)指的是运行时间能满足预计或期望的一个系统或组件,我们常听说的247365系统,这种系统追求一种不间断提供服务的目标,任何时候都不能停止服务,否则会给用户造成比较大的影响。在信息、通讯、互联网技术发展如此快的今天,越来越多的系统都希望成为一个高可用的系统,比如银行、证券系统等。
1.2 负载均衡(LB)
负载均衡(load balance)是指将业务的负载尽可能平均、合理地分摊到集群的各个节点,每个节点都可以处理一部分负载,并且可以根据节点负载进行动态平衡,提高各个节点硬件资源的利用率以及降低单节点因为负载过高而导致的故障。
1.3 RAC集群
RAC集群,全称Real Application Clusters,译为“实时应用集群”,是Oracle提供的一种高可用、并行集群系统,RAC除了具有高可用能力还有负载均衡能力,整个RAC集群系统由Oracle Clusterware (集群软件)和 Real Application Clusters(RAC)两大部分组成。 我们平时一直经常提的RAC,它仅仅是RAC集群中的一部分,是运行在集群软件Oracle Clusterware上的一个应用,就是数据库,它和集群软件的关系类似单机环境中应用程序和操作系统的关系。
1.4 CRS
我们知道RAC集群需要集群软件,那么CRS是什么呢?在Oracle 10g版本前,RAC集群所需的集群软件依赖于硬件厂商,在不同平台上实施RAC集群都需要安装和配置厂商的集群软件,而Oracle只提供了Linux和Windows平台上的集群软件,叫Oracle Cluster Manager。但从10.1版本开始,Oracle推出了一个与平台独立的集群产品:Cluster Ready Service,简称CRS,从此RAC集群的实施不再依赖各个硬件厂商,从10.2版本开始,Oracle将这个集群产品改名为Oracle Clusterware,在11g中又被称为GI(Oracle Grid Infrastructure),但我们叫惯了CRS,所以平时很多时候也就称之为CRS,这个产品并不局限用于数据库的集群,其他应用都可以借用其API轻易实现集群功能。
2 架构
2.1 RAC环境组成
2.1.1 硬件环境
整个RAC集群的硬件环境包括主机、共享存储、互联网络设备。
- 1.主机(节点)
一个RAC集群环境中至少有两台主机,也就是两个节点,每个节点的硬件配置应该都一样,每个节点至少配置两块物理网卡。 - 2.共享存储
在RAC集群中,最重要的是共享存储,RAC是一个“多实例、单一数据库”的架构,所有的节点共享一个数据库。数据文件、联机日志、参数文件、控制文件都必须放在共享存储上以保证每个节点的实例都能访问。每个节点必须安装HBA卡,然后通过光纤线和存储设备连接。 - 3.互联网络设备
- 1) 两块网卡:也就是上面所说的每个节点上必须至少配置两块物理网卡。一块网卡用于集群内部的私有通信,集群节点间数据块的传输都是通过这块网卡,我们称之为私有网卡,上面配的IP称为Private IP;另一块网卡用于对外服务,比如数据库的查询等,我们称之为公有网卡,上面配的IP称为Public IP。除此之外,每个节点还有第三个IP,我们称之为VIP(Virtual IP),在所有节点都正常运行时,每个节点的VIP会被分配到公有网卡上,当某个节点出现故障宕机时,这个节点的VIP会被移到还在正常运行节点的公有网卡上。
- 2) 网络交换机:整个RAC集群中需要几个网络交换机呢?个人认为至少两个。一个用于连接所有节点的公有网卡以提供对外的数据库服务,一个用于连接各个节点之间的私有网卡(当然Oracle官方也认为如果是两个节点,其实也可以通过网线直连的方式,但是生产环境中几乎不存在这种方式)以传递集群节点之间的心跳数据和数据库数据块(Cache Fusion)。
2.1.2 软件组成
概括来说,RAC集群的软件组成包含:操作系统、集群软件、集群文件系统、数据库软件。
- 1.操作系统
每个节点上所安装的操作系统必须是相同版本的,操作系统在RAC架构中所处位置是硬件与集群件中间。 - 2.集群件(CRS)
集群件是安装在操作系统之上的一个特殊软件,负责管理整个集群环境中的硬件资源,并为上层的RAC集群提供基础服务。它与上层应用(例如数据库)的关系类似于单机环境中操作系统和应用程序的关系。单机环境下,OS能代理应用程序对硬件访问,但是在集群中有多台计算机,把整个集群想象成一台虚拟的计算机,那集群件就是这台虚拟计算机上的操作系统,RAC是运行在它上面的一个应用程序。 - 3.集群文件系统
RAC集群中有很多的文件必须放在共享存储上,保证所有节点都能访问。这就需要对节点的访问进行控制,普通的文件系统并不支持集群功能,必须采取特殊的存储策略。在10g以前,Oracle只提供了对裸设备的支持,并没有提供集群文件系统,但从Oracle 10g开始,Oracle提供了OCFS和ASM两种集群文件系统,后者在现在的环境中用的最多,也最为流行。 - 4.数据库软件
这个就是rdbms软件了,只有安装了数据库软件,我们才能创建数据库,存储数据,对外提供数据服务。
这里附上一张RAC集群简单的拓扑图:
2.2 CRS组成
Oracle Clusterware,在11g中又被称为GI(Oracle Grid Infrastructure),我们这里统一直接称之为CRS好了,它由磁盘文件、后台进程、网络组件组成。
- 1.磁盘文件
OCR:OCR(Oracle Cluster Registry)是为了避免每个节点的配置信息不同步而保存了整个集群的配置信息,且整个集群只有一份配置,所有节点共享,配置信息以“Key-value”的形式保存其中。当集群配置需要发生改变时,每个节点都有一个OCR Process来读取OCR Cache中的内容,而只有一个节点(OCR Master)有权限读写OCR Disk的内容,然后同步到本地和其他节点的OCR Cache。
Voting Disk:Voting Disk这个文件主要用于记录各个节点的状态,以防在某个或某几个节点出现问题时,决定哪部分节点具有集群的控制权,而把其他节点从集群中剔除,从而能够继续正常地对外提供服务。 - 2.CRS后台进程
其中最重要的三个进程是CRSD、CSSD、EVMD,分别对应了CRS、CSS、EVM三个服务,而每个服务又是由一系列的模块组成的,我们可以通过crsctl命令来查看有哪些模块组成,如查看css服务,crsctl lsmodules css。那么这三个进程又是什么时候启来的呢?在安装Clusterware的最后阶段,会要求在每个节点中执行root.sh脚本,这个脚本会在/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 run >/dev/null 2>&1 </dev/null
h3:35:respawn:/etc/init.d/init.crsd run >/dev/null 2>&1 </dev/null
如果CRSD和EVMD出现异常,系统会自动重启这两个进程。但是如果CSSD进程异常,系统会立即重启。罗列Linux和Unix中各个服务所对应的进程如下:
以Oracle 11g在linux上为例来查看一下各个进程:
[oracle@node1 ~]$ ps -ef|grep css
root 4408 1 0 04:23 ? 00:00:05 /oracle/app/grid/product/11.2.0/bin/cssdmonitor
root 4427 1 0 04:23 ? 00:00:05 /oracle/app/grid/product/11.2.0/bin/cssdagent
grid 4445 1 0 04:23 ? 00:00:56 /oracle/app/grid/product/11.2.0/bin/ocssd.bin
[grid@node1 bin]$ ps -ef|grep crs
root 4767 1 0 04:24 ? 00:00:20 /oracle/app/grid/product/11.2.0/bin/crsd.bin reboot
[grid@node1 bin]$ ps -ef|grep evm
grid 4623 1 0 04:24 ? 00:00:07 /oracle/app/grid/product/11.2.0/bin/evmd.bin
grid 4861 4623 0 04:24 ? 00:00:00 /oracle/app/grid/product/11.2.0/bin/evmlogger.bin -o /oracle/app/grid/product/11.2.0/evm/log/evmlogger.info -l /oracle/app/grid/product/11.2.0/evm/log/evmlogger.log
- 我们来看一下各个进程的作用:
- OCSSD
进程是Clusterware最关键的进程,如果出现异常会导致系统重启,这个进程提供CSS(Cluster Synchronization Service)服务,它通过多种心跳机制实时监控集群的健康状态,提供集群的基础服务功能。 - CRSD
是实现高可用的主要进程,它提供了CRS(Cluster Ready Service)服务。这些服务包括Clusterware上集群资源的关闭、重启、转移、监控等。集群资源分为两类:一类是Nodeapps型的,就是说每个节点只需要一个就行,这类有GSD(Global Service Daemon)、ONS(Oracle Notification Service Daemon)、VIP、Listener;另一类是Database-Related,就是和数据库相关,不受节点限制,这类有Database、Instance、Service等。 - EVMD
该进程负责发布CRS产生的各种事件,同时也是CRSD和CSSD两个进程之间的桥梁。 - RACGIMON
该进程负责检查数据库健康状态,负责Service的启动、停止、故障转移等。 - OPROCD
在非Linux平台,且没有使用第三方集群软件时才有该进程,用来检测节点的CPU挂起,起过1.5秒会重启节点。 - OHASd
Oracle在11gR2引入了OHASd(Oracle High Availability Services Daemon,Oracle高可用服务后台进程),再由它来启动其他的集群件守护进程。
- OCSSD
- 3.网络组件
我们从RAC集群架构中的硬件环境组成已经知道,集群环境中的节点上必须配置两块物理网卡,在公网网卡上面我们除了设置公有IP外还设置了VIP,Oracle的TAF(所谓TAF就是连接建立后,如果某个实例发生故障,连接到这个实例上的用户会被自动迁移到其他健康实例上,对于应用程序而言,这个迁移过程透明,不需要人工介入)是建立在VIP技术上的,它与IP最主要的不同就是VIP是浮动的,IP是固定的,当某个节点宕机时,该节点上的VIP自动会移到健康节点的公网网卡上,所能对该节点的连接自动会移到健康节点。
VIP还有几个特点需要我们注意一下:- a) VIP是在Clusterware安装最后阶段通过脚本vipca创建的;
- b) VIP作为一个Nodeapps类型的CRS资源注册到OCR,并由CRS维护状态;
- c) 每个节点的监听会同时在Public网卡的Public Ip和VIP两个地址上监听;
- d) 客户端的tnsnames.ora一般配置指向节点的VIP
2.3 单实例与RAC环境
- 1、 单实例与RAC环境对比
- 2、 RAC新增的组件和后台进程
RAC的环境中虽然每个实例都有自己的buffer cache与shared pool,但它们现在已经变成全局的,需要特殊处理才能做到没有冲突、无损坏地管理资源,所以也新增了一些单实例环境中没有的组件,最主要的有以下两部分:- GRD
RAC实例的SGA中多了一个GRD(Global Resource Directory)部分,Oracle数据库中数据的操作都是在内存SGA中完成的,与传统的单实例数据库不同,RAC有多个实例,每个数据块在任何一个实例中都有拷贝,RAC必须知道这些拷贝的分布、版本、状态,而GRD就是保存这种信息的内存区。值得注意的是,每个节点都只有部分GRD内容,所有节点合在一起才能构成完整的GRD。 - 后台进程
RAC也有和单实例中的DBWR、LGWR、ARCn、CKPT这些后台进程,此外还有一些RAC特有的后台进程:
lms
该进程是Cache Fusion的主要进程,负责数据块在实例间的传递,对应的服务是GCS(Global Cache Service),可以通过GCS_SERVER_PROCESSES参数来控制进程的数量,默认是2个,取值范围为0~9。
lmd
该进程提供GES(Global Enqueue Service)服务,在多个实例间协调对数据块的访问序,保证数据的一致性访问,和LMSn进程以及GRD共同构成RAC的核心功能Cache Fusion。
lck
这个进程负责Non-Cache Fusion资源的同步访问,每个实例都有一个LCK进程。
lmon
各个实例的LMON进程都会定期通信,检查集群中各节点的健康状态,当某个节点出现故障,该进程负责集群重构、GRD恢复等,它提供的服务是CGS(Cluster Group Services)。
diag
Diag进程监控实例的健康状态,并在实例出现运行错误时收集诊断数据记录到Alert.log日志中。
GSD
这个进程负责从客户端工具,比如srvctl接收用户命令,为用户提供管理接口。
- GRD
3.Oracle 11g RAC集群搭建
3.1. 配置网络
3.1.1网络划分
Interface | RAC1 | RAC2 |
---|---|---|
Public IP | 192.168.88.100 | 192.168.88.101 |
Private IP | 192.168.137.128 | 192.168.137.129 |
VIP | 192.168.88.213 | 192.168.88.214 |
SCAN | 192.168.88.200 | 192.168.88.200 |
此时可以由192.168.137.128远程ssh到192.168.88.100,表示两块网卡都能用
进入rac1的/etc/hosts文件,做以下配置
此时在终端ping rac1,结果如下所示,这表示我们上一步的修改已经生效了
3.1.2 划分用户和组
Group | grid | oracle |
---|---|---|
oinstall | ✔ | ✔ |
dba | ✔ | ✔ |
oper | ✔ | |
asmadmin | ✔ | |
asmdba | ✔ | ✔ |
asmoper | ✔ |
分别用grid用户和oracle用户管理集群软件和关系型数据库软件.
3.1.3 目录划分
Grid Infrastructure
export HOME=/home/grid
export ORACLE_BASE=/u01/gridbase
export ORACLE_HOME=/u01/grid
Oracle Database
export HOME=/home/oracle
export ORACLE_BASE=/u01/oracle
export ORACLE_HOME=/u01/oracle