暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

RAC在linux7以上ohasd启动失败的问题

原创 张伟垚 2020-06-01
3615

问题场景

跑root.sh脚本的时候,会出现这样的问题。
image.png
重新启动集群的时候,会出现这样的问题。
image.png
在网上查询以上问题都可能会搜到这样的一条命令:
/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1
那么为什么需要这样做呢。

问题重现

这里用已经搭建好的环境(11.2.0.4-RedHat7.3)进行测试:
image.png
image.png
首先对测试节点进行crs的关闭:
image.png
然后再直接启动crs
image.png
image.png
查看到始终只有ohasd.bin,css和crs均未启动。
image.png
image.png
最终反馈失败信息。
那么到底卡在哪一步呢?通过各种日志也没有反馈相关信息。
最终在网上看到一个strace可以追踪进程的信息,那我这里就尝试一下;
image.png
到这里就了解为什么要涉及到npohasd了,但是为什么dd if就可以临时启动了呢?
image.png
通过dd if npohasd后,ohasd进程启动成功,进而其他守护进程以及css/crs也随即启动,ohasd-strace信息随之变化.

但是这里没看懂为什么dd if npohasd之后就可以启动成功

问题解决方案

而根据在mos上进行相关的搜索,发现以下文档
Install of Clusterware fails while running root.sh on OL7 - ohasd fails to start (Doc ID 1959008.1)
image.png

大概意思是linux7跟linux7以下在运行和重启进程方面是有较大的差别的,从linux 7开始是使用systemd而不是initd运行进程和重启进程,而我们的root.sh脚本是通过传统的initd调用运行ohasd进程。
那么重启集群也是需要运行ohasd进程,所以同样也会遇到这样的问题。

那么除了每次dd if npohasd或者手动执行/etc/init.d/init.ohasd run外,彻底一点的解决方案如下:
这是通过查阅资料得到的解决方案:
vi /usr/lib/systemd/system/ohas.service

[Unit]
Description=Oracle High Availability Services
After=syslog.target

[Service]
ExecStart=/etc/init.d/init.ohasd run >/dev/null 2>&1 Type=simple
Restart=always

[Install]
WantedBy=multi-user.target

手动添加systemd中的ohas启动服务,并且启用它。
systemctl daemon-reload
systemctl enable ohas.service
systemctl start ohas.service
依此运行以上命令进行service的调用

下面进行测试:
image.png

image.png
image.png
这里也可以看到pid=5314的进程执行了这个init.ohasd run,在做以上添加之前是没有这行进程的。

image.png

测试自动启动成功。

PS:以上均为个人学习之后的理解,如有错误,恳请指正。
学习来源:Install of Clusterware fails while running root.sh on OL7 - ohasd fails to start (Doc ID 1959008.1)以及strace相关资料。

最后修改时间:2020-06-01 22:11:50
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论