浅谈Oracle RAC – OHAS组件

懒惰了一周没有更新博客。这两天天气不好,索性利用今天下午的时间继续写一篇关于OHAS组件的介绍。

之前我们多次提到了OHAS组件是GI的根守护进程。这个组件是在GI 11.2版本中引入的。随着这个组件的引入,集群的启动方式和资源管理方式发生了根本的改变。

我们先来看一下OHASD启动了哪些进程。

从上图中,我们可以看到OLR(Oracle Local Registry)。从英文全称可以知道,这是一个注册表信息。是为OHASD提供集群配置信息和初始化资源的定义信息。OLR 存在于本地磁盘上,我们可以通过 /etc/oracle/olr.loc 文件获得 OLR 文件的位置信息。OLR文件是个二进制文件不可读。我们可以通过以下命令来生成一个OLR的转储文件,该文件是可读的。

[root@node1 ~]# ocrdump -local

从转储文件的内容我们可以知道OLR文件配置了诸如GI home,集群版本,HAIP等信息。

在这里我想介绍一下我比较感兴趣的部分就是集群版本信息的内容。我们先来查看一下OLR关于版本信息的记录。

[SYSTEM.version.localhost.patchlevel]
UB4 (10) : 724960844
SECURITY : {USER_PERMISSION : PROCR_ALL_ACCESS, GROUP_PERMISSION : PROCR_READ, OTHER_PERMISSION : PROCR_READ, USER_NAME : root, GROUP_NAME : root}
...
[SYSTEM.version.activeversion]
ORATEXT : 19.0.0.0.0
SECURITY : {USER_PERMISSION : PROCR_ALL_ACCESS, GROUP_PERMISSION : PROCR_READ, OTHER_PERMISSION : PROCR_READ, USER_NAME : root, GROUP_NAME : root}

从上面的内容我们可以看到patchlevel的信息和activeversion的信息。

我们知道在解决节点间patch不一致的问题的时候经常会用到以下命令。

kfod op=patchlvl
crsctl query crs releasepatch
crsctl query crs softwarepatch
crsctl query crs activeversion

我们在我的测试环境中来分别执行以上命令。

[root@node1 ~]# kfod op=patchlvl
-------------------
Current Patch level
===================
724960844[root@node1 ~]# crsctl query crs releasepatch
Oracle Clusterware release patch level is [724960844] and the complete list of patches [29401763 29517242 29517247 29585399 ] have been applied on the local node. The release patch string is [19.3.0.0.0].[root@node1 ~]# crsctl query crs softwarepatch
Oracle Clusterware patch level on node node1 is [724960844].[root@node1 ~]# crsctl query crs activeversion
Oracle Clusterware active version on the cluster is [19.0.0.0.0]

当打补丁的时候,首先需要将补丁信息更新到OLR中,在所有节点完成补丁安装后会在最后一个节点将补丁信息更新到OCR中。只有当各个节点的OLR中的补丁版本信息与和OCR中的一致的时候,补丁安装才算成功,集群才会正常启动。一旦出现patchlevel不一致的情况,就需要通过以上命令收集补丁信息,如果能够通过rollback补丁修复的则需要rollback掉所有节点的问题补丁。有一些极端情况可能无法修复时,需要重新安装GI软件。

关于OLR的备份和恢复的方法,我们这里只给出命令。

ocrconfig -local -manualbackup
ocrconfig -local -restore<OLR备份文件>

我们从上图可以看到,OHASD分别启动了3个代理进程和1个cssdmonitor资源。

从cssdagent这个代理进程的名字,我们就能猜测到这个代理进程是用来管理CSS组件的进程。而cssdmonitor这个资源的作用也正如其名字所表示的那样,它是用来监控CSS组件的。我们在以后介绍脑裂的部分会进一步说明cssdagent和cssdmonitor的作用,这里不做展开讨论。

接下来我们来看一下orarootagent管理的资源有哪些。

这里面的osysmond和ologgerd进程实际上是ora.crf资源的进程。osysmond收集OS的资源信息,ologgerd则是负责将osysmond收集到的信息写入GIMR中。从12.1开始引入了MGMTDB这个资源,GIMR数据文件则被存储在了MGMTDB中。在解决集群问题时,必不可少的是要收集OS的资源使用信息,所以甲骨文推荐安装使用OSwatcher工具。但有些环境确实没有安装任何监控OS资源信息的工具,这时候我们可以借助ora.crf收集到的信息调查故障。但是这里需要说明的是,ora.crf收集的信息只是对OSwatcher工具的一个补充,其涵盖的信息无法取代OSwatcher收集的信息。比如我们在调查是否是CPU问题导致集群夯的问题时,只是查看ora.crf收集到的信息有时是不够的。因为OS调度CPU时也是存在bug的。比如 vmstat 的 r列 显示了很高的数值,代表排队等待执行的进程数很多,但是 mpstat 却显示很多CPU处于闲置状态,这说明OS并没有正确调度CPU去处理这些待执行的进程。类似这种信息是无法从ora.crf中确认到的。所以甲骨文依然推荐安装使用OSwatcher。

orarootagent还管理CRS组件,这部分内容我们会找个专题去介绍CRSD,这里不做展开。

从上图中我们可以看到diskmon和ACFS Drivers的内容。diskmon是与Exadata相关的资源,我们这里不做研究。ACFS Drivers则是与Storage相关的内容,我们以后会专题介绍。

这里面还有一个CTSS(Cluster Time Synchronize Service)组件。它是负责同步集群节点时间的组件。GI管理的集群作为一个整体对外服务,需要集群内的各个计算机的时间是同步的。因为集群各节点时间无法同步时,可能出现数据库实例可能发生hang或者crash的现象。

在11.2版本之前,GI是没有自己的时间同步的机制的,那时候甲骨文一直依赖OS的NTP等机制。到了11.2之后,甲骨文开发了自己的时间同步机制CTSS。CTSS兼容了NTP等第三方软件,其工作原理如下:

  1. 集群会选择一个节点作为CTSS的参考点。其它节点参考这个节点的时间进行同步。
  2. CTSS在运行时会查看节点中是否有第三方的时间同步机制。如果发现NTP等存在,CTSS则自动变成Observer模式。在这种模式下,CTSS不会修改系统时间。而如果在节点中没有监测到第三方时间同步机制的时候,CTSS会变成Active模式。
  3. 在所有节点中,CTSS的模式必须一致。
  4. CTSS在验证NTP时不只是验证NTP是否运行,也会验证NTP的配置文件是否存在。所以如果选择使用CTSS时,请将NTP配置文件也一并清除。
[root@node1 ~]# crsctl stat res ora.ctssd -t -init
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ctssd1        ONLINE  ONLINE       node1                    OBSERVER,STABLE
--------------------------------------------------------------------------------

另外上图中并没有标记出来,其实orarootagent还会启动一个非常重要的资源就是HAIP。HAIP提供了私网的高可用和负载均衡。主要负责节点间数据库实例的数据传输,也就是我们所熟知的内存融合。关于HAIP的内容会在以后的私网通信的部分详细说明。

接下来我们来看oraagent管理的资源。

gipcd的内容会结合HAIP的内容在以后的博客中比对说明,请各位持续关注。ASM的内容则是集群极为重要的一大块内容,会专门找时间分多个主题介绍。

接下来我们主要介绍一下关于gpnp(Grid Plug And Play)组件的内容。
gpnp存在的主要目的是为了将集群的一些基本配置信息保存至本地,从而减轻对OCR的功能依赖。

gpnp主要有两个部分构成,分别是gpnp wallet 和gpnp profile。他们分别保存在以下路径下。

{GI_HOME}/gpnp/wallets/peer/cwallet.sso
{GI_HOME}/gpnp/profiles/peer/profile.xml

GPNP的profile文件中配置了以下主要信息:
1.ClusterUid和ClusterName
2.网络配置信息
3.ASM实例的spfile的路径。

关于GPNP的profile信息,我们可以通过以下命令获得。

[root@node1 ~]# gpnptool get -o- | xmllint --format -Success.
<?xml version="1.0" encoding="UTF-8"?>
<gpnp:GPnP-Profile xmlns="http://www.grid-pnp.org/2005/11/gpnp-profile" xmlns:gpnp="http://www.grid-pnp.org/2005/11/gpnp-profie" xmlns:orcl="http://www.oracle.com/gpnp/2005/11/gpnp-profile" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version=1.0" xsi:schemaLocation="http://www.grid-pnp.org/2005/11/gpnp-profile gpnp-profile.xsd" ProfileSequence="5" ClusterUId="f99ec5bb231ff76ffde27244f2ba4dd" ClusterName="node-cluster" PALocation=""><gpnp:Network-Profile><gpnp:HostNetwork id="gen" HostName="*"><gpnp:Network id="net1" IP="10.10.3.0" Adapter="enp0s8" Use="public"/><gpnp:Network id="net2" IP="192.168.3.0" Adapter="enp0s9" Use="asm,cluster_interconnect"/></gpnp:HostNetwork></gpnp:Network-Profile><orcl:CSS-Profile id="css" DiscoveryString="+asm" LeaseDuration="400"/><orcl:ASM-Profile id="asm" DiscoveryString="/u02/storage/*" SPFile="+DATA/node-cluster/ASMPARAMETERFILE/registry.253.101087503" Mode="remote" Extended="false"/><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><ds:Reference URI=""><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><InclusiveNamespaces xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="gpnp orcl xsi"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>oVBrQvB4b2NuXOY6pBfE+zeLfTk=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>bFF73cqarX+fmHFWeeC5oSXy6m01+m7LuOWj4TO+69fPkVaDu9BblcMoUbb2Mkhhv5iOIjZwaD7Eb9DN3WZajO1NoPq/BYqZJGpw9JPEifQSlEBtOLbPupYAidt4EPecv6jSaXkl2hhNCsMvZ6aWInrSQOp1lWGu1hEu7wYjHE=</ds:SignatureValue></ds:Signature>
</gpnp:GPnP-Profile>

通过上面的信息我们知道,我的测试环境的ClusterName是"node-cluster"。公网网卡是enp0s8,而私网网卡则是enp0s9。而ASM实例的spfile则保存在+DATA磁盘组上。

gpnp的主线程会扫描profile文件,并将内容加载到内存中。
gpnp会向所有节点发送信息,并确认最新版本,并将拥有最新版本的配置信息发送到各个节点。


关于GI的内容实在太杂太多了,不管谈到哪里都可以继续向下引申很多内容。我时刻告诉自己要适可而止,初衷只是归纳基础知识。接下来打算写一篇关于OCSSD的内容,期待各位继续支持。

浅谈Oracle RAC -- OHAS组件相关推荐

  1. 浅谈Oracle RAC --集群管理软件GI

    浅谈Oracle RAC --集群管理软件GI基本架构 今天周五,想想可以过周末,心情大好.一周中最喜欢过的就是周五晚上,最不喜欢过的是周日晚上和周一,看来我不是个热爱劳动的人啊.趁着现在心情愉悦,赶 ...

  2. oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...

    浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...

  3. 浅谈oracle树状结构层级查询

    oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只要精通数据库那么对于java开发你 ...

  4. 浅谈oracle树状结构层级查询测试数据

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

  5. 单引号oracle如何转义_浅谈oracle中单引号转义

    ORACLE 单引号转义: 在ORACLE中,单引号有两个作用: 1:字符串是由单引号引用 2:转义. 单引号的使用是就近配对,即就近原则.而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始 ...

  6. 浅谈Oracle 数据库之间数据同步方案

    随着信息技术的飞速发展,企业信息化建设的不断深入,使得企业业务系统数量不断增加.这时,各业务系统之间数据交互,各子业务系统与核心业务系统之间数据交互,诸如此类场景的应用需求不断出现.因此,IT部门应对 ...

  7. 浅谈Oracle服务器归档日志,oracle服务器运行时管理归档日志文件不管理联机重做日志文件...

    <Oracle数据库管理与维护实战>--2.4 Oracle后台进程结构 本节书摘来自异步社区出版社<Oracle数据库管理与维护实战>一书中的第2章,第2.4节,作者: 何伟 ...

  8. oracle数据库加复合组件,浅谈oracle复合数据类型 (2)

    二.集合 类似C语言中的数组,在ORACLE7.3及以前的版本中只有一种集合称为PL/SQL表,这种类型的集合依然保留,就是索引(INDEX_BY)表. PL/SQL有三种类型的集合a.Index_b ...

  9. 浅谈Oracle Online redo log

    Oracle online redo log是Oracle数据库中核心文件之一.在数据库操作中,只要有任何的数据块变化,都会生成相应的redo entry.redo entry首先保存在log buf ...

最新文章

  1. CANOE入门(一)
  2. 2019谷歌学术指标出炉,影响因子何去何从?
  3. oracle易忘函数用法(5)
  4. (转)java中对集合对象list的几种循环访问总结
  5. Docker最全教程——数据库容器化之持久保存数据(十二)
  6. nba2k19登陆显示你与服务器,NBA2K19无法登陆了?NBA2K19连不上服务器怎么办?[图]...
  7. python如何实现支持中文
  8. 冒泡排序的双重循环理解
  9. elk-可视化图标(nginx)
  10. .Net Core - 使用Supervisor进行托管部署
  11. 项目启动时,出现了Consider defining a bean of type ‘xxx’ in your configuration 问题。
  12. DailyFi - 9.2 |Loot,黑纸白字?
  13. 鸿蒙和小米哪个值得入手,鸿蒙系统能够吸引小米的优势是什么
  14. 1万元左右理财方法有那些
  15. 科研写作——常见句式(一)
  16. 6.1 手机时钟系统简介
  17. 什么是PCB加工中树脂塞孔工艺?
  18. 科学计算库学习笔记(持续更新)
  19. OpenCV利用鼠标操作测量角度
  20. python批量填写问卷星问卷

热门文章

  1. ZY Player_v2.7.3 电脑端观影神工具
  2. php笔刷怎么安装,ps铅笔工具怎么用
  3. 下载地图时如何去掉谷歌卫星地图上的水印
  4. 淘宝首页代码html代码,Web前端
  5. 学习笔记:内容安全过滤技术
  6. PYTHON爬取斗鱼英雄联盟所有在玩adc的主播房间信息
  7. python数组两个冒号_python数组冒号取值操作
  8. 让人懵懂的云网络,里面原来是这些
  9. 头歌实训之python字典入门
  10. 16天记住7000考研词汇1-8天