问题场景
跑root.sh脚本的时候,会出现这样的问题。
重新启动集群的时候,会出现这样的问题。
在网上查询以上问题都可能会搜到这样的一条命令:
/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1
那么为什么需要这样做呢。
问题重现
这里用已经搭建好的环境(11.2.0.4-RedHat7.3)进行测试:
首先对测试节点进行crs的关闭:
然后再直接启动crs
查看到始终只有ohasd.bin,css和crs均未启动。
最终反馈失败信息。
那么到底卡在哪一步呢?通过各种日志也没有反馈相关信息。
最终在网上看到一个strace可以追踪进程的信息,那我这里就尝试一下;
到这里就了解为什么要涉及到npohasd了,但是为什么dd if就可以临时启动了呢?
通过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)
大概意思是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的调用
下面进行测试:
这里也可以看到pid=5314的进程执行了这个init.ohasd run,在做以上添加之前是没有这行进程的。
测试自动启动成功。
PS:以上均为个人学习之后的理解,如有错误,恳请指正。
学习来源:Install of Clusterware fails while running root.sh on OL7 - ohasd fails to start (Doc ID 1959008.1)以及strace相关资料。