oracle RAC学习
RAC介绍
RAC:高可用集群,负载均衡集群,高性能计算集群
RAC是⼀种⾼可⽤,⾼性能,负载均衡的share-everything的集群
8i:内存融合雏形
内存融合雏形(Oracle Parallel Server): 实现多实例的数据读读,读写模式(DLM) ,写写模式仍需要借助磁盘作为中介
9i:数据库层⾯实现集群
1、真正内存融合
(scn)
2、Global Resource Dictionary
到这个目录里面去找,这个资源在那个节点上面。
3、RAC 特有进程: LMON,LMS,LMD
lms:维护集群数据缓存的一致性 :节点之间传输数据,传输SCN号,节点之前通讯
lmd:维护集群共享池一致性(维护队列资源):管理集群之间队列的信息(多个节点都要访问一个资源的话,由于优先级的不同,或者锁的信息,那么这些节点需要排队)
lmon:对lmd的监视和保护(维护心跳机制):保证集群之间两节点是相通的
9i的时候没有集群管理软件
10g:集群管理软件,真正实现集群;ASM存储管理
CRS(Cluster Ready Service)的出现使得集群能够真正在操作系统和数据库层⾯实现
ASM专⻔⽤于集群⽂件的管理
1、CSS负责维护集群的⼀致性,主要功能是通过ocssd守护进程实 现的,ocssd以oracle⽤户进程运⾏,运⾏级别为实时。主要通过读 取VF中的投票信息来维护集群的⼀致性。
2、CRS组件负责对集群的所有应⽤程序资源进程管理,并实现应⽤ 程序的⾼可⽤
3、EVM负责产⽣并记录集群事件,并在节点之间传递发⽣的事件。
11g:Grid Infrastucture,集群软件更独⽴地管理和部署
1、集群组件的资源形式及agent管理
2、SCAN的引⼊
节点之间的增加和删除,不用调整应用端的连接信息。
3、OCR和Voting也可以保存在ASM磁盘中了。
4、新增加集群进程:LMHB
监控LMON、lms、lmd及其他进程
12c:Flex Cluster,Flex ASM
Flex Cluster和Flex ASM,彻底改变了RAC集群中数据库实例与ASM实例之间的关系
(如果 Oracle 12c 数据库实例与一个 ASM 实例的连接断开,数据库连接将故障切换至其他服务器上的另一个 ASM 实例)
19c新特性:
-
Grid零停机补丁升级
-
重新支持共享文件系统
- 在12.2版本中,Oracle RAC不支持将ocr和voting disk放在共享文件系统中,现在19c(19.3)重新开始支持。
-
务支持故障恢复首选节点
- 为动态数据库服务支持"preferred"(首选)和"available"(可用)的放置配置,可以给服务配置一个首选节点,当该节点发生故障重新恢复正常后,服务将自动切换回该节点上。
单实例DB vs RAC
组件 | 单实例环境 | RAC环境 |
---|---|---|
SAG | 实例拥有自己的SGA | 每个实例拥有自己的SGA |
后台进程 | 实例有自己的后台进程集 | 实例有自己的后台进程集 |
数据文件 | 仅由一个实例访问 | 由所有实例共享,必须放在共享存储 |
控制文件 | 仅由一个实例访问 | 由所有实例共享,必须放在共享存储 |
联机重做日志文件 | 专供一个实例写入和读取 | 仅有一个实例写入,但其他实例可以在恢复和存档期间读取,如果一个实例关闭,那么其他实例的日志切换可以强制对空闲实例重做日志进行归档 |
存档后的重做日志 | 专供该实例使用 | 专属于该实例,故障恢复期间其他实例可以访问 |
闪回恢复日志 | 仅由一个实例访问 | 由所有实例共享,必须放在共享存储 |
告警日志和其他追踪文件 | 专供该实例使用 | 专属于每个实例,其他实例不会读写 |
ORACLE_HOME | 同一台服务器上访问不同数据库的多个实例可以使用相同的可执行文件 | 与单实例相同,但也可以放在共享存储上,允许所有实例共用一个可执行文件 |
RAC日志路径
oracle 11G
sql
#集群日志
##$ORACLE_HOME/log/${hostname}/alert${sid}.log ---- 11g
##$ORACLE_BASE/diag/crs/${主机名}/crs/trace ---- 19c
#ASM日志
##$ORACLE_BASE/diag/asm/+asm/${ASM实例名}/trace
##/app/oracle/grid/diag/asm/+asm/+ASM1/trace/alert_+ASM1.log
[grid@hferp71:/home/grid]$sqlplus / as sysasm
SQL*Plus: Release 11.2.0.4.0 Production on Tue Nov 26 15:20:39 2024
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options
SQL> show parameter dump
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_core_dump string partial
background_dump_dest string /oracle/app/grid/diag/asm/+asm/+ASM1/trace
core_dump_dest string /oracle/app/grid/diag/asm/+asm/+ASM1/cdump
max_dump_file_size string unlimited
shadow_core_dump string partial
user_dump_dest string /oracle/app/grid/diag/asm/+asm/+ASM1/trace
#ASM日志
[grid@hferp71:/oracle/app/grid/diag/asm/+asm/+ASM1/trace]$
#集群日志
[grid@hferp71:/oracle/app/11.2.0/grid/log/hferp71/crsd]
#监听日志
[grid@hferp71:/oracle/app/grid/diag/tnslsnr/hferp71/listener/trace]
oracle 19C
sql
[grid@hfcwdb66:/home/grid]$sqlplus / as sysasm
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Nov 26 15:34:05 2024 Version 19.7.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.7.0.0.0
SQL> show parameter dump
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_core_dump string partial
background_dump_dest string /oracle/app/19c/grid/rdbms/log
core_dump_dest string /oracle/app/grid/diag/asm/+asm/+ASM1/cdump
max_dump_file_size string unlimited
shadow_core_dump string partial
user_dump_dest string /oracle/app/19c/grid/rdbms/log
#ASM日志
[grid@hfcwdb66:/oracle/app/grid/diag/asm/+asm/+ASM1/trace]$
#集群日志
[grid@hfcwdb66:/oracle/app/grid/diag/crs/hfcwdb66/crs/trace]$
#监听日志
[grid@hfcwdb66:/oracle/app/grid/diag/tnslsnr/hfcwdb66/listener/trace]
主要后台进程
LMON:
LMON:LOCK Monitor Processes 也被称为Global enqueue service monitor
监控集群的状况,维护CGS(实现实例之间心跳的机制)的内存结构;监控非正常终⽌的进程和实例;增加或减少实例时,锁和资源的重新配置;监控全局锁资源,处理死锁和阻塞。
sql
#11G
[root@hferp71 ~]# ps -ef |grep lmon
grid 20301 1 0 10:47 ? 00:00:40 asm_lmon_+ASM1
oracle 25839 1 0 11:42 ? 00:00:34 ora_lmon_hferpdb1
root 41007 40928 0 14:33 pts/4 00:00:00 grep --color=auto lmon
#19C
[root@hfcwdb66 ~]# ps -ef |grep lmon
grid 19020 1 0 13:16 ? 00:00:06 asm_lmon_+ASM1
oracle 21264 1 0 13:16 ? 00:00:06 ora_lmon_hfcwdb1
root 27633 17168 0 14:33 pts/0 00:00:00 grep --color=auto lmon
LMON用于监控整个集群的global enqueues(全局锁)和resources, 而且会执行global enqueue recovery。实例异常终止后,会由LMON来进行GCS内存方面的处理。
-
全局锁是用于控制并发访问共享资源的机制,它可以确保多个会话或事务之间的数据一致性和并发控制。LMON进程负责监控全局锁的分配和释放,并协调集群中各个节点之间的锁的访问和使用。
-
全局锁资源管理:LMON进程负责管理全局锁资源的分配和释放。它维护全局锁的状态信息,如锁的拥有者、等待者和持有者等,并根据请求和释放来更新这些信息。当一个实例加入或者离开集群后,LMON会对lock和resource进行reconfiguration.
-
锁的冲突检测和解决:LMON进程会检测并解决全局锁的冲突。当一个会话请求获取一个已经被其他会话持有的锁时,LMON会检测到这个冲突,并根据锁的优先级和请求者的等待时间来决定如何解决冲突。
-
锁的队列管理:LMON进程维护全局锁的等待队列,并根据请求的先后顺序和优先级来管理队列。它会将等待锁的会话放入适当的队列中,并在锁的释放时选择适当的会话来获取锁。
-
跨节点通信:LMON进程负责在集群节点之间进行通信,以便协调全局锁的使用和访问。它会与其他节点上的LMON进程交换信息,以保持全局锁的一致性和同步。LMON会在不同的实例间进行通讯检查,如果发现对方通讯超时,就会发出节点eviction,所以很多时候节点发生eviction后(ORA-481, ORA-29740等),我们需要查看LMON的trace来了解eviction的原因。
-
LMS:
LMSn:Lock Monitor Services也称作GCS(Global Cache Services)processes
维护GRD中数据块资源的信息,完成数据块在实例之间的传递⼯作。相关消息的发送和接收⼯作。是整个内存融合体系中最忙碌的进程。
sql
[root@hferp71 ~]# ps -ef |grep lms
grid 20306 1 0 10:47 ? 00:01:06 asm_lms0_+ASM1
oracle 25843 1 0 11:42 ? 00:01:03 ora_lms0_hferpdb1
root 41469 40928 0 14:39 pts/4 00:00:00 grep --color=auto lms
#19C
[root@hfcwdb66 ~]# ps -ef |grep lms
grid 19024 1 0 13:16 ? 00:00:16 asm_lms0_+ASM1
oracle 21270 1 0 13:16 ? 00:00:18 ora_lms0_hfcwdb1
oracle 21272 1 0 13:16 ? 00:00:18 ora_lms1_hfcwdb1
root 32252 17168 0 14:39 pts/0 00:00:00 grep --color=auto lms
处理集群中的全局缓存(Global Cache)服务。
-
LMS进程的主要功能包括:
-
全局缓存的读取和写入:LMS进程负责处理其他节点请求的全局缓存数据块的读取和写入。当一个节点需要访问另一个节点的数据块时,它会向LMS进程发送请求,LMS进程会协调数据的传输和同步。
-
数据块的传输和同步:LMS进程负责在集群节点之间传输和同步数据块。当一个节点需要访问另一个节点的数据块时,LMS进程会将数据块从一个节点传输到另一个节点,并确保数据的一致性和可用性。
-
数据块的锁管理:LMS进程负责管理全局缓存数据块的锁。它会处理其他节点请求的锁,并确保数据块在并发访问时的一致性和完整性。
-
数据块的失效处理:LMS进程负责处理全局缓存数据块的失效。当一个节点修改了一个数据块时,LMS进程会通知其他节点对该数据块的缓存进行失效处理,以确保数据的一致性。
-
LMS进程会维护在Global Resource Directory (GRD)中的数据文件以及每个cached block的状态。LMS用于在RAC的实例间进行message以及数据块的传输。LMS是Cache Fusion的一个重要部分。LMS进程可以说是RAC上最活跃的后台进程,会消耗较多的CPU.一般每个实例会有多个LMS进程,每个Oracle版本的默认的LMS进程数目会有所不同,大部分版本的默认值是:MIN(CPU_COUNT/2, 2))
LMD:
LMD:Lock Monitor Deamon Process
负责内存中的队列资源,每个实例只有⼀个LMD进程,为LMD0.
sql
[root@hferp71 ~]# ps -ef |grep lmd
grid 20304 1 0 10:47 ? 00:00:43 asm_lmd0_+ASM1
oracle 25841 1 0 11:42 ? 00:00:28 ora_lmd0_hferpdb1
root 41737 40928 0 14:42 pts/4 00:00:00 grep --color=auto lmd
[root@hfcwdb66 ~]# ps -ef |grep lmd
root 2816 17168 0 14:42 pts/0 00:00:00 grep --color=auto lmd
grid 19022 1 0 13:16 ? 00:00:14 asm_lmd0_+ASM1
oracle 21267 1 0 13:16 ? 00:00:07 ora_lmd0_hfcwdb1
oracle 21274 1 0 13:16 ? 00:00:05 ora_lmd1_hfcwdb1
LMD 进程主要负责处理集群中的缓存块的读取和写入请求。它们协调数据块在集群节点之间的共享和一致性。
大概过程如下:
1.一个连接发出了global enqueue 请求
2.这个请求会被发给本节点的LMD0进程
3.这个前台进程会处于等待状态
4.LMD0会找到这个资源的master节点是谁
5.LMD0会把这个请求发送给master节点
6.如果需要的话,master节点会增加一个新的master资源
7.这时从master节点可以获知谁是owner, waiter
8.当这个资源被grant给requestor后, master节点的LMD0进程会告知requestor节点的LMD0
9.然后requestor节点的LMD0会通知申请资源的前台进程
LCK:
LCK:Lock Process
负责锁的管理(辅助LMD进程队列资源的管理),LCK0,只有⼀个
sql
[root@hferp71 ~]# ps -ef |grep lck
grid 20331 1 0 10:47 ? 00:00:02 asm_lck0_+ASM1
oracle 25881 1 0 11:42 ? 00:00:12 ora_lck0_hferpdb1
root 41871 40928 0 14:44 pts/4 00:00:00 grep --color=auto lck
[root@hfcwdb66 ~]# ps -ef |grep lck
root 4272 17168 0 14:44 pts/0 00:00:00 grep --color=auto lck
grid 19031 1 0 13:16 ? 00:00:00 asm_lck1_+ASM1
grid 19060 1 0 13:16 ? 00:00:02 asm_lck0_+ASM1
oracle 21295 1 0 13:16 ? 00:00:00 ora_lck1_hfcwdb1
oracle 21373 1 0 13:16 ? 00:00:02 ora_lck0_hfcwdb1
LCK0进程主要处理非cache fustion的资源请求,比如library 和row cache 请求。
- LCK0处理在实例一级的锁:
- Row cache entries
- Library cache entries
- Result cache entries
- 这些实例级的锁的owner, waiter是LCK0进程。
- 只要这个实例的锁的owner是LCK0,那么这个实例的任何一个连接都可以使用这种cached的metedata.
- 如果本地的实例没有拥有这个lock,那么需要申请这个lock,前台进程会等待DFS Lock Handle。
另外,当shared pool出现压力需要释放一些内存来存放新的cursor时,LCK进程会将dictionary cache 的一些内存进行释放。
DIAG:
DIAG:Diagnostic Deamon
转储数据块相关的诊断信息,当系统可能出现性能问题时,
DIAG进程响应其他进程发出的dump请求,将相关 的诊断信息写到trace⽂件中。这种⽅式⽣成诊断信息的操作是轻量级的,并不会对系统产⽣可⻅的性能影响。
sql
[root@hferp71 ~]# ps -ef |grep diag
grid 20295 1 0 10:47 ? 00:00:17 asm_diag_+ASM1
oracle 25828 1 0 11:42 ? 00:00:15 ora_diag_hferpdb1
root 42033 40928 0 14:46 pts/4 00:00:00 grep --color=auto diag
[root@hfcwdb66 ~]# ps -ef |grep diag
root 6964 17168 0 14:46 pts/0 00:00:00 grep --color=auto diag
root 7280 1 14 13:10 ? 00:13:56 /opt/oracle.ahf/jre/bin/java -server -Xms64m -Xmx128m -Djava.awt.headless=true -Ddisable.checkForUpdate=true -XX:HeapDumpPath=/oracle/app/oracle.ahf/data/hfcwdb66/diag/tfa oracle.rat.tfa.TFAMain /opt/oracle.ahf/tfa
grid 19012 1 0 13:16 ? 00:00:04 asm_diag_+ASM1
grid 19833 1 0 13:16 ? 00:00:31 /oracle/app/19c/grid/jdk/bin/java -server -Xms30M -Xmx512M -Djava.awt.headless=true -Ddisable.checkForUpdate=true -DTRACING.ENABLED=false -XX:ParallelGCThreads=1 -cp /oracle/app/19c/grid/jlib/cha.jar:/oracle/app/19c/grid/jlib/chaconfig.jar:/oracle/app/19c/grid/jlib/cha-diag-msg.jar:/oracle/app/19c/grid/jlib/clsce.jar:/oracle/app/19c/grid/jlib/srvm.jar:/oracle/app/19c/grid/jlib/srvmhas.jar:/oracle/app/19c/grid/jlib/srvmasm.jar:/oracle/app/19c/grid/jlib/netcfg.jar:/oracle/app/19c/grid/jdbc/lib/ojdbc8.jar:/oracle/app/19c/grid/ucp/lib/ucp.jar:/oracle/app/19c/grid/jlib/fte.jar:/oracle/app/19c/grid/jlib/jai_core.jar:/oracle/app/19c/grid/jlib/mlibwrapper_jai.jar:/oracle/app/19c/grid/jlib/vecmath.jar:/oracle/app/19c/grid/jlib/jai_codec.jar:/oracle/app/19c/grid/jlib/jh.jar oracle.cha.server.CHADDriver
oracle 21237 1 0 13:16 ? 00:00:03 ora_diag_hfcwdb1
root 22065 17770 0 13:17 ? 00:00:09 /oracle/app/19c/grid/perl/bin/perl /oracle/app/19c/grid/bin/diagsnap.pl start
用来打印诊断信息。diag进程会响应别的进程发出的dump请求,将相关的诊断信息写到diag trace文件中。在RAC上,当发出global oradebug请求时,会由每个实例的diag进程来打印诊断信息到diag trace中。
LMHB:
监控RAC中的其他进程。
sql
[root@hferp71 ~]# ps -ef |grep lmhb
grid 20310 1 0 10:47 ? 00:00:01 asm_lmhb_+ASM1
oracle 25849 1 0 11:42 ? 00:00:01 ora_lmhb_hferpdb1
root 42150 40928 0 14:47 pts/4 00:00:00 grep --color=auto lmhb
[root@hfcwdb66 ~]# ps -ef |grep lmhb
root 8071 17168 0 14:47 pts/0 00:00:00 grep --color=auto lmhb
grid 19026 1 0 13:16 ? 00:00:09 asm_lmhb_+ASM1
oracle 21289 1 0 13:16 ? 00:00:08 ora_lmhb_hfcwdb1
监控本地的LMON, LMD, LCK0,RMS0 and LMSn等进程是否运行正常,是否被阻塞或者已经hang了。
RAC常见的问题
并发控制
在集群环境中,数据是放在共享存储上的,每个节点之间的身份是对等的,对数据有相同的访问权利,这就要求集群件对这种对等权限的并发访问有控制机制。
在Oracle RAC中,利用Distribute Lock Management(DLM)机制进行多个节点间并发访问的控制。(内存融合机制)
健忘症
该问题是由于每个节点上都有一份集群配置信息,修改节点的配置信息得不到同步导致的。
解决健忘问题的最简单办法是,整个集群只有一份集群配置信息,无论哪个节点修改了配置信息,都是同一份,配置信息对每个节点都是一样的。
Oracle RAC使用OCR Disk文件解决这个问题
如果需要修改其内容,节点上的OCR process会通知可以更改OCR Disk的节点一OCR master Node,master node节点上的OCR process负责更新本地和其他节点的OCR cache内容。
OCR Disk每四个小时自动备份一次。
脑裂
在集群环境中,节点间需要某种机制,比如心跳,了解彼此的健康状况。
假如心跳出了问题,每个节点都会认为其他节点都不复存在了,自己是唯一的幸存者,就会控制整个集群。因为数据是共享的,都来控制独享,势必会破坏共享数据的完整性和一致性。
这时候表决盘被引入,通过投票机制,获得最高票数或者最早到达的获得投票的,幸存,其他节点被踢出。
在Oracle RAC中Voting Disk用来记录节点间成员的状态,出现脑裂时,仲裁哪个节点获得控制权,其他的节点将被剔除。
IO隔离
虽然节点被剔除了,但是并没有限制其对共享数据的访问,所以为了限制已踢出节点对共享数据的访问,必须进行IO隔离。
Oracle RAC采取的是直接重启故障节点。
OCR、voting disk的作用
OCR(Oracle Cluster Registry)和Voting Disk是Oracle数据库集群中的两个重要组件。可以通过登录到Oracle Grid Infrastructure管理界面来检查OCR和Voting Disk的状态。在管理界面中,可以查看OCR和Voting Disk的详细信息,并进行相关的配置和管理操作。
OCR(Oracle Cluster Registry)
OCR是用于存储和管理Oracle数据库集群配置信息的共享存储。它记录了集群中的所有节点、资源、服务和配置参数等信息。
OCR记录节点成员的配置信息,如database、ASM、instance、listener、VIP等CRS资源的配置信息,
类似于oralce的注册表。
检查OCR状态
sql
[grid@hferp71:/home/grid]$ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 3
Total space (kbytes) : 262120
Used space (kbytes) : 2996
Available space (kbytes) : 259124
ID : 216145073
Device/File Name : +dggrid1
Device/File integrity check succeeded
Device/File Name : +dggrid2
Device/File integrity check succeeded
Device/File not configured
Device/File not configured
Device/File not configured
Cluster registry integrity check succeeded
Logical corruption check bypassed due to non-privileged user
#19C
[grid@hfcwdb66:/home/grid]$ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 4
Total space (kbytes) : 491684
Used space (kbytes) : 84268
Available space (kbytes) : 407416
ID : 215749915
Device/File Name : +DGGRID01
Device/File integrity check succeeded
Device/File Name : +DGGRID02
Device/File integrity check succeeded
Device/File not configured
Device/File not configured
Device/File not configured
Cluster registry integrity check succeeded
Logical corruption check bypassed due to non-privileged user
-
OCR的主要作用包括:
-
配置管理:OCR存储了集群的配置信息,包括节点信息、资源配置、服务配置等。当集群发生变化时,如添加或删除节点、修改资源配置等,OCR会记录这些变化并通知其他节点进行相应的配置更新。
-
故障恢复:OCR存储了集群的状态信息,可以用于故障恢复。当节点或资源发生故障时,OCR可以提供相关的信息,帮助集群进行故障切换和恢复。
-
高可用性:OCR是一个共享存储,可以被所有节点访问。这样,在节点故障或网络分区的情况下,其他节点仍然可以访问OCR,并继续提供服务,保证了集群的高可用性。
-
sql
ASMCMD> ls -ls
Type Redund Striped Time Sys Block_Size Blocks Bytes Space Name
OCRFILE MIRROR COARSE NOV 26 14:00:00 Y 4096 66591 272756736 578813952 REGISTRY.255.1129492283
ASMCMD> pwd
+dggrid2/hferpcluster/ocrfile
ASMCMD> ls -ls
Type Redund Striped Time Sys Block_Size Blocks Bytes Space Name
OCRFILE MIRROR COARSE NOV 26 14:00:00 Y 4096 66591 272756736 578813952 REGISTRY.255.1129488961
ASMCMD> pwd
+dggrid1/hferpcluster/ocrfile
Voting Disk
Voting Disk是用于实现Oracle数据库集群中的节点间投票的共享存储。
检查Voting Disk状态:
sql
[grid@hferp71:/home/grid]$crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE a1212283af854fe2bff79eef8af29d1d (/dev/mapper/asm-dggrid1) [DGGRID1]
2. ONLINE 8b2ec6fe91284f02bf5e5ffcceac3334 (/dev/mapper/asm-dggrid2) [DGGRID1]
3. ONLINE 2485b14a4cba4f34bfc8899f1eecc38b (/dev/mapper/asm-dggrid3) [DGGRID1]
Located 3 voting disk(s).
[grid@hfcwdb66:/home/grid]$crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 476d4ace60274f1ebfa68287b2e72abc (/dev/asm-grid01) [DGGRID01]
2. ONLINE ce56146bf03e4f6cbfd2a5783b9e282c (/dev/asm-grid02) [DGGRID01]
3. ONLINE 3a877d39a9b54ff6bfcdbd61250f7ef0 (/dev/asm-grid03) [DGGRID01]
Located 3 voting disk(s).
-
主要作用包括:
-
节点间投票:在Oracle数据库集群中,节点通过投票来决定集群中的主节点(Master Node)。每个节点都有一个投票权,通过投票来决定集群中的决策,如故障切换、资源分配等。Voting Disk存储了节点的投票信息,确保集群中的决策是基于多数节点的一致性。
-
高可用性:Voting Disk也是一个共享存储,可以被所有节点访问。这样,在节点故障或网络分区的情况下,其他节点仍然可以访问Voting Disk,并继续进行投票,保证了集群的高可用性。
-
动态节点管理:Voting Disk还用于动态节点管理。当集群中添加或删除节点时,Voting Disk会记录这些变化,并通知其他节点进行相应的配置更新和投票权的重新分配。
-
网络层
Public IP(公共IP):
Public IP是用于外部客户端访问数据库的IP地址。它是唯一对外可见的IP地址,用于连接到数据库的监听器,以及通过网络访问数据库服务。Public IP通常是与数据库服务器所在的物理网络接口卡(NIC)相关联的IP地址。
Private IP(私有IP):
Private IP是用于集群内部节点之间的通信的IP地址。它是在集群内部使用的,不对外可见。Private IP通常是与数据库服务器所在的专用网络接口卡(NIC)相关联的IP地址。它用于节点间的集群通信、缓存一致性(Cache Fusion)和共享存储访问等。
Virtual IP(虚拟IP):
Virtual IP是用于提供高可用性和故障切换的IP地址。它是一个虚拟的IP地址,可以在集群中的多个节点之间进行切换。当某个节点发生故障时,Virtual IP会自动切换到其他健康的节点上,以保证数据库服务的连续性。Virtual IP通常与VIP资源相关联,由Oracle Clusterware动态管理。
SCAN(Single Client Access Name,单客户端访问名称):
SCAN是用于提供集中化的数据库服务名称的虚拟主机名。它是在集群中的多个节点上运行的SCAN监听器的统一名称。当客户端连接到数据库时,可以使用SCAN来访问数据库服务,而不需要指定具体的节点名称或IP地址。SCAN提供了更简单、更灵活的连接方式,并支持动态的节点管理和故障切换。
什么是脑裂
脑裂(Split-Brain)是指在分布式系统中,主节点与备份节点之间的通信中断或网络故障导致系统出现分裂的情况。在脑裂发生时,主节点和备份节点都认为自己是主节点,导致系统出现不一致的状态。
-
脑裂可能导致以下问题:
-
数据不一致:主节点和备份节点在网络分裂期间可能会更新各自的数据,导致数据不一致。
-
服务冲突:主节点和备份节点可能同时提供相同的服务,导致冲突和数据损坏。
-
数据丢失:在脑裂发生时,可能会丢失一些数据,因为主节点和备份节点无法及时同步数据。
-
-
为了避免脑裂问题,通常会使用一些机制来确保主备节点之间的通信和一致性,例如:
-
心跳检测:主备节点之间通过定期发送心跳消息来检测彼此的存活状态。
-
智能切换:当检测到主节点失效时,备份节点会自动切换为主节点,以确保系统的连续性和可用性。
-
数据同步:主备节点之间通过数据同步机制来保持数据的一致性,例如使用复制或日志传输等方式。
-
全局资源目录 (GRD)
Oracle集群RAC的全局资源目录(Global Resource Directory,简称GRD)是Oracle RAC(Real Application Clusters,实际应用集群)中的一个关键组件。GRD用于跟踪和管理集群中的资源状态和分配情况。
GRD关键信息
GRD存储了以下关键信息:
- 实例信息:GRD记录了集群中的所有实例(Instance)的状态和配置信息,包括实例的名称、节点信息、运行状态等。
- 服务信息:GRD记录了集群中的所有服务(Service)的状态和配置信息,包括服务的名称、实例分配情况、负载均衡策略等。
- 数据库资源信息:GRD记录了数据库资源(如表空间、数据文件、控制文件等)的分配情况和状态。
- 锁信息:GRD跟踪和管理集群中的锁资源,包括共享锁和排他锁等。
GRD通过在集群中的每个节点上维护一个本地资源目录(Local Resource Directory,简称LRD),并使用集群间的通信机制来保持LRD之间的同步,从而实现全局的资源管理和状态跟踪。
主要作用
GRD的主要作用是支持Oracle RAC的高可用性和负载均衡功能。通过GRD,集群中的各个节点可以了解其他节点的资源状态,从而实现故障转移和资源的动态分配。同时,GRD还支持服务级别的负载均衡,通过根据服务的负载情况和节点的资源状况来动态调整服务的分配策略,以提供更好的性能和可用性。
全局缓存服务(GCS)
Oracle集群RAC全局缓存服务(Global Cache Service,简称GCS)是Oracle RAC(Real Application Clusters)中的一个关键组件。GCS负责管理和协调集群中的共享缓存(Shared Cache),以支持并发访问和共享数据。
在Oracle RAC中,每个节点都有自己的本地缓存(Local Cache),用于存储本地数据块。而共享缓存则是所有节点共享的一部分内存,用于存储全局数据块。GCS负责跟踪和管理共享缓存中的数据块的分配和使用情况。
通过GCS,Oracle RAC实现了高可用性和可扩展性。它允许多个节点同时访问和更新共享数据,提供了更高的并发性能和更好的系统可用性。同时,GCS还通过动态分配和移动数据块,实现了负载均衡和故障转移的功能。
主要功能
GCS的主要功能包括:
- 数据块的分配和释放:GCS负责将全局数据块分配给各个节点的本地缓存,并在需要时将数据块从一个节点的本地缓存移动到另一个节点的本地缓存。
- 数据块的一致性:GCS通过协调各个节点之间的数据访问和更新,确保对共享数据块的并发访问是一致的。例如,当一个节点修改了一个数据块时,GCS会通知其他节点更新其本地缓存中的副本。
- 数据块的锁管理:GCS负责管理共享缓存中的锁资源,以支持并发事务的隔离和一致性。它通过协调各个节点之间的锁请求和释放,保证并发事务的正确执行。
缓存融合(Cache Fusion)
缓存融合(Cache Fusion)是Oracle集群RAC(Real Application Clusters)中的一个关键特性,用于实现高性能和高可用性的共享缓存访问。
在Oracle RAC中,每个节点都有自己的本地缓存(Local Cache),用于存储本地数据块。当一个节点需要访问另一个节点的数据块时,传统的做法是通过网络将数据块传输到请求节点的本地缓存中,这种方式称为远程读(Remote Read)。
缓存融合通过直接访问其他节点的本地缓存,而不是通过网络传输数据块,来实现更快的数据访问。当一个节点需要访问另一个节点的数据块时,它会向目标节点发送一个请求,目标节点会将数据块直接发送给请求节点的本地缓存,而不是通过网络传输。这种方式称为直接读(Direct Read)。
缓存融合是Oracle RAC实现高性能和高可用性的关键技术之一。它通过直接访问其他节点的本地缓存,减少了网络开销,提高了数据访问的速度和并发性能,从而提供了更好的用户体验和系统可用性。
缓存融合的主要优势:
- 更快的数据访问:由于数据块直接从本地缓存传输,而不需要通过网络,所以缓存融合可以显著提高数据访问的速度。这对于需要频繁访问其他节点的数据的应用程序特别有益。
- 减少网络开销:传统的远程读需要通过网络传输数据块,会产生较大的网络开销。而缓存融合可以减少网络开销,提高系统的整体性能和吞吐量。
- 更好的并发性能:缓存融合允许多个节点同时访问和更新共享数据块,提供了更高的并发性能。它通过协调各个节点之间的数据访问和更新,确保对共享数据块的并发访问是一致的。
RAC的心跳机制
网络心跳
介绍:网络心跳主要是确保集群节点间的连通性,以便节点之间能够了解彼此的状态。
原理:ocssd.bin进程每秒向其他节点发送网络心跳,通过心跳情况确认节点的连通性,以及当网络心跳出现问题时做出处理。
相关进程:
这个功能主要是由守护进程ocssd.bin完成的。ocssd.bin守护进程包含以下线程:
发送线程(clssnmSending Thread):每秒向集群中其他节点发送网络心跳信息
分析线程(clssnmPolling Thread):分析收到的网络心跳信息并进行处理,如果发现某一些节点持续丢失网络心跳,就会通知集群进行重新配置。
集群重新配置线程(clssnmRcfgMgrThread):当接收到分析线程的重新配置的通知时,该进程进行重新配置。
派遣线程(clssnmClusterListener):负责接收从远程传递过来的消息,之后,根据信息的种类发给相关的线程进行处理。
磁盘心跳
介绍:如果由于网络心跳异常,导致集群出现脑裂的发生,磁盘心跳则帮助解决该问题。
原理:oracle集群的每一个节点每秒都会向集群中所有的表决盘注册本地节点的磁盘心跳信息,也就是说,所有的VF的信息是相同的。同时会将自己能够联系的到的集群中的其他节点的信息,或者说本地节点认为集群中的成员列表信息填入到表决盘中。一旦发生脑裂,CSS的重新配置线程就会通过表决盘的信息了解集群节点间的联通新,从而决定集群会分裂成几个子集群,以及每个子集群所包含的节点情况和每个节点的状态。
相关进程
磁盘心跳线程(clssnmvDiskPing Thread):该线程负责向集群的表决盘中发送磁盘心跳,同时,该线程也负责读取表决盘中的kill block的信息,以确定本地节点是否需要重新启动。
磁盘心跳监控线程(clssnmvDiskPingMonitor Thread):监控磁盘心跳线程是否能够正常地发送心跳,是否能正确读取kill block的信息。
Kill block线程(clssnmv KillBlock Thread):负责监控VF的kill block信息.
本地心跳
介绍:监控ocssd.bin进程以及本地节点的状态
原理:Oracle每一秒在向远端节点发送网络心跳的同时,同一进程向cssdagent和cssdmonitor发送本地ocssd.bin进程的状态
srvctl、crsctl命令
srvctl命令-应用层
srvctl(Server Control)是一个命令行工具,可用于管理定义在 Oracle Cluster Registry (OCR)上的资源。
这些资源包括节点应用(nodeapps), 它构成Oracle Cluterware ,而其包括the Oracle Notification Service (ONS), the Global Services Daemon (GSD)
其他的资源也可以被 SRVCTL管理 , 如 databases, instances, listeners, services, and applications。
通过 SRVCTL,可以启动或停止 nodeapps、databases、instances、listeners 和 services,删除或移去 instances 和 services,增加 services,管理配置信息。
**查看 scan ip 地址配置 **
sql
srvctl config scan
srvctl status scan
[grid@hferp71:/home/grid]$srvctl config scan
SCAN name: hferpdbscan, Network: 1/172.30.21.0/255.255.255.0/ens33
SCAN VIP name: scan1, IP: /hferpdbscan/172.30.21.175
[grid@hferp71:/home/grid]$srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node hferp71
[grid@hferp71:/home/grid]$
[grid@hfcwdb66:/home/grid]$srvctl config scan
SCAN name: hfcwdbscan, Network: 1
Subnet IPv4: 172.30.21.0/255.255.255.0/enp0s3, static
Subnet IPv6:
SCAN 1 IPv4 VIP: 172.30.21.140
SCAN VIP is enabled.
[grid@hfcwdb66:/home/grid]$srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node hfcwdb66
[grid@hfcwdb66:/home/grid]$
查看 SCAN 监听情况
sql
srvctl status scan_listener
[grid@hferp71:/home/grid]$srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node hferp71
[grid@hferp71:/home/grid]$
[grid@hfcwdb66:/home/grid]$srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node hfcwdb66
[grid@hfcwdb66:/home/grid]$
查询节点应用程序状态
sql
srvctl status nodeapps
[grid@hferp71:/home/grid]$srvctl status nodeapps
VIP hferp71vip is enabled
VIP hferp71vip is running on node: hferp71
VIP hferp72vip is enabled
VIP hferp72vip is running on node: hferp72
Network is enabled
Network is running on node: hferp71
Network is running on node: hferp72
GSD is disabled
GSD is not running on node: hferp71
GSD is not running on node: hferp72
ONS is enabled
ONS daemon is running on node: hferp71
ONS daemon is running on node: hferp72
[grid@hferp71:/home/grid]$
[grid@hfcwdb66:/home/grid]$srvctl status nodeapps
VIP 172.30.21.138 is enabled
VIP 172.30.21.138 is running on node: hfcwdb66
VIP 172.30.21.139 is enabled
VIP 172.30.21.139 is running on node: hfcwdb67
Network is enabled
Network is running on node: hfcwdb66
Network is running on node: hfcwdb67
ONS is enabled
ONS daemon is running on node: hfcwdb66
ONS daemon is running on node: hfcwdb67
[grid@hfcwdb66:/home/grid]$
节点应用程序配置(VIP、GSD、ONS、监听器)
sql
srvctl config nodeapps
[grid@hferp71:/home/grid]$srvctl config nodeapps
Network exists: 1/172.30.21.0/255.255.255.0/ens33, type static
VIP exists: /hferp71vip/172.30.21.173/172.30.21.0/255.255.255.0/ens33, hosting node hferp71
VIP exists: /hferp72vip/172.30.21.174/172.30.21.0/255.255.255.0/ens33, hosting node hferp72
GSD exists
ONS exists: Local port 6100, remote port 6200, EM port 2016
[grid@hferp71:/home/grid]$
[grid@hfcwdb66:/home/grid]$srvctl config nodeapps
Network 1 exists
Subnet IPv4: 172.30.21.0/255.255.255.0/enp0s3, static
Subnet IPv6:
Ping Targets:
Network is enabled
Network is individually enabled on nodes:
Network is individually disabled on nodes:
VIP exists: network number 1, hosting node hfcwdb66
VIP Name: hfcwdb66vip
VIP IPv4 Address: 172.30.21.138
VIP IPv6 Address:
VIP is enabled.
VIP is individually enabled on nodes:
VIP is individually disabled on nodes:
VIP exists: network number 1, hosting node hfcwdb67
VIP Name: hfcwdb67vip
VIP IPv4 Address: 172.30.21.139
VIP IPv6 Address:
VIP is enabled.
VIP is individually enabled on nodes:
VIP is individually disabled on nodes:
ONS exists: Local port 6100, remote port 6200, EM port 2016, Uses SSL true
ONS is enabled
ONS is individually enabled on nodes:
ONS is individually disabled on nodes:
[grid@hfcwdb66:/home/grid]$
监听查看
查看监听状态
sql
srvctl status listener
[grid@hferp71:/home/grid]$srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): hferp71,hferp72
[grid@hfcwdb66:/home/grid]$srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): hfcwdb67,hfcwdb66
查看监听配置
sql
srvctl config listener -a
[grid@hferp71:/home/grid]$srvctl config listener -a
Name: LISTENER
Network: 1, Owner: grid
Home: <CRS home>
/oracle/app/11.2.0/grid on node(s) hferp71,hferp72
End points: TCP:1521
[grid@hferp71:/home/grid]$
[grid@hfcwdb66:/home/grid]$srvctl config listener -a
Name: LISTENER
Type: Database Listener
Network: 1, Owner: grid
Home: <CRS home>
/oracle/app/19c/grid on node(s) hfcwdb67,hfcwdb66
End points: TCP:1521
Listener is enabled.
Listener is individually enabled on nodes:
Listener is individually disabled on nodes:
[grid@hfcwdb66:/home/grid]$
查看scan监听器的状态
sql
[grid@hferp71:/home/grid]$srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
[grid@hferp71:/home/grid]$
[grid@hfcwdb66:/home/grid]$srvctl config scan_listener
SCAN Listeners for network 1:
Registration invited nodes:
Registration invited subnets:
Endpoints: TCP:1521
SCAN Listener LISTENER_SCAN1 exists
SCAN Listener is enabled.
[grid@hfcwdb66:/home/grid]$
查看scan网络配置
sql
srvctl status scan_listener
[grid@hferp71:/home/grid]$srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node hferp71
[grid@hferp71:/home/grid]$
[grid@hfcwdb66:/home/grid]$srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node hfcwdb66
[grid@hfcwdb66:/home/grid]$
查看vip网络
sql
srvctl status vip -n tbase1
[grid@hferp71:/home/grid]$srvctl status vip -n hferp71
VIP hferp71vip is enabled
VIP hferp71vip is running on node: hferp71
[grid@hferp71:/home/grid]$srvctl status vip -n hferp72
VIP hferp72vip is enabled
VIP hferp72vip is running on node: hferp72
[grid@hfcwdb66:/home/grid]$srvctl status vip -n hfcwdb66
VIP 172.30.21.138 is enabled
VIP 172.30.21.138 is running on node: hfcwdb66
[grid@hfcwdb66:/home/grid]$srvctl status vip -n hfcwdb67
VIP 172.30.21.139 is enabled
VIP 172.30.21.139 is running on node: hfcwdb67
数据库查看
数据库名称
sql
srvctl config database
[grid@hferp71:/home/grid]$srvctl config database
hferpdb
[grid@hfcwdb66:/home/grid]$srvctl config database
hfcwdb
数据库状态
sql
srvctl status database -d hferpdb -f -v
[grid@hferp71:/home/grid]$srvctl status database -d hferpdb -f -v
Instance hferpdb1 is running on node hferp71. Instance status: Open.
Instance hferpdb2 is running on node hferp72. Instance status: Open.
检查指定实例的状态
sql
srvctl status instance -d hferpdb -i hferpdb1
[grid@hferp71:/home/grid]$srvctl status instance -d hferpdb -i hferpdb1
Instance hferpdb1 is running on node hferp71
查看数据库配置
sql
srvctl config database -d hferpdb -a
[grid@hferp71:/home/grid]$srvctl config database -d hferpdb -a
Database unique name: hferpdb
Database name: hferpdb
Oracle home: /oracle/app/oracle/product/11.2.0/db_1
Oracle user: oracle
Spfile: +DGSYSTEM/hferpdb/spfilehferpdb.ora
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: hferpdb
Database instances: hferpdb1,hferpdb2
Disk Groups: DGSYSTEM,DGDATA01
Mount point paths:
Services:
Type: RAC
Database is enabled
Database is administrator managed
[grid@hferp71:/home/grid]$
[grid@hfcwdb66:/home/grid]$srvctl config database -d hfcwdb -a
Database unique name: hfcwdb
Database name: hfcwdb
Oracle home: /oracle/app/oracle/product/19c/db_1
Oracle user: oracle
Spfile: +DGSYSTEM/HFCWDB/PARAMETERFILE/spfile.278.1130977937
Password file: +DGSYSTEM/HFCWDB/PASSWORD/pwdhfcwdb.266.1130972971
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools:
Disk Groups: DGSYSTEM,DGDATA01
Mount point paths:
Services:
Type: RAC
Start concurrency:
Stop concurrency:
Database is enabled
Database is individually enabled on nodes:
Database is individually disabled on nodes:
OSDBA group: dba
OSOPER group: oper
Database instances: hfcwdb1,hfcwdb2
Configured nodes: hfcwdb66,hfcwdb67
CSS critical: no
CPU count: 0
Memory target: 0
Maximum memory: 0
Default network number for database services:
Database is administrator managed
[grid@hfcwdb66:/home/grid]$
ASM查询
sql
srvctl status asm
srvctl status asm -a
[grid@hferp71:/home/grid]$srvctl status asm
ASM is running on hferp71,hferp72
[grid@hferp71:/home/grid]$srvctl status asm -a
ASM is running on hferp71,hferp72
ASM is enabled.
[grid@hfcwdb66:/home/grid]$srvctl status asm
ASM is running on hfcwdb67,hfcwdb66
[grid@hfcwdb66:/home/grid]$srvctl status asm -a
ASM is running on hfcwdb67,hfcwdb66
ASM is enabled.
ASM instance +ASM1 is running on node hfcwdb66
Number of connected clients: 2
Client names: hfcwdb1:hfcwdb:hfcwdbcluster hfcwdb66:_OCR:hfcwdbcluster
ASM instance +ASM2 is running on node hfcwdb67
Number of connected clients: 2
Client names: hfcwdb2:hfcwdb:hfcwdbcluster hfcwdb67:_OCR:hfcwdbcluster
[grid@hfcwdb66:/home/grid]$
查看asm配置
sql
srvctl config asm -a
[grid@hferp71:/home/grid]$srvctl config asm -a
ASM home: /oracle/app/11.2.0/grid
ASM listener: LISTENER
ASM is enabled.
[grid@hferp71:/home/grid]$
[grid@hfcwdb66:/home/grid]$srvctl config asm -a
ASM home: <CRS home>
Password file: +dggrid01/orapwASM
Backup of Password file: +dggrid01/orapwASM_backup
ASM listener: LISTENER
ASM is enabled.
ASM is individually enabled on nodes:
ASM is individually disabled on nodes:
ASM instance count: 3
Cluster ASM listener: ASMNET1LSNR_ASM
[grid@hfcwdb66:/home/grid]$
启动实例
sql
grid@hefei1:/home/grid]$srvctl stop instance -node hefei1 -db hefeidb
grid@hefei1:/home/grid]$srvctl start instance -node hefei1 -db hefeidb
grid@hefei1:/home/grid]$srvctl status instance -node hefei1 -db hefeidb
监听相关
sql
$ srvctl-h
$ srvctl start listener
$srvctl stop listener
$srvctl start listener-I mylistener #启动指定的监听名称
$ srvctl status listener
手动漂移scan ip
sql
[grid@rac1 ~]$ srvctl relocate scan_listener -i 1 -n rac1
手工漂移vip
sql
[grid@hfdb30:/home/grid]$srvctl relocate vip -i hfdb30 -n hfdb31 -f -v
VIP was relocated successfully.
[grid@rac1 ~]$ srvctl relocate vip -i rac1 -n rac1 -f -v
VIP was relocated successfully
添加新的本地监听
sql
srvctl add listener -l listener_1522 -p 1522 -o $ORACLE_HOME -k 1
srvctl start listener -l listener_1522
scan监听增加新的监听端口
sql
srvctl modify scan_listener -p 1521,1522
srvctl modify scan_listener -u
srvctl stop scan_listener
srvctl start scan_listener
注册数据库信息
sql
[oracle@hfcwdb66:/oracle/app/oracle/product/19c/db_1/dbs]$srvctl add database -d hfzcdb -o /oracle/app/oracle/product/19c/db_1 -p +dgsystem/hfzcdb/parameterfile/spfile.278.1134481697
[oracle@hfcwdb66:/oracle/app/oracle/product/19c/db_1/dbs]$srvctl add instance -d hfzcdb -i hfzcdb1 -n hfcwdb66
[oracle@hfcwdb66:/oracle/app/oracle/product/19c/db_1/dbs]$srvctl add instance -d hfzcdb -i hfzcdb2 -n hfcwdb67
[oracle@hfcwdb66:/oracle/app/oracle/product/19c/db_1/dbs]$srvctl enable database -d hfzcdb
PRCC-1010 : hfzcdb was already enabled
PRCR-1002 : Resource ora.hfzcdb.db is already enabled
[oracle@hfcwdb66:/oracle/app/oracle/product/19c/db_1/dbs]$srvctl enable instance -d hfzcdb -i hfzcdb1
[oracle@hfcwdb66:/oracle/app/oracle/product/19c/db_1/dbs]$srvctl enable instance -d hfzcdb -i hfzcdb2
[oracle@hfcwdb66:/oracle/app/oracle/product/19c/db_1/dbs]$
--启动数据库【两个数据库一起启动】
[oracle@hfcwdb66:/oracle/app/oracle/product/19c/db_1/dbs]$srvctl start database -d hfzcdb
crsctl命令-集群层
crsctl(Cluster Ready Services Control )是一个命令行工具,可以用于管理 Oracle Clusterware daemons(何谓 daemon,又名守护进程、后台进程,名称以字母括 Cluster Synchronization Services (CSS), Cluster-Ready Services (CRS), and Event Manager (EVM)。
通过 CRSCTL,可以启动或停止 Oracle Cluster,确定 Oracle Clusterware 的当前状态。
cd $GRID_HOME
grid的安装目录
启停集群: (需要root用户)
sql
crsctl stop crs
crsctl start crs
开启/关闭集群自动启动
sql
crsctl disable crs
crsctl enable crs
查看集群名字:显示当前集群的名称。
sql
cemutlo -n
olsnodes -c
[grid@hferp71:/home/grid]$cemutlo -n
hferpcluster
[grid@hferp71:/home/grid]$
[grid@hferp71:/home/grid]$olsnodes -c
hferpcluster
[grid@hfcwdb66:/home/grid]$cemutlo -n
hfcwdbcluster
[grid@hfcwdb66:/home/grid]$
[grid@hfcwdb66:/home/grid]$olsnodes -c
hfcwdbcluster
查看集群版本
查询当前集群软件版本和主机名。
sql
crsctl query crs softwareversion hostname
[grid@hferp71:/home/grid]$ crsctl query crs softwareversion hferp72
Oracle Clusterware version on node [hferp72] is [11.2.0.4.0]
[grid@hfcwdb66:/home/grid]$crsctl query crs softwareversion hfcwdb66
Oracle Clusterware version on node [hfcwdb66] is [19.0.0.0.0]
查看集群组件状态
显示所有集群组件的状态。
sql
crsctl stat res -t
[grid@hferp71:/home/grid]$crsctl stat res -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DGDATA01.dg
ONLINE ONLINE hferp71
ONLINE ONLINE hferp72
ora.DGGRID1.dg
ONLINE ONLINE hferp71
ONLINE ONLINE hferp72
ora.DGGRID2.dg
ONLINE ONLINE hferp71
ONLINE ONLINE hferp72
ora.DGRECOVERY.dg
ONLINE ONLINE hferp71
ONLINE ONLINE hferp72
ora.DGSYSTEM.dg
ONLINE ONLINE hferp71
ONLINE ONLINE hferp72
ora.LISTENER.lsnr
ONLINE ONLINE hferp71
ONLINE ONLINE hferp72
ora.asm
ONLINE ONLINE hferp71 Started
ONLINE ONLINE hferp72 Started
ora.gsd
OFFLINE OFFLINE hferp71
OFFLINE OFFLINE hferp72
ora.net1.network
ONLINE ONLINE hferp71
ONLINE ONLINE hferp72
ora.ons
ONLINE ONLINE hferp71
ONLINE ONLINE hferp72
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE hferp71
ora.cvu
1 ONLINE ONLINE hferp71
ora.hferp71.vip
1 ONLINE ONLINE hferp71
ora.hferp72.vip
1 ONLINE ONLINE hferp72
ora.hferpdb.db
1 ONLINE ONLINE hferp71 Open
2 ONLINE ONLINE hferp72 Open
ora.oc4j
1 ONLINE ONLINE hferp71
ora.scan1.vip
1 ONLINE ONLINE hferp71
[grid@hferp71:/home/grid]$
检查Cluster Ready Services(CRS)的状态。
sql
crsctl check crs
[grid@hferp71:/home/grid]$crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
[grid@hfcwdb66:/home/grid]$crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
[grid@hfcwdb66:/home/grid]$
检查Cluster Synchronization Services Daemon(CSSD)的状态。
sql
crsctl check cssd
[grid@hferp71:/home/grid]$crsctl check cssd
CRS-272: This command remains for backward compatibility only
Cluster Synchronization Services is online
[grid@hfcwdb66:/home/grid]$crsctl check cssd
CRS-272: This command remains for backward compatibility only
Cluster Synchronization Services is online
[grid@hfcwdb66:/home/grid]$
检查Cluster Ready Services Daemon(CRSD)的状态。
sql
crsctl check crsd
[grid@hferp71:/home/grid]$crsctl check crsd
CRS-272: This command remains for backward compatibility only
Cluster Ready Services is online
[grid@hferp71:/home/grid]$
检查Event Manager Daemon(EVM)的状态。
sql
crsctl check evmd
[grid@hferp71:/home/grid]$crsctl check evmd
CRS-272: This command remains for backward compatibility only
Event Manager is online
查看OCR位置
检查并显示OCR(Oracle Cluster Registry)的位置。
sql
ocrcheck
[grid@hferp71:/home/grid]$ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 3
Total space (kbytes) : 262120
Used space (kbytes) : 2996
Available space (kbytes) : 259124
ID : 216145073
Device/File Name : +dggrid1
Device/File integrity check succeeded
Device/File Name : +dggrid2
Device/File integrity check succeeded
Device/File not configured
Device/File not configured
Device/File not configured
Cluster registry integrity check succeeded
Logical corruption check bypassed due to non-privileged user
[grid@hfcwdb66:/home/grid]$ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 4
Total space (kbytes) : 491684
Used space (kbytes) : 84268
Available space (kbytes) : 407416
ID : 215749915
Device/File Name : +DGGRID01
Device/File integrity check succeeded
Device/File Name : +DGGRID02
Device/File integrity check succeeded
Device/File not configured
Device/File not configured
Device/File not configured
Cluster registry integrity check succeeded
Logical corruption check bypassed due to non-privileged user
查看集群私网信息
显示集群私网的信息,包括名称和IP地址。
sql
oifcfg getif
[grid@hfcwdb66:/home/grid]$oifcfg getif
enp0s3 172.30.21.0 global public
enp0s8 10.10.1.0 global cluster_interconnect,asm
查看所有crs资源状态
crsctl stat res -t
显示所有CRS资源的状态,并包括初始化状态
sql
crsctl stat res -t -init
[grid@hfcwdb66:/home/grid]$crsctl stat res -t -init
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.asm
1 ONLINE ONLINE hfcwdb66 STABLE
ora.cluster_interconnect.haip
1 ONLINE ONLINE hfcwdb66 STABLE
ora.crf
1 ONLINE ONLINE hfcwdb66 STABLE
ora.crsd
1 ONLINE ONLINE hfcwdb66 STABLE
ora.cssd
1 ONLINE ONLINE hfcwdb66 STABLE
ora.cssdmonitor
1 ONLINE ONLINE hfcwdb66 STABLE
ora.ctssd
1 ONLINE ONLINE hfcwdb66 ACTIVE:0,STABLE
ora.diskmon
1 OFFLINE OFFLINE STABLE
ora.evmd
1 ONLINE ONLINE hfcwdb66 STABLE
ora.gipcd
1 ONLINE ONLINE hfcwdb66 STABLE
ora.gpnpd
1 ONLINE ONLINE hfcwdb66 STABLE
ora.mdnsd
1 ONLINE ONLINE hfcwdb66 STABLE
ora.storage
1 ONLINE ONLINE hfcwdb66 STABLE
--------------------------------------------------------------------------------
查看集群active version
查询集群的活动版本。
sql
crsctl query crs activeversion
[grid@hfcwdb66:/home/grid]$crsctl query crs activeversion
Oracle Clusterware active version on the cluster is [19.0.0.0.0]
启停HAS
sql
crsctl stop has
crsctl start has
[grid@hferp71:/home/grid]$crsctl check has
CRS-4638: Oracle High Availability Services is online
[grid@hferp71:/home/grid]$crsctl check cluster
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
[grid@hferp71:/home/grid]$crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
查看远程节点CRS状态
sql
crsctl check cluster
[grid@hferp71:/home/grid]$crsctl check cluster
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
查看voting disk超时(disktimeout)
sql
crsctl get css disktimeout
[grid@hfcwdb66:/home/grid]$crsctl get css disktimeout
CRS-4678: Successful get disktimeout 200 for Cluster Synchronization Services.
查看私网延迟(Misscount)
sql
crsctl get css misscount
[grid@hferp71:/home/grid]$crsctl get css misscount
CRS-4678: Successful get misscount 30 for Cluster Synchronization Services.
移动voting disk到别的磁盘组
sql
crsctl replace votedisk +OCRVD
新增votedisk
sql
crsctl add css votedisk
删除votedisk
sql
crsctl delete css votedisk
查看ocr备份信息
sql
ocrconfig -showbackup
[grid@hferp71:/home/grid]$ocrconfig -showbackup
hferp71 2024/11/26 15:02:35 /oracle/app/11.2.0/grid/cdata/hferpcluster/backup00.ocr
hferp72 2024/08/30 08:41:10 /oracle/app/11.2.0/grid/cdata/hferpcluster/backup01.ocr
hferp72 2024/08/30 04:41:08 /oracle/app/11.2.0/grid/cdata/hferpcluster/backup02.ocr
hferp71 2024/11/26 15:02:35 /oracle/app/11.2.0/grid/cdata/hferpcluster/day.ocr
hferp71 2024/11/26 15:02:35 /oracle/app/11.2.0/grid/cdata/hferpcluster/week.ocr
PROT-25: Manual backups for the Oracle Cluster Registry are not available
[grid@hfcwdb66:/home/grid]$ocrconfig -showbackup
hfcwdb66 2024/11/26 17:31:29 +dggrid01:/hfcwdbcluster/OCRBACKUP/backup00.ocr.264.1186075881 1476904475
hfcwdb66 2024/08/02 14:28:43 +dggrid01:/hfcwdbcluster/OCRBACKUP/backup01.ocr.263.1175956113 1476904475
hfcwdb66 2024/08/02 10:28:31 +dggrid01:/hfcwdbcluster/OCRBACKUP/backup02.ocr.262.1175941701 1476904475
hfcwdb66 2024/11/26 17:31:29 +dggrid01:/hfcwdbcluster/OCRBACKUP/day.ocr.259.1186075891 1476904475
hfcwdb66 2024/11/26 17:31:29 +dggrid01:/hfcwdbcluster/OCRBACKUP/week.ocr.260.1186075893 1476904475
PROT-25: Manual backups for the Oracle Cluster Registry are not available
查看集群是否为standard或者flex ASM
sql
crsctl get cluster mode status
[grid@hfcwdb66:/home/grid]$crsctl get cluster mode status
Cluster is running in "flex" mode
查看crs配置
sql
crsctl config crs
单节点集群has命令
sql
crsctl check has
crsctl config has
crsctl disable has
crsctl enable has
crsctl query has releaseversion
crsctl query has softwareversion
crsctl start has
crsctl stop has
两者的区别
-
srvctl:
- srvctl命令用于管理和配置数据库实例、服务(Service)、监听器(Listener)等数据库相关组件。它提供了一系列用于启动、停止、迁移、重启等操作的命令。
-
crsctl:
- crsctl命令用于管理和配置Oracle Clusterware,它是Oracle RAC环境中的基础软件组件。crsctl可以用于管理集群节点、资源(Resource)、服务、OCR(Oracle Cluster Registry)等集群组件。
使用权限:
-
srvctl:
- srvctl命令需要在数据库管理员(DBA)用户下执行,通常是在数据库服务器上执行。
-
crsctl:
- crsctl命令需要在root用户下执行,因为它需要对操作系统层面的资源进行管理和配置。
使用场景:
-
srvctl:
- srvctl主要用于管理和配置数据库实例、服务和监听器等数据库相关组件。它可以用于启动、停止、迁移数据库实例,管理服务的路由和负载均衡,以及管理监听器的配置和状态等。
-
crsctl:
- crsctl主要用于管理和配置Oracle Clusterware,它可以用于管理集群节点、资源和服务等。它可以用于启动、停止、重启集群节点,管理资源的状态和配置,以及管理集群服务的状态和配置等。
failover和Load Balance
Failover(故障切换):
Failover是指在Oracle RAC中,当一个节点(服务器)发生故障或不可用时,自动将该节点上的资源切换到其他可用节点上。这样可以保证系统的高可用性和连续性。Failover是通过Oracle Clusterware来实现的,它会监测节点的状态,并在发现节点故障时自动触发故障切换操作。在Failover过程中,客户端的连接会自动重新定向到新的可用节点,以确保应用程序的持续运行。
FAILOVER的两种方式:
一种称做连接时的FAILOVER,它是指当用户按照tnsnames.ora文件中的配置信息,尝试去连接一个指定的监听器失败时,将自动连接另外一个地址。(需要设定:FAILOVER=on)
另一种FAILOVER方式发生在会话连接已经建立之后,此时发生的FAILOVER被称作TAF,当用户在一个实例上操作失败时,允许重新连接到另一个实例上继续进行操作。
-
TAF有两种工作模式:SESSION模式和SELECT模式
-
SESSION模式 : 当会话在某个实例上操作失败时,TAF可以重新创建会话并连接到新的实例上。
sqlhefeidb = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hfeduscan)(PORT = 1521)) (LOAD_BALANCE = yes) (FAILOVER = ON) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = hefeidb) (FAILOVER_MODE = (TYPE = SESSION) #session (METHOD = BASIC) ) ) )
-
SELECT模式 : 如果一个正在执行的查询在某个实例上发生故障,TAF将会在另一个实例上重新执行这个查询。
sqlhefeidb = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hfeduscan)(PORT = 1521)) (LOAD_BALANCE = yes) (FAILOVER = ON) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = hefeidb) (FAILOVER_MODE = (TYPE = SELECT) #select (METHOD = BASIC) ) ) )
-
Load Balancing(负载均衡):
Load Balancing是指在Oracle RAC中,将客户端的请求均匀地分配到不同的节点上,以实现负载的均衡。这样可以提高系统的性能和可扩展性。Load Balancing是通过Oracle Net Services来实现的,它会根据不同的负载均衡策略(如轮询、连接数、响应时间等)将客户端的请求分发到不同的节点上。通过负载均衡,可以有效地利用集群中的资源,避免某个节点过载而导致性能下降。