作者 | JiekeXu
来源 | JiekeXu DBA之路(ID: JiekeXu_IT)
大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来讨论一下如何判断 Oracle RAC 中的 Master 主节点问题!
先来说一下前面发布的文章【Oracle 通过 SQL 语句查看数据库服务器 IP 地址】看着阅读量还不错,故有了这篇更文。
Oracle RAC(Real Application Cluster)大体架构图如下所示:
部署图大概如下所示,共享存储,各节点间高速互联:
Oracle RAC 启动流程如下图所示:
但是对于 RAC 体系架构,启动流程 看看上面简略图就好,在此不做深入研究,本次主要是讨论 CRS 集群件 Master 主节点的问题,当然研究这个问题也没有太大的意义,只是探索而已。
前几天和同事讨论到这个问题,起初我也不知道哪个节点是主节点,他发给我下图并告诉我说 INST_ID 最小的就是主节点,但是这个 INST_ID 一直是节点 1 最小,那么节点一 一直是主节点吗?这个显然是不对的。
那么,根据数据库启动时间看呢?启动时间早的就是主节点呢?但是对于 RAC 而言,DB 重启不一定 ASM 会重启,所以 DB 的启动时间是无法判断的,那么 ASM 的启动时间能不能作为判断 master 主节点的依据呢,答案是可以的,RAC4 即节点 4 启动时间最早则为 master 主节点,除非遇到 ASM 启动故障,这就另说了。
代码语言:javascript复制su - oracle
sqlplus / as sysdba
SQL> select INST_ID,INSTANCE_NUMBER,VERSION,STARTUP_TIME,STATUS from gv$instance;
INST_ID INSTANCE_NUMBER VERSION STARTUP_TIME STATUS
---------- --------------- ----------------- ------------------- ------------
1 1 11.2.0.4.0 2021-11-10 18:38:04 OPEN
4 4 11.2.0.4.0 2020-11-29 08:44:31 OPEN
3 3 11.2.0.4.0 2021-06-10 16:44:00 OPEN
2 2 11.2.0.4.0 2021-06-08 17:33:40 OPEN
su - grid
sqlplus / as sysasm
SQL> alter session set nls_date_format='yyyy-mm-dd HH24:MI:SS';
Session altered.
SQL>
SQL> select INST_ID,INSTANCE_NUMBER,VERSION,STARTUP_TIME,STATUS from gv$instance;
INST_ID INSTANCE_NUMBER VERSION STARTUP_TIME STATUS
---------- --------------- ----------------- ------------------- ------------
2 2 11.2.0.4.0 2021-06-08 17:32:54 STARTED
1 1 11.2.0.4.0 2021-11-10 18:37:25 STARTED
4 4 11.2.0.4.0 2020-11-29 07:53:38 STARTED
3 3 11.2.0.4.0 2021-06-10 16:43:19 STARTED
下面我将演示三种方法来识别 Oracle 集群件的主节点,请注意,clusterware master 与 Oracle 数据库实例中的 Resource master 不同。
在 11.2.0.4 环境下
方法一:
代码语言:javascript复制su - grid
$ oclumon manage -get MASTER
Master = jieke-rac2
使用 “oclumon manage -get MASTER” 命令可查看到主节点在 RAC2 上,与前面判断不符,这是因为此命令适用于 12C 及以上环境,11g 这里有偏差也正常。
方法二:
查看集群的 ocssd.log 日志,在日志中会有集群重配信息“master node number 4”这个指向了节点 4,是没有问题的,不过要注意要是所有的日志中都没有集群重配信息那么这个方法还是找不到主节点。
下面是四个节点的集群 ocssd 日志信息,主节点都是指向“master node number 4”。
代码语言:javascript复制$ cat $ORACLE_HOME/log/jieke-rac1/cssd/ocssd.log |grep 'master node' | tail -1
$ cat $ORACLE_HOME/log/jieke-rac1/cssd/ocssd* |grep 'master node' | tail -1
2021-10-27 14:57:27.105: [ CSSD][2673313536]clssgmCMReconfig: reconfiguration successful, incarnation 502102329 with 4 nodes, local node number 1, master node number 4
cat $ORACLE_HOME/log/jieke-rac2/cssd/ocssd* |grep 'master node' | tail -1
2021-10-27 14:57:27.281: [ CSSD][3063351040]clssgmCMReconfig: reconfiguration successful, incarnation 502102329 with 4 nodes, local node number 2, master node number 4
[grid@jieke-rac3 ~]$ cat $ORACLE_HOME/log/jieke-rac3/cssd/ocssd* |grep 'master node' | tail -1
2021-10-27 14:57:27.281: [ CSSD][1980651264]clssgmCMReconfig: reconfiguration successful, incarnation 502102329 with 4 nodes, local node number 3, master node number 4
[grid@jieke-rac3 ~]$
[grid@jieke-rac4 ~]$ cat $ORACLE_HOME/log/jieke-rac4/cssd/ocssd.log |grep 'master node' | tail -1
[grid@jieke-rac4 ~]$
[grid@jieke-rac4 ~]$ cat $ORACLE_HOME/log/jieke-rac4/cssd/ocssd* |grep 'master node' | tail -1
2021-10-27 14:57:27.299: [ CSSD][97924864]clssgmCMReconfig: reconfiguration successful, incarnation 502102329 with 4 nodes, local node number 4, master node number 4
[grid@jieke-rac4 ~]$ oclumon manage -get MASTER
Master = jieke-rac2
Done
[grid@jieke-rac4 ~]$
那么到底节点2是主节点还是节点4 是主节点,以上信息暂时没法确定。下面还有一种方法则就是通过 OCR 自动备份来判断,OCR 备份由主节点进行。
方法三:
通过以下 OCR 备份发现节点 4 是主节点,那么 oclumon 查询到的是有问题的,12c 以上才可使用。
代码语言:javascript复制--root 用户操作
[root@jieke-rac3 ~]# /u01/app/11.2.0/grid/bin/ocrconfig -manualbackup
jieke-rac4 2021/11/17 18:24:16 /u01/app/11.2.0/grid/cdata/jieke-rac/backup_20211117_182416.ocr
[root@jieke-rac2 ~]# /u01/app/11.2.0/grid/bin/ocrconfig -manualbackup
jieke-rac4 2021/11/17 20:18:27 /u01/app/11.2.0/grid/cdata/jieke-rac/backup_20211117_201827.ocr
jieke-rac4 2021/11/17 18:24:16 /u01/app/11.2.0/grid/cdata/jieke-rac/backup_20211117_182416.ocr
19c 环境下
节点 1 上查看,主节点在节点 1 上, “oclumon manage -get MASTER” 查看也没有问题。
代码语言:javascript复制jiekerac1:/home/grid( ASM1)$ oclumon manage -get MASTER
Master = jiekerac1
jiekerac1:/home/grid( ASM1)$ exit
[root@jiekerac1 ~]# /u01/app/19.0.0.0/grid/bin/ocrconfig -manualbackup
jiekerac1 2021/11/17 18:28:25 OCR:/ops-jiekerac-scan/OCRBACKUP/backup_20211117_182825.ocr.261.1088879305 2037353368
jiekerac1 2021/07/23 14:58:50 OCR:/ops-jiekerac-scan/OCRBACKUP/backup_20210723_145850.ocr.265.1078671531 2037353368
jiekerac1 2021/06/04 21:10:57 OCR:/ops-jiekerac-scan/OCRBACKUP/backup_20210604_211057.ocr.264.1074373859 2037353368
[root@jiekerac1 ~]#
节点 2 上使用 OCR 备份命令查看,也是显示的主节点在节点 1 上, “oclumon manage -get MASTER” 查看也没有问题。
代码语言:javascript复制[root@jiekerac2 ~]# /u01/app/19.0.0.0/grid/bin/ocrconfig -manualbackup
jiekerac1 2021/11/17 18:31:35 OCR:/ops-jiekerac-scan/OCRBACKUP/backup_20211117_183135.ocr.268.1088879497 2037353368
jiekerac1 2021/11/17 18:28:25 OCR:/ops-jiekerac-scan/OCRBACKUP/backup_20211117_182825.ocr.261.1088879305 2037353368
jiekerac1 2021/07/23 14:58:50 OCR:/ops-jiekerac-scan/OCRBACKUP/backup_20210723_145850.ocr.265.1078671531 2037353368
jiekerac1 2021/06/04 21:10:57 OCR:/ops-jiekerac-scan/OCRBACKUP/backup_20210604_211057.ocr.264.1074373859 2037353368
jiekerac2:/home/grid( ASM2)$ oclumon manage -get MASTER
Master = jiekerac1
那么,通过 ocssd 日志查看呢?19c 因日志位置发生变化,我们先用 adrci 来查看家目录,然后再通过日志定位。
代码语言:javascript复制jiekerac2:/home/grid( ASM2)$ adrci
ADRCI: Release 19.0.0.0.0 - Production on Wed Nov 17 18:36:15 2021
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
ADR base = "/u01/app/grid"
adrci>
adrci> show home
ADR Homes:
diag/asm/ asm/ ASM2
diag/crs/jiekerac2/crs
diag/clients/user_root/host_3214393793_110
diag/clients/user_grid/host_3214393793_110
diag/tnslsnr/jiekerac2/asmnet1lsnr_asm
diag/tnslsnr/jiekerac2/listener_scan1
diag/tnslsnr/jiekerac2/listener
diag/tnslsnr/jiekerac2/listener_scan2
diag/tnslsnr/jiekerac2/listener_scan3
diag/asmtool/user_grid/host_3214393793_110
diag/asmtool/user_root/host_3214393793_110
diag/asmcmd/user_grid/jiekerac2
diag/kfod/jiekerac2/kfod
adrci>
adrci> exit
ocssd 日志变到 crs 下了,需要使用如下路径去查看。
代码语言:javascript复制cat /u01/app/grid/diag/crs/jiekerac2/crs/trace/ocssd* | grep 'master node' | tail -1
cd /u01/app/grid/diag/crs/jiekerac2/crs/trace
cat ocssd* | grep 'master node' | tail -1
2021-11-09 05:40:20.528 : CSSD:2776540928: [ INFO] clssgmCMReconfig: reconfiguration successful, incarnation 530661885 with 2 nodes, local node number 1, master node jiekerac1, number 1
jiekerac2:/u01/app/grid/diag/crs/jiekerac2/crs( ASM2)$ cat /u01/app/grid/diag/crs/jiekerac2/crs/trace/ocssd* | grep 'master node' | tail -1
2021-06-04 21:09:04.668 : CSSD:150898432: [ INFO] clssgmCMReconfig: reconfiguration successful, incarnation 518130856 with 2 nodes, local node number 2, master node jiekerac1, number 1
master node jiekerac1, number 1显示主节点在节点 1,这是没有问题的。
下面从启动时间也可大略判断一点:
代码语言:javascript复制SQL > select INST_ID,INSTANCE_NUMBER,VERSION,STARTUP_TIME,STATUS from gv$instance;
INST_ID INSTANCE_NUMBER VERSION STARTUP_TIME STATUS
---------- --------------- ----------------- ------------------- ------------
2 2 19.0.0.0.0 2021-11-09 05:48:07 STARTED
1 1 19.0.0.0.0 2021-11-01 11:30:26 STARTED
最后,这是一个 19c 生产环境,通过 OCR 备份是不是就很容易判断出来主节点了呢?
随着时间的重启,主节点由 jiekerac1 变成了 jiekerac2 。
代码语言:javascript复制[root@jiekerac1 bin]# ./ocrconfig -manualbackup
jiekerac2 2021/11/17 19:17:56 MGMT:/db-rac-scan/OCRBACKUP/backup_20211117_191756.ocr.293.1088882279 2037353368
jiekerac2 2021/11/17 19:17:34 MGMT:/db-rac-scan/OCRBACKUP/backup_20211117_191734.ocr.285.1088882257 2037353368
jiekerac2 2021/07/23 16:03:49 MGMT:/db-rac-scan/OCRBACKUP/backup_20210723_160349.ocr.289.1078675431 2037353368
jiekerac1 2020/04/06 01:15:24 MGMT:/db-rac-scan/OCRBACKUP/backup_20200406_011524.ocr.283.1036977325 2037353368
--另一套环境,涉及到主机名均已替换为非敏感字段。
SQL> set line 345
SQL> select INST_ID,INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,VERSION,STARTUP_TIME,STATUS from gv$instance;
INST_ID INSTANCE_NUMBER INSTANCE_NAME HOST_NAME VERSION STARTUP_TIME STATUS
---------- --------------- ---------------- -------------------------------------------------- ----------------- ------------------- ------------
1 1 jieke1 ora-rac1 11.2.0.4.0 2021-07-24 11:56:04 STARTED
4 4 jieke4 ora-rac12 11.2.0.4.0 2021-07-24 12:27:33 STARTED
3 3 jieke3 ora-rac11 11.2.0.4.0 2021-07-24 12:34:33 STARTED
2 2 jieke2 ora-rac2 11.2.0.4.0 2021-07-24 12:11:15 STARTED
~本次分享到此结束啦~