如何判断 Oracle RAC 中的 Master 主节点

2021-12-15 13:54:05 浏览数 (1)

作者 | 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

~本次分享到此结束啦~

0 人点赞