Oracle RAC技术随笔1

来源:互联网 发布:mac装的xp怎么安装win7 编辑:程序博客网 时间:2024/06/14 11:29

本文档主要是总结Oracle RAC技术。

rac数据库在8i的时候已经被提出,不过那个时候内存融合技术还不成熟,只能实现内存读,内存写暂时还不支持。那个时候orac rac还处于OPS(Oracle Parallel Server)阶段。到了9i的时候,真正实现内存读写技术,为了实现cache fusion技术GRD(Global Resource Directoty )被引入,在整个系统中,控制文件类似于votedisk功能,每个实例都会向控制文件注册自己的信息,同时通过控制文件获取实例列表和实例状态信息,这个功能被称作CGS(cluster Group Service),CGS这些功能主要通过LMON后台进程来实现的。其中 GCS内存块负责对PCM资源(数据块)访问和管理;GES内存块主要负责对non-PCM资源(队列)的访问和 管理。GCS主要由LMS进程实现,GES功能主要由LMD进程来实现。
这里写图片描述
oracle rac到10g才算完整,在10g之前都需要第三方厂家提供集群管理服务。10g提出了一个集群管理软件-CRS(cluster ready service ),这时oracle 能够提供系统层面和数据库层面的集群服务。

CRS :

作为集群层面的服务,运行在每个节点上,负责维护集群一致性,管理集群资源。主要分为CSS(Cluster Sync Service),CRS(Cluster ready Service)和EVM(Event Manager)。
CSS 主要负责和维护集群一致性,通过ocssd守护进程来实现,ocssd由oracle用户启动运行。获取节点列表和节点状态信息。
CRS主要负责对集群所有的应用进行管理,实现高可用性。主要通过crsd守护进程来完成,由root用户启动运行。crsd会通过OCR中记录的信息获取集群节点列表以及集群需要管理资源的列表,一般包括 数据库资源,ASM,监听,VIP,ONS,gsd和数据库服务。CRSD通过对应的racg组件对所有的应用程序进行管理,包括启动,停止,检查和删除操作。
EVM主要负责产生 并记录集群事件信息,并在节点之间传递。主要通过evmd守护进程来完成,由oracle用户来启动运行。
而从RAC数据库的角度来看,内存融合技术并没有太大的改变,最主要的变化有DRM ( Dynamic Resource Mastering)和SCN BOC ( Broadcast-On-Commit)。DRM的出现使得GCS资源的主节点 信息可以根据应用程序 在不同节点上的访问频率而动态地在不同节点之间进行迁移。SCN BOC的出现使得在 实例之间传播 SCN 变得更加实时和高效,也使得队C数据库能够成功地应用在超高并发量、 高反应时间的 OLTP系统中。
可以将llgR2版本的集群 管理软件分成:集群初始化组件 、集群存储管理组件和应用程序组件。
集群初始化组件负责完成对集群的初始化工作,主要包括:启动ohasd守护进程, bootstrap本地节点,启动ocssd,构建集群 并维护集群一致性。
集群存储管理组件负责管理集群的共享存储一ASM磁盘组,主要包括:启动ASM实例,挂载ASM磁盘组,管理 ASM实例和磁盘组。 需要说明的是,在llgR2版本中,OCR和VF也可以保存在ASM磁盘组中。
应用程序组件负责管理集群当中的应用程序资掠,主要包括:启动CRSD守护进程 ,通过OCR中的信息启动并管理集群中的所有应用程序资源,实现应用程序资源的高可用性。
通过下图了解llgR2集群管理软件的各个组件的基本结构:
这里写图片描述
从上面的图片中可以看到,在llgR2这个版本中,ohasd变成了一切的源头,所有的组
件都以资源的形式存在,而每个资源都由对应的代理进程进行管理。 当然,ohasd除外。 在 上图的资源当中,集群初始化组件包括的资源有:ora.gipc、ora.gpnp、ora.mdns、ora.ctss、 ora.asm、ora.cssd、ora.cssdmonitor等。 集群存储管理组件包括的资源有:ora.asm、ora.<磁盘组名>.dg等。应用程序组件包括的资源有:ora.crsd、ora.LISTENER.ls町、ora.netl. network、ora.< 节点名>.vip、ora.scan. ip、ora.gns、ora.gns.vip、ora.ons、ora.scan_ listener.Ism、ora.<数据库名>.db,ora.<数据库名>.<服务名>.srv 。
LMHB 进程是l lgR2 版本中新出现的后台进程,用于监控和内存融合相关的所有后台进程,当这些进程当中的一个或多个出现性能问题时,LMHB通过终止阻塞进程或者终止实例的方式来避免出现数据库挂起的问题。
12C 最大的新特性就是Flex ASM 和Flex Cluster。Flex ASM 使得数据库和ASM 实例彻底摆脱了l 对l 的关系,也就是说在集群中只有一部分节点运行ASM 实例,数据库实例不再依赖本地节点的ASM 实例。Flex Cluster 把集群中的节点分成了HUB 节点和LEAF 节点,这使得集群的组织结构更加松散,集群可以包含的节点更多,而且集群可以管理的应用程序种类更多。
从数据库的角度来讲,12C 最大的新特性莫过于多租户(Mu ltitenant) 和in-memory 选项。
多租户概念的出现彻底打破了传统数据库的架构,使得数据库可以像一个通用的可插拔设备
一样灵活地在各个conta in er 数据库间进行plug 和unplug 操作。同时,12C 作为全世界唯一一
款为云应用设计的数据库,也为DaaS 和其他的云服务提供了坚实的技术基础。12C 的另外
一个新特性一一IN-Memory 选项绝对是突破性的,它是世界上第一款同时支持行存储和列存
储的数据库软件(也就是用户经常提到的双模式),同时也是唯一一款可以同时支持OLTP 和
OLAP 应用的数据库软件。
这里写图片描述
这里写图片描述

ASM:

ASM 作为存储层面的服务,负责集群和应用程序的数据存储和管理。
ASM管理是通过ASM INSTANCE来实现的,通过ASM磁盘组来实现磁盘管理。在10g的时候CRS和votedisk还不支持ASM。
在oracle 11g R2开始,建议角色权限分离管理,把oracel数据库和GI分用户,分权限个离管理,
. oinstall:这个组是GI和数据库软件的拥有者组。
. dba:这个组是数据库的 dba组,对 数据库具有最高权限。
. asmdba:这个组是ASM实例的 dba组,可以启动/关闭实例,挂载/卸载ASM磁
盘组。
. asmadmin :这个组是ASM的管理员组,它包含asmdba的全部权限,同时还 可以增
加/删除ASM磁盘、磁盘组等。

Inventory目录:

实际上就是一台主机上的eoracle产品清单,在oracle做升级或安装其他版本的时候会读取到,通过/etc/oraInst.loc记录其位置,其核心文件是inventory.xml,它位于<inventory_loc>/ContentsXML路径下。如果此文件损坏 可以使用runlnstaller 工具(这个工具位于<gi_ home>/oui/bin 路径下)重建 inventory.xml。
添加gi_home:
$./runinstaller -silent -ignoreSysPrereqs -attachHome ORACLE HO阻=” /uOl/app/11.2. 0/gri d” O RACLE HOME NAME= “oraGillHome l” C LUSTER NODES=test2, test3, test4 CRS=true ” INVENTORY_LOCATION=/uOl/app/orainventory” LOCAL_NODE=test2
添加rdbms_home:
. /runinstaller -silent -ignoreSysPrereqs -attachHome ORACLE HOME=”/u02/app/oralce/product/11.2.0/db_1” oracle_home_name=”oradbHome2” cluster_nodes=test1,test2 crs=true INVENTORY LOCATION=”/uOl/app/oralnventory”local_node=test2

lcoal Inventory 目录:

Local Inventory 用于保存某一个oracle_home 下所安装的组件清单, 它位于<oracle_home>/inventory 下。由于Local Inventory 针对特定的软件主目录, 所以并不存在inventory.xml 文件。文件<oracle_home>/inventory/ContentsXML/comps.xml 记录了对应主目录下安装的所有组件。

cluvfy工具:

cluvfy ( Cluster Verify), 简称cvu , 是随Oracle 集群管理软件一起发布的检查工具。cluvfy 能对集群提供非常广泛的检查, 包括: OS 硬件配置、内核参数设置、用户资源限制设置、网络设置、NTP 设置、RAC 组件健康性等。cluvfy 在进行检查时并不会修改系统配置, 所以不会对系统造成影响。
比如:cluvfy stage -pre crsinst -n nide1,node2 -r 11gr2 -verbose
-r :检查的版本 10g R1 ,10gR2 ,11gR1, 11gR2.
-verbose 列出详细检查内容
pre crsinst :安装集群管理软件(GI)之前。
postcrsinst:安装集群管理软件之后。
pre dbinst:安装数据库软件之前。
pre dbcfg:创建数据库之前。

root.sh 脚本

jhdb02-> more oracle/product/11.2.0/db_1/root.sh#!/bin/sh. /u01/app/oracle/product/11.2.0/db_1/install/utl/rootmacro.sh "$@". /u01/app/oracle/product/11.2.0/db_1/install/utl/rootinstall.sh/u01/app/oracle/product/11.2.0/db_1/install/unix/rootadd.sh## Root Actions related to network#/u01/app/oracle/product/11.2.0/db_1/network/install/sqlnet/setowner.sh ## Invoke standalone rootadd_rdbms.sh#/u01/app/oracle/product/11.2.0/db_1/rdbms/install/rootadd_rdbms.sh/u01/app/oracle/product/11.2.0/db_1/rdbms/install/rootadd_filemap.sh 

1 . /uOl/app/11.2.0/grid/install/utl/rootmacro.sh 负责一些和 gi_home 相关的验证工作。
2 . 0 /uO 1/app/l l .2.0/grid/install/utl/rootinstall.sh 负责创建一些本地文件。
3 . /uOl/app/11.2. 0/grid/network/install/sqlnet/setowner.sh 负责创建 GI 相关的临时文件。
4./uOl/app/11.2.0/grid/rdbms/install/rootadd _rdbms.sh 负责验证一些文件的权限。
5 . /uO l/app/11.2.0/grid/rdbms/install/rootadd _ filemap.sh 负责验证一些文件的权限。
root.sh脚本核心脚本是 /u01/app/ 11.2. 0/ grid/ crs/ config/rootconfig.sh,这个脚本调用/crs/install/rootcrs.pl脚本来初始化和配置集群。

jhdb02-> more /u01/app/11.2.0/grid/crs/config/rootconfig.sh

#!/bin/shORACLE_HOME=/u01/app/11.2.0/gridROOTSCRIPT_ARGS=""#if upgrade/force/verbose command line args are passed, set ROOTSCRIPT_ARGS accordingly.for var in "$@"do  if [ "$var" = "-upgrade" ]; then    ROOTSCRIPT_ARGS=$ROOTSCRIPT_ARGS"$var "  elif [ "$var" = "-force" ]; then    ROOTSCRIPT_ARGS=$ROOTSCRIPT_ARGS"$var "  elif [ "$var" = "-verbose" ]; then    ROOTSCRIPT_ARGS=$ROOTSCRIPT_ARGS"$var "  fidone. $ORACLE_HOME/install/utl/rootmacro.shSU=/bin/suSW_ONLY=falseADDNODE=falseGI_WIZARD=falseHA_CONFIG=falseRAC9I_PRESENT=falseCMDLLROOTSH_CMD=$ORACLE_HOME/crs/install/cmdllroot.shCONFIGSH_CMD="$ORACLE_HOME/crs/config/config.sh"ROOTHASPL="$ORACLE_HOME/perl/bin/perl -I$ORACLE_HOME/perl/lib -I$ORACLE_HOME/crs/install $ORACLE_HOME/crs/install/roothas.pl"ROOTCRSPL="$ORACLE_HOME/perl/bin/perl -I$ORACLE_HOME/perl/lib -I$ORACLE_HOME/crs/install $ORACLE_HOME/crs/install/rootcrs.pl"ROOTSCRIPT=""ISLINUX=falseEXITCODE=0# For addnode casesCRSCONFIG_ADDPARAMS=$ORACLE_HOME/crs/install/crsconfig_addparams# If addparams file existsif [ -f $CRSCONFIG_ADDPARAMS ]; then  # get the value of LAST[tail -1] occurrence of CRS_ADDNODE=<value> in the file  CRS_ADDNODE=`$AWK -F"=" '{if ($1=="CRS_ADDNODE") print $2}' $CRSCONFIG_ADDPARAMS | tail -1`  # If value for CRS_ADDNODE is found  if [ "$CRS_ADDNODE" = "true" ]; then    # set ADDNODE to true    ADDNODE=true  fifi# if addnode then reset SW_ONLY and HA_CONFIG variables to falseif [ "$ADDNODE" = "true" ]; then  SW_ONLY=false  HA_CONFIG=falsefiif [ `$UNAME` = "Linux" ]; then   ISLINUX=truefi# If s/w only#   print the commands user needs to execute to perform GI config# # else if Wizard or Install+Config#   if Wizard#     relink rac_on ioracle# #   if HA Config#     set root script to roothas.pl#   else#     set root script to rootcrs.pl# #   if upgrade#     set upgrade flag to '-upgrade'#   else#     set upgrade flag to ''# #   execute root script with upgrade flag#   exit if failed# #   if CRSConfig and Upgrade#     update inventory to set CRS=false for old home# #   Update inventory with nodelist and CRS=true#if [ "$SW_ONLY" = "true" ]; then  $ECHO  $ECHO "To configure Grid Infrastructure for a Stand-Alone Server run the following command as the root user:"  $ECHO "$ROOTHASPL"  $ECHO  $ECHO  $ECHO "To configure Grid Infrastructure for a Cluster execute the following command:"  $ECHO "$CONFIGSH_CMD"  $ECHO "This command launches the Grid Infrastructure Configuration Wizard. The wizard also supports silent operation, and the parameters can be passed through the response file that is available in the installation media."  $ECHOelse  if [ "$GI_WIZARD" = "true" ]; then    $ECHO "Relinking oracle with rac_on option"    $SU $ORACLE_OWNER -c "$ECHO \"rootconfig.sh: Relinking oracle with rac_on option\" ; $ORACLE_HOME/crs/config/relink_rac_on $ORACLE_HOME $MAKE" >> $ORACLE_HOME/install/make.log 2>&1    EXITCODE=$?    if [ $EXITCODE -ne 0 ]; then      $ECHO "Relinking rac_on failed"      exit $EXITCODE    fi  fi  if [ "$ISLINUX" = "true" -a "$RAC9I_PRESENT" = "true" ]; then      $CMDLLROOTSH_CMD  fi  if [ "$HA_CONFIG" = "true" ]; then    ROOTSCRIPT=$ROOTHASPL  else    ROOTSCRIPT=$ROOTCRSPL  fi  #Passing the ROOTSCRIPT_ARGS constructed to rootscripts.  $ROOTSCRIPT $ROOTSCRIPT_ARGS  EXITCODE=$?  if [ $EXITCODE -ne 0 ]; then    $ECHO "$ROOTSCRIPT execution failed"    exit $EXITCODE  fifiexit 0

可以看到完成初始化和配置集群工作的是rootcrs.pl脚本,气记录日志位于<gi_home>/cfgtoollogs/crsconfig/rooters_<节点名>.log。
rootcrs.pl工作 :
1 .在配置集群之前,root.sh开始读取集群的初始化配置参数文件 /crs/install/crsconfig_params
2 .检查集群节点vip信息
3 . 检查集群节点列表新
4 . 网络配置
5 . 集群时区
6 . root.sh 检查点被更新
从 11.2.0.2 版本开始, root.sh 在运行时会产生一个检查点( Check point )文件,这样在下次运行root.sh的时候,系统就先读取这个检查点文件能很清楚的知道上次运行脚本的情况,而不必要把上次配置的文件都测地删除掉才能重新运行 root.sh,极大地节省了GI安装时间。
7 . 创建OLR,更新文件
8 . gpwallet和profile被成功创建
9 . 复制集群启动脚本init。nasd到 /etc/init.d
10 . 启动 GI 的记录 h 1 :35 :r espawn:/etc/init.d/init.ohasd run >/dev/null 2>& 1 11 . 集群的初始化资源被加载到OLR中
12 . CSS以exclusive模式启动
13 . ASM实例被创建,用户存放OCR和votedisk磁盘组被创建,之后OCR被初始化成功,CRSD被启动。
………………

OHAS( Oracle High Avail油ility Service)

首先, 大家可以通过下图了解llgR2版本中GI组件之间的启动关系,只介绍由ohasd对应的代理进程启动的资源.
这里写图片描述

rac database :RAC集群数据库通过ASM实例管理数据提供对外服务。