浅谈Oracle RAC --GI的启动

之前的博客里我们提到过OHAS组件是集群启动的根守护进程。GI的启动必须首先启动 OHAS 组件。

但是并不是OHASD在没有前提条件的情况下一个命令就能启动的。GI的启动有两种途径,一种是伴随着OS的启动而自动启动GI,另外一种途径则是用crsctl start crs命令手动启动GI。但是不管哪一种途径启动GI,前提都需要有init.ohasd进程。

1.init.ohasd

init.ohasd是一个GI初始化脚本。在Linux环境中,它的路径是/etc/init.d/init.ohasd。这是一个shell脚本,会随着OS的启动而被拉起。在Linux5的时代,这个脚本是被定义在/etc/inittab中。

[root@node1 ~]#cat /etc/inittab|grep init.ohasd

h1:35:respawn:/etc/init.d/init.ohasd run >/dev/null 2>&1

而在Linux7里,随着OS的功能变更,init.ohasd则被systemd 以服务的形式启动。

[root@node1 ~]# cat /etc/systemd/system/oracle-ohasd.service

# Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.

#

# Oracle OHASD startup

[Unit]

Description=Oracle High Availability Services

After=network-online.target remote-fs.target autofs.service

Wants=network-online.target remote-fs.target

[Service]

ExecStart=/etc/init.d/init.ohasd run >/dev/null 2>&1

ExecStop=/etc/init.d/init.ohasd stop >/dev/null 2>&1

TimeoutStopSec=60min

Type=simple

Restart=always

# Do not kill any processes except init.ohasd after ExecStop, unless the

# stop command times out.

KillMode=process

SendSIGKILL=yes

# Allow continuous restarts

StartLimitBurst=0

[Install]

WantedBy=multi-user.target graphical.target

如果我们查看init.ohasd的代码就会发现,其主体部分是一个 while (true)无限循环。也就意味着init.ohasd 进程是个常驻OS的进程。即便集群被手动关闭,init.ohasd run进程应该是一直存在于OS中的。

[root@node1 ~]# ps -ef|grep init.ohasd|grep -v grep

root 4321 1 0 Mar17 ? 00:00:02 /bin/sh /etc/init.d/init.ohasd run >/dev/null 2>&1

如果集群无法启动时,同学们应该要先去检查一下init.ohasd进程是不是存在。

2.S96ohasd

另外伴随着OS启动,GI也会自动启动。这实际上是由脚本S96ohasd实现的。这个脚本需要OS的 runlevel 3 或者 5的时候才会随着OS的启动而调用这个脚本。所以在Linux7中,这个脚本存在于etc/rc.d/rc3.d和etc/rc.d/rc5.d中。

[root@node1 ~]# locate S96ohasd

/etc/rc.d/rc3.d/S96ohasd

/etc/rc.d/rc5.d/S96ohasd

这就意味着,如果OS的runlevel不是3或者5的话,GI是不会随着OS的启动而自动启动的,因为S96ohasd脚本本身就不会被OS调用。

你以为这样GI就会被启动了吗?并不是。下面我们看一下S96ohasd的脚本内容。

AUTOSTARTFILE=$SCRBASE/$MY_HOST/$HAS_USER/ohasdstr

...省略

if [ -r $AUTOSTARTFILE ]

then

case `$CAT $AUTOSTARTFILE` in

enable*)

$LOGINFO "Oracle HA daemon is enabled for autostart."

my_crsctl start has -nowait

;;

disable*)

$LOGINFO "Oracle HA daemon is disabled for autostart."

;;

*)

...省略

;;

esac

else

在脚本里我们可以看到,S96ohasd 会去读取配置文件ohasdstr 的内容。如果配置文件中被设定成了 enable 的值,那么才会用 crsctl start has -nowait 命令去启动 GI。

这个配置文件隐藏的如此隐秘,肯定不会支持客户手动去更改它了。实际上我们可以通过以下命令去更改这个配置文件,以此去设定该节点的GI是否会随着OS的启动而自动启动。

[root@node1 ~]# crsctl disable crs

CRS-4621: Oracle High Availability Services autostart is disabled.

[root@node1 ~]# cat /etc/oracle/scls_scr/node1/root/ohasdstr

disable

[root@node1 ~]# crsctl enable crs

CRS-4622: Oracle High Availability Services autostart is enabled.

[root@node1 ~]# cat /etc/oracle/scls_scr/node1/root/ohasdstr

enable

实际上,调查GI无法启动的问题,查看OS日志是非常必要的。因为init.ohasd也好,s96ohasd也好,他们的很多信息都是打印到了OS日志中。

3.crsctl start crs

我们从上面的脚本里可以看到,伴随着OS启动自动启动GI的调用命令是 crsctl start has -nowait。但实际上如果这不是一个Oracle Restart的环境的话,我们通常使用的启动命令则是crsctl start crs。执行的用户必须是root用户。为了能够确认到启动过程,我们通常会在后面加-wait。这部分内容在前面的博客里提到过。

实际上OHASD守护进程是在这个阶段才被启动的。

4.如何确认GI正常启动

好了,我们上面介绍完GI的自动启动和手动启动的基本知识。如何去查看GI是否正常启动完成呢。

我们通常可以使用下面的命令。

[root@node1 ~]# crsctl check cluster

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online

通过这个命令,我们可以确认到CRSD,CSSD 和 EMD是否正常启动而处于online的状态。

但是这个命令只能确认GI的大框架是否正常启动,而无法确认被GI管理的资源是否正常启动完成。所以我们通常需要使用 crsctl stat res -t 和crsctl stat res -t -init命令来确认各个资源是否都处于online的状态。

crsctl stat res -t可以确认到CRSD管理的资源状态,crsctl stat res -t -init则可以确认到OHASD管理的资源的状态。

下面我们以crsctl stat res -t -init的输出例子来讲解一下如何查看结果。

[root@node1 ~]# crsctl stat res -t -init

--------------------------------------------------------------------------------

Name Target State Server State details

--------------------------------------------------------------------------------

Cluster Resources

--------------------------------------------------------------------------------

ora.asm

1 ONLINE ONLINE node1 STABLE

ora.cluster_interconnect.haip

1 ONLINE ONLINE node1 STABLE

ora.crf

1 ONLINE ONLINE node1 STABLE

ora.crsd

1 ONLINE ONLINE node1 STABLE

ora.cssd

1 ONLINE ONLINE node1 STABLE

ora.cssdmonitor

1 ONLINE ONLINE node1 STABLE

ora.ctssd

1 ONLINE ONLINE node1 OBSERVER,STABLE

ora.diskmon

1 OFFLINE OFFLINE STABLE

ora.drivers.acfs

1 ONLINE ONLINE node1 STABLE

ora.evmd

1 ONLINE ONLINE node1 STABLE

ora.gipcd

1 ONLINE ONLINE node1 STABLE

ora.gpnpd

1 ONLINE ONLINE node1 STABLE

ora.mdnsd

1 ONLINE ONLINE node1 STABLE

ora.storage

1 ONLINE ONLINE node1 STABLE

--------------------------------------------------------------------------------

从上面的输出结果中我们看到了以下列名。

Name 资源名

Target 资源的期待状态

State 资源的实际的状态

Server 资源所在的节点

State details 资源的实际状态的详细

这里面Target显示的信息其实是GI记录的资源该有的状态。这个信息是记录在OCR中的(OCR是记录集群所有重要信息的文件,位于共享磁盘上,被所有节点访问)。

如果Target是ONLINE,而State是OFFLINE的话,代表该资源启动失败。如果Target是OFFLINE,则代表该资源不会被自动启动。如果用户想启动该资源,则需要执行相关的资源启动命令。

今天我们简单的讲了一下crsctl start crs之前的GI的启动逻辑,这部分内容其实对于绝大多数同学来讲是不太去关注的。但是一旦在处理集群无法启动的问题时,这部分内容就显得尤为必要了。

其实GI启动的知识远比上面的内容要多的多,比如OHASD的启动需要读取OLR的信息,CSSD的启动需要读取OCR的信息等等。但是我想这些内容对于一般的同学而言先不用深入的了解,这部分内容属于更专业更深层次的知识,等我们有时间的时候可以写专题研究。浅谈 Oracle RAC 系列还是本着带大家初步了解 Oracle RAC 的初衷来跟大家分享。

时间不早了,今天就先写到这里,祝各位晚安。

oracle gi 创建,浅谈Oracle RAC --GI的启动相关推荐

  1. oracle外部结合,浅谈Oracle外部文件

    所谓Oracle外部文件外部文件,意味着这些文件从严格意义上来讲并不属于Oracle数据库的一部分.Oracle外部文件也就是属Oracle物理存储结构的一部分,属于外面嵌入到Oracle数据库内部的 ...

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

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

  3. 浅谈Oracle RAC -- OHAS组件

    浅谈Oracle RAC – OHAS组件 懒惰了一周没有更新博客.这两天天气不好,索性利用今天下午的时间继续写一篇关于OHAS组件的介绍. 之前我们多次提到了OHAS组件是GI的根守护进程.这个组件 ...

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

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

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

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

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

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

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

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

  8. 内外兼修:Oracle ACED熊军谈Oracle学习

    编辑手记:熊军是中国西部第一位,也是到目前为止唯一的Oracle ACE总监,在这篇文章中熊军描述了他的学习过程和理念供大家参考. ORACLE 的学习,就好比武侠小说中学武功.要从三方面入手: 1. ...

  9. 转载:内外兼修:Oracle ACED熊军谈Oracle学习

    内外兼修:Oracle ACED熊军谈Oracle学习 熊军是中国西部第一位,也是到目前为止唯一的Oracle ACE总监,在这篇文章中熊军描述了他的学习过程和理念供大家参考. ORACLE 的学习, ...

  10. oracle 删除补全日志组_浅谈Oracle 20c ASM文件组模板技术

    首先,Oracle ASM file group 是一组文件,它们共享相同的属性和特征.文件组最主要的好处是在相同的磁盘组里为不同的数据库文件定义不同的可用性属性,这一特性让在多租户架构的pdb (可 ...

最新文章

  1. 名图怎么弄云服务器_云服务器购买了宽带的速度怎么测试?
  2. bpython ipython_安装ipython后命令找不到ipython bpython -bash: *python: command not found
  3. [洛谷P4171][JSOI2010]满汉全席
  4. 观看TED演讲(计算机的发明和发展)感受
  5. 东方卫视收视率查询_肖战被嘲撑不起跨年收视率,看了东方卫视收视曲线,这锅不背!...
  6. 没有bug队——加贝——Python 练习实例 1,2
  7. jsp中get请求与post请求编码统一问题(1.0)
  8. python字典的基本操作编程_Python入门教程5. 字典基本操作【定义、运算、常用函数】 原创...
  9. 一个小型的无线路由器 Linux 系统OpenWRT
  10. 公众号引流怎么做?怎么样给公众号引流?公众号前期如何涨粉?
  11. 苹果计算机远程桌面连接,远程桌面连接mac,小编教你苹果mac如何远程桌面连接...
  12. 2022放假安排时间表(来自天才哥快速阅读)
  13. 查漏补缺Python的基础知识查漏补缺(随时改增)
  14. 阿里云ECS CentOS6.5搭建iRedMail邮件服务器
  15. 基于ssm的课程思政资源众包系统的设计与实现毕业设计源码020838
  16. 良好的分布式cahce系统中,一致性hash算法需要满足什么?
  17. Jenkins 流水线
  18. PowerPCB (PADS)常见问题全集
  19. Activiti的使用 idea的bpmn插件
  20. sendmail报错:My unqualified host name ( name ) unknown; sleeping for retry

热门文章

  1. Keil3/4/5 For C51安装教程(附Baidu 云链接)
  2. 前后端开源的一款简单的微信个人博客小程序
  3. Django2.1简介及安装
  4. QAction QActionGroup QMenu 使用方法
  5. Akka-Cluster(0)- 分布式应用开发的一些想法
  6. 非阻塞IO发送http请求
  7. 面向对象程序的设计模式
  8. java grpc简单例子
  9. ACM程序设计选修课——1024: 末位零(求末尾0的方法+可有可无的快速幂)
  10. Unity2.0学习笔记-Unity2.0基础-HelloWorld