代码改变世界

记录一则因主机名讹误导致的RAC启动异常

2020-07-15 23:11  AlfredZhao  阅读(351)  评论(0编辑  收藏  举报

环境:RHEL 7 + Oracle 19.5 RAC

1.故障现象

最近遇到客户的一套19c测试环境,在一次主机重启后发现集群无法启动,使用crsctl stat res -t -init查看集群启动阶段时发现直接报错如下信息:

[grid@xxdb01-vip ~]$ crsctl stat res -t -init
Oracle Clusterware infrastructure error in CRSCTL (OS PID 29739): CLSD/ADR initialization failed with return value -1
1: clskec:has:CLSU:910 4 args[clsdAdr_CLSK_err][mod=clsdadr.c][loc=(:CLSD00050:)][msg=2020-07-03 16:33:42.032 (:CLSD00050:) dbgc_init_all failed with return code 49802.     Detected in function clsdAdrInit at line number 1828. ]
2: clskec:has:CLSU:910 4 args[clsdAdrInit_CLSK_err][mod=clsdadr.c][loc=(:CLSD00281:)][msg=clsdAdrInit: Additional diagnostic data returned by the ADR component for dbgc_init_all failure: 
 DIA-49802: missing read, write, or execute permission on specified ADR home directory [/oracle/app/grid/diag/crs/xxdb01-vip]
DIA-49801: actual permissions [rwxr-xr-x], expected minimum permissions [rwxrwxrwx] for effective user [grid]
DIA-48188: user missing read, write, or exec permission on specified directory
Linux-x86_64 Error: 13: Permission denied
Additional information: 2
Additional information: 511
Additional information: 16877
([all diagnostic data retrieved from ADR])]

CRS-4639: Could not contact Oracle High Availability Services
CRS-4000: Command Status failed, or completed with errors.

起初看到这个报错内容显示较多且从未见过,还有些波澜,但马上静心去细看报错信息发现提示非常明显,都是权限相关,而进一步看权限不足的那个目录/oracle/app/grid/diag/crs/xxdb01-vip,这里为何是vip的主机名呢?去到上层/oracle/app/grid/diag/crs目录下去查看发现有两个目录xxdb01xxdb01-vip,而正常应该是xxdb01,直到此时才注意到机器的主机名有问题:原本应该是xxdb01,而现在重启主机后却变成了xxdb01-vip,进而导致集群异常。

2.解决方案

从故障现象来看,说明之前的主机名配置很可能存在问题,导致在重启主机后主机名发生变化。
查了下主机名相关的配置文件,发现/etc/hosts/etc/sysconfig/network内容都匹配,但/etc/hostname不匹配。
在RHEL6中并没有/etc/hostname这个配置文件,因此怀疑很可能是当时实施安装的工程师是按照RHEL6的方法修改了主机名,但是由于/etc/hostname没有配置所以重启出现问题。
那现在如何处理呢?改这个文件吗?该文件应该也可,但其实RHEL7可以使用如下命令来修改主机名,完全省去了担心配错文件的烦恼:

hostnamectl set-hostname xxdb01

当再次重启主机后,RAC启动恢复正常。