诊断 Oracle Clusterware 和 RAC 组件

本文永久链接地址: https://www.askmaclean.com/archives/rac-clusterware-diag.html

RAC 调试中的一个黄金规则

  • 请始终确保各个节点具有完全相同的系统时间,这样才能实现以下目标:

便于进行日志信息分析

确保读取 GV$ 视图时获得准确结果

避免实例被过早逐出

  • 最好的建议方法是使用网络时间协议对各节点进行同步。

 

强烈建议在安装 RAC 之前就在所有集群节点上设置网络时间协议 (NTP)。这样可以使所有节点的时钟保持同步,并且便于根据时间戳以及对 GV$ 视图发出查询的结果对跟踪信息进行分析。

注:如果对时钟的调整超过 15 分钟,则可能导致实例被逐出。因此强烈建议在调整日期/时间之前,先关闭所有实例。

 

Oracle Clusterware 主要日志文件

Oracle Clusterware 将使用统一的日志目录结构来合并 Oracle Clusterware 组件日志文件。
这种合并结构简化了诊断信息收集过程,并有助于进行数据检索和问题分析。

本幻灯片显示了 Oracle Clusterware 用来存储其日志文件的主要目录:

  • CRS 日志位于 $ORA_CRS_HOME/log/<主机名>/crsd/。crsd.log 文件每隔
    10 MB 就进行一次归档(crsd.l01、crsd.l02…)。
  • CSS 日志位于 $ORA_CRS_HOME/log/<主机名>/cssd/。cssd.log 文件每隔
    20 MB 就进行一次归档(cssd.l01、cssd.l02…)。
  • EVM 日志位于 $ORA_CRS_HOME/log/<主机名>/evmd。
  • 取决于资源,具体日志位于 $ORA_CRS_HOME/log/<主机名>/racg 和 $ORACLE_HOME/log/<主机名>/racg 中。在最后一个目录中,imon_<服务>.log
    为各个服务每隔 10 MB 进行一次归档。系统为每个 RACG 可执行文件指定了一个专用子目录。该子目录的名称与该可执行文件的名称相同。

 

  • SRVM (srvctl) 和 OCR(ocrdump、ocrconfig、ocrcheck)日志位于 $ORA_CRS_HOME/log/<主机名>/client/ 和 $ORACLE_HOME/log/<主机名>
    /client/ 中。
  • 重要的 Oracle Clusterware 预警可以在 $ORA_CRS_HOME/log/<主机名> 目录的alert<节点名>.log 内找到。

 

 

诊断收集脚本

  • 用于收集所有重要日志文件的脚本应满足以下条件:

必须以 root 用户身份执行

位于 $ORA_CRS_HOME/bin/

名为 diagcollection.pl

  • 将在本地目录中生成以下文件:

basData _<主机名>.tar.gz

crsData _<主机名>. tar.gz

 

# export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

# export ORA_CRS_HOME=/u01/crs1020

# export ORACLE_BASE= =/u01/app/oracle

# cd $ORA_CRS_HOME/bin

# ./diagcollection.pl -collect

使用 diagcollection.pl 脚本可以从 Oracle Clusterware 安装过程中收集诊断信息。这些诊断提供了附加的信息,Oracle 技术支持可以使用这些信息来解决问题。该脚本位于 $ORA_CRS_HOME/bin 中。开始执行脚本之前必须以 root 用户身份登录并且必须设置以下环境变量:ORACLE_BASE、ORACLE_HOME、ORA_CRS_HOME、HOSTNAME。本幻灯片中的示例显示了如何调用该脚本以收集诊断信息。使用 –collect 选项调用该脚本时,该脚本将在本地目录中生成本幻灯片中提到的 4 个文件。basData.tar.gz 主要包含 $ORACLE_BASE/admin 目录中的日志文件。crsData.tar.gz 包含 $ORA_CRS_HOME/log/<主机名> 的日志文件。
ocrData.tar.gz 文件包含 ocrdump、ocrcheck 的结果以及 ocr 备份列表。oraData.tar.gz 包含 $ORACLE_HOME/log/<主机名> 的日志文件。
如果使用 -collect 选项调用该脚本,并且本地目录中已包括由先前某次运行生成的 4 个文件,则该脚本会询问您是否覆盖现有文件。还可以使用 –clean 选项来调用该脚本,以
清除本地目录中由先前某次运行所生成的文件。还可以调用该脚本,使其仅捕获日志文件的一个子集。为此,可以在 –collect 选项后添加额外的选项:添加 -crs 可收集 Oracle Clusterware 日志,添加 -oh 可收集 ORACLE_HOME 日志,添加 -ob 可收集 ORACLE_BASE 日志,而添加 –all 可收集所有日志。–all 为默认选项。–coreanalyze 选项可使您仅将生成的文件中的核心文件提取到文本文件中。

 

管理 RAC 中的诊断数据

Oracle RAC 实例出现的问题是要诊断的最难的问题类型。例如,您可能需要对多个实例的跟踪文件进行关联,并合并这些跟踪文件。Oracle Database Release 11g 包括一个高级错误诊断基础结构,用于收集和管理诊断数据,并使用基于自动诊断资料档案库 (ADR) 文件的资料档案库来存储数据库诊断数据。在共享磁盘上创建 ADR 基目录时,可将同一 Oracle RAC 数据库的所有实例置于 ADR 主目录中,还可将所有相应 ASM 实例置于同一 ADR 基目录下。由于一些 ADRCI 命令(如 SHOW INCIDENT)可以同时处理多个 ADR 主目录,因此通过共享存储,可使用 ADRCI 命令行工具对所有实例的诊断数据进行关联。

注:尽管未作要求,但还是建议您共享 RAC 数据库的 ADR 基目录。但是,如果使用共享的 Oracle 主目录,则必须共享 ADR 基目录。

 

集群验证:概览

  • 验证您是否有正确格式的集群对 Oracle Clusterware RAC 执行以下操作:

安装

配置

操作

  • 完整堆栈验证
  • 非干扰性验证
  • 诊断模式将进行查找,以确定导致任何验证任务失败的原因。
  • 界面简单易用:

登台期命令

组件命令

 

集群验证实用程序 (CVU) 随包含 Real Application Clusters 的 Oracle Clusterware 和 Oracle Database 10g 发行版 2 (10.2) 一起提供。提供 CVU 的目的是:在设置和配置过程中,允许您验证是否已正确安装和配置了成功安装 Oracle Clusterware 或 Oracle Clusterware 及 RAC 数据库所需的所有组件,并且在您需要更改 RAC 集群时随时为您提供实时帮助。

CVU 命令有两种:

  • 登台期命令属于 CVU 命令,用于测试系统设置,并测试是否已为成功的软件安装、数据库创建或更改步骤配置做好准备。还可以使用这些命令来验证是否已成功地完成了特定的集群配置步骤。
  • 组件命令是用来检查各个集群组件并确定其状态的 CVU 命令。

建议在安装 Oracle Clusterware 和 RAC 的过程中使用登台期检查。

此外,还可以在堆栈运行期间使用 CVU 来验证特定组件,或者隔离某个集群子系统以进行诊断。在诊断模式下运行时,CVU 将尝试确定导致任何验证任务失败的原因,以帮助诊断问题。

注:CVU 是一个非干扰性工具,因为它不会尝试修复所发现的任何问题。

 

集群验证登台期

登台期是指 Oracle Clusterware 或 RAC 部署过程中的一个特定阶段。在登台期中执行任何操作之前,必须先执行一组预定义的检查,以确保集群已准备好进入该登台期。这些检查称为该登台期的“预”检查。同样,完成某个登台期后也必须执行一组预定义的检查,以确保在该登台期中正确执行了操作。这些检查称为该登台期的“后”检查。可以使用 cluvfy stage -list 命令来列出可验证的登台期。所有登台期都包括预检查或后检查步骤,某些登台期还同时包含两者。有效的登台期选项和登台期名称包括:

  • post hwos:对硬件和操作系统进行后检查
  • pre cfs:对 CFS 设置进行预检查
  • post cfs:对 CFS 设置进行后检查
  • pre crsinst:对 CRS 安装进行预检查
  • post crsinst:对 CRS 安装进行后检查
  • pre dbinst:对数据库安装进行预检查
  • pre dbcfg:对数据库配置进行预检查

 

集群验证组件

  • RAC 集群的单个子系统或模块被称为 CVU 中的组件。
  • 可以对集群组件的可用性和完整性进行验证。
  • 组件可能很简单(如某个特定的存储设备),也可能很复杂(如 Oracle Clusterware 堆栈):

空间可用性

共享存储可访问性

节点连接

集群文件系统完整性

Oracle Clusterware 完整性

集群完整性

管理权限

对等对象兼容性

系统要求

 

$ cluvfy comp -list

CVU 支持组件验证。这一类的验证不与任何特定登台期相关联。组件的范围很广,既可以是可用磁盘空间等基本组件,也可以是 Oracle Clusterware 堆栈等复杂组件(跨多个子组件)。可以对集群组件的可用性、完整性或任何其它特定行为进行验证。可以使用 cluvfy comp -list 命令来列出可验证的 CVU 组件。

  • nodereach检查各节点之间的可访问性
  • nodecon检查节点连接
  • cfs检查 Oracle 集群文件系统完整性(OCFS2 1.2.1 版本和更高版本支持对文件系统的共享检查)
  • ssa检查共享存储的可访问性
  • space检查空间可用性
  • sys检查最低系统要求
  • clu检查集群完整性
  • clumgr检查集群管理器完整性
  • ocr检查 OCR 完整性
  • crs检查 CRS 完整性
  • nodeapp检查是否存在节点应用程序
  • admprv检查管理权限
  • peer与对等对象进行属性比较

 

集群验证位置

  • OTN 下载:

创建本地目录。

复制和提取 cvu_<OS>.zip

  • Oracle 软件 DVD:

Disk1 目录

runcluvfy.sh

  • Oracle Clusterware 主目录:

$ORA_CRS_HOME/bin/cluvfy

  • Oracle 主目录:

$ORACLE_HOME/bin/cluvfy

集群验证实用程序 (CVU) 最初在 Oracle Clusterware 10.2.0.1.0 发行版中发行。CVU 支持 Oracle Clusterware 和 RAC 产品的 11gR1、10gR2,以及 10gR1。可以通过三种不同的方式获得 CVU:

  • 通过 Oracle 技术网 (OTN):http://www.oracle.com/technology/products/database/clustering/cvu/cvu_download_homepage.html
    在这里,您需要下载程序包并将该程序包解压缩到本地目录 (<cvhome>)。您可以使用 <cvhome>/bin 中的 cluvfy 命令。根据需要,还可以设置 CV_DESTLOC 环境变量。该变量将指向所有节点上的可写区域。CVU 将根据此位置的需要尝试复制必要的位。如果未设置此变量,CVU 将使用 /tmp 作为默认目录。
  • 通过打包版本的 11.1 Oracle 软件 DVD。如果没有安装任何软件,则需要使用 runcluvfy.sh。可以在 Disk1 中找到它。
  • 它同时安装在 11.1 Oracle Clusterware 主目录和 RAC 主目录中。如果安装了 CRS 软件堆栈,则利用 cluvfy。如果安装了 CRS 软件,则可以在 $ORA_CRS_HOME/bin 下找到 cluvfy。

注:对于手动安装,只需要在一个节点上安装 CVU。在需要访问远程节点的执行过程中,CVU 会在远程节点上部署自身。

 

集群验证配置文件

$ cat cvu_config

# Configuration file for CVU

# Version: 011405

#

 

#CV_ORACLE_RELEASE=11gR1

 

#CV_NODE_ALL=

 

CV_RAW_CHECK_ENABLED=TRUE

 

CV_ASSUME_DISTID=Taroon

 

#CV_XCHK_FOR_SSH_ENABLED=TRUE

 

#ORACLE_SRVM_REMOTESHELL=/usr/bin/ssh

 

#ORACLE_SRVM_REMOTECOPY=/usr/bin/scp

 

可以使用 CVU 的配置文件来定义执行 CVU 所需的特定输入。配置文件的路径为 $CV_HOME/cv/admin/cvu_config。下面是 cvu_config 中支持的关键字列表:

  • CV_NODE_ALL如果设置了该关键字,则将指定当未安装 Oracle Clusterware 并在命令行中使用了 -n all 选项时应选取的节点列表。
  • CV_RAW_CHECK_ENABLED如果设置为 TRUE,则启用检查以检查 Red Hat 3.0 发行版或更高版本中共享的 SCSI 磁盘的可访问性。此共享磁盘可访问性检查要求在所有节点上安装 cvuqdisk rpm。默认情况下,此关键字被设置为 TRUE,并且共享磁盘检查为启用状态。
  • CV_ASSUME_DISTID指定 CVU 所使用的分发 ID。例如,要将 CVU 与 SuSE 9 ES 结合使用,请将该关键字设置为 Pensacola。
  • CV_XCHK_FOR_SSH_ENABLED如果设置为 TRUE,则将启用 X-Windows 检查,以使用 ssh 验证用户等同性。默认情况下,该项将被注掉,并且 X-Windows 检查为禁用状态。
  • ORACLE_SRVM_REMOTESHELL如果设置了该关键字,则指定 ssh/rsh 命令的位置以改写 CVU 的默认值。默认情况下,此项被注掉,工具使用 /usr/sbin/ssh 和 /usr/sbin/rsh。

注:如果 CVU 未找到配置文件中定义的关键字项,则将搜索与该关键字的名称匹配的环境变量,否则 CVU 使用默认值。

  • ORACLE_SRVM_REMOTECOPY:如果设置了该关键字,则指定 scp 或 rcp 命令的位置以改写 CVU 的默认值。默认情况下,此项被注掉,CVU 使用 /usr/bin/scp 和 /usr/sbin/rcp。

如果 CVU 未找到配置文件中定义的关键字项,则将搜索与该关键字的名称匹配的环境变量。如果设置了该环境变量,则 CVU 将使用它的值,否则将使用该实体的默认值。

要为 CVU 提供集群的所有节点的列表,可以在执行命令时使用 -n all 选项。CVU 将尝试按以下顺序获取节点列表:

  1. 如果供应商集群件可用,则 CVU 将使用 lsnodes 实用程序从供应商集群件中选择所有已配置的节点。
  2. 如果安装了 Oracle Clusterware,则 CVU 将使用 olsnodes 实用程序从 Oracle Clusterware 中选择所有已配置的节点。
  3. 如果既未安装供应商集群件,也未安装 Oracle Clusterware,则 CVU 将在配置文件中搜索 CV_NODE_ALL 关键字的值。

如果未安装供应商集群件和 Oracle Clusterware,并且配置文件中不存在名为 CV_NODE_ALL 的关键字,则 CVU 将为 CV_NODE_ALL 环境变量搜索值。如果未设置该变量,则 CVU 会报告错误。

 

集群验证:示例

$ cluvfy comp sys -n node1,node2 -p crs -verbose

$ cluvfy comp ssa -n all -s /dev/sda1

$ cluvfy comp space -n all -l /home/product -z 5G

$ cluvfy comp nodereach -n node2 –srcnode node1

$ cluvfy comp nodecon -n node1,node2 –i eth0 -verbose  

$ cluvfy comp admprv -n all -o user_equiv -verbose  

$ cluvfy comp nodeapp -n all -verbose

$ cluvfy comp peer -n all –verbose | more

 

本幻灯片显示了一些有趣的可能示例:

  1. 要在安装 Oracle Clusterware 或 RAC 之前验证最低系统要求,请使用 sys 组件验证命令。要检查安装 RAC 的系统要求,请使用 -p database 参数,要检查安装 Oracle Clusterware 的系统要求,请使用 -p crs 参数。要检查从 Oracle Database 10g 1 发行版 (10.1) 安装 Oracle Clusterware 或 RAC 的系统要求,请使用 -r 10gR1 参数。本例验证了在称为 node1 和 node2 的集群节点上安装 Oracle Clusterware 的系统要求。
  2. 要验证是否在集群数据库的各节点之间共享存储,或者要标识系统中可用并且能够在各集群节点之间共享的所有存储,请使用组件验证命令 ssa。本例使用 –s 选项指定了要检查的路径。
  3. 您计划在集群中每个节点的 /home/product 本地文件系统中安装其它软件,该软件在每个节点上需要 5 GB 的空间。如果每个节点的 /home/product 中有 5 GB 的可用空间,该命令将成功,否则,该命令将失败。

注:–verbose 选项可与任何命令结合使用。它主要用于在输出中为您提供更多的信息。

  1. 要验证是否可以从本地节点或任何其它集群节点访问集群节点,请使用组件验证命令 nodereach。本例尝试检查是否可以从 node1 访问 node2。
  2. 要通过所有可用网络接口或特定网络接口来验证集群节点之间的连接,请使用组件验证命令 nodecon。本例将检查 node1 和 node2 是否可以通过 eth0 网络接口进行通信。如果不使用 -i 选项,CVU 将搜索集群节点上的所有可用网络接口,查看接口所对应的 IP 地址和子网,获取适合用作 VIP 的接口列表以及适合用作专用互连的接口列表,并通过这些接口验证所有节点之间的连接。
  3. 要针对用户等同性、Oracle Clusterware 安装和 RAC 安装来验证与用户帐户和管理权限相关的问题,请使用组件验证命令 admprv。在 Linux 和 UNIX 平台上,本例将验证所有节点的用户等同性,方法是:首先使用 ssh,如果 ssh 检查失败,再使用 rsh。要仅使用 ssh 验证等同性,请使用 -sshonly 选项。默认情况下,等同性检查不会验证 X-Windows 配置,例如,当使用 DISPLAY 环境变量的设置禁用了
    X-forwarding 时。要在用户等同性检查过程中验证 X-Windows 的各个方面,请在运行该命令之前,在配置文件中将 CV_XCHK_FOR_SSH_ENABLED 关键字设置为 TRUE。使用 -o crs_inst 参数可验证您是否有权安装 Oracle Clusterware。可以使用 -o db_inst 参数验证安装 RAC 所需的权限,并可以使用 -o db_config 参数验证创建 RAC 数据库或修改 RAC 数据库配置所需的权限。
  4. 本例将验证在所有节点上是否均存在节点应用程序,即 VIP、ONS 和 GSD。要验证所有 Oracle Clusterware 组件的完整性,请使用组件验证命令 crs。要验证每个集群管理器子组件 (CSS) 的完整性,请使用组件验证命令 clumgr。要验证 Oracle 集群注册表的完整性,请使用组件验证命令 ocr。要检查整个集群的完整性,即验证集群中的所有节点是否都具有相同的集群配置视图,请使用组件验证命令 clu。
  5. 本例将对所有节点进行比较,并确定预选属性的值之间是否存在任何差异。如果发现所有节点上的设置都相同,则该命令将成功。还可以将 comp peer 命令与
    -refnode 选项结合使用,以针对参考节点比较其它节点的属性。使用此命令可以指定 –r 10gR1 选项。下面显示了一个截取的预选属性列表:
    各种组件(glibc、make、binutils、gcc、compat-db …)的总内存、交换空间、内核版本、系统体系结构、程序包存在性,”oinstall” 的组存在性,”dba” 的组存在性,”nobody” 的用户
    存在性。

注:对于登台期示例,请参阅本课程中的安装课程。

 

集群验证输出:示例

$ cluvfy comp crs -n all -verbose

Verifying CRS integrity

Checking CRS integrity…

Checking daemon liveness

Liveness of all the daemons

  Node Name     CRS daemon     CSS daemon       EVM daemon

  ————  ————-  —————  ———-

  atlhp9        yes            yes              yes

  atlhp8        yes            yes              yes

Checking CRS health…

Check: Health of CRS

  Node Name                           CRS OK?

  ———————————-  ————————

  atlhp9                              yes

  atlhp8                              yes

Result: CRS health check passed.

CRS integrity check passed.

Verification of CRS integrity was successful.

 

幻灯片显示了 cluvfy comp crs –n all –verbose 命令的输出。此命令用于检查整个 Oracle Clusterware 堆栈。

注:由于格式方面的原因,输出被截断。

 

 

Comment

*

沪ICP备14014813号

沪公网安备 31010802001379号