《Oracle RAC 核心技術詳解》 Question and Answer

《Oracle RAC 核心技術詳解》 Question and Answer

第一部分 集羣管理軟件

集羣技術簡介

EVM, CRS, CSS

Oracle10g版本, Oracle推出了自己的集羣管理軟件產品----CRS (Cluster Ready
Service).

對於集羣管理軟件—CRS, 主要分爲3個組件: CSS (Cluster Synchronization Service),
CRS (Cluster Ready Service) 和 EVM (Event Manager).

CSS組件負責構建集羣, 並維護集羣的一致性.

CRS組件負責對集羣的所有應用程序資源進行管理, 並實現應用程序的高可用性.

EVM組件負責產生並記錄集羣事件, 並在節點間傳遞發生的事件.

在這裏插入圖片描述

ASM, OCR, VF

Oracle10g版本中, 爲了更加方便的管理集羣中的共享磁盤,
10g版本又推出了另一個重要的組件ASM(Automatics Storage
Management)來管理集羣中的共享磁盤.

而CRS, ASM 和 RAC數據庫之間的關係是: CRS作爲集羣層面的軟件,
在集羣的每個節點上運行,
負責完成構建集羣,維護集羣一致性,管理集羣應用程序資源(主要是數據庫)的任務.

ASM作爲存儲層面的軟件,
負責爲集羣和應用程序(主要是數據庫)提供共享磁盤,並對共享磁盤進行管理.
ASM管理磁盤是通過ASM實例來實現的, 而ASM組織磁盤是通過磁盤組來實現的. 不過,
比較遺憾的是CRS的重要共享文件OCR (Oracle Cluster Register)和VF (Voting
File)在10g還不能通過ASM進行管理.

在這裏插入圖片描述

DRM, SCN BOC

在這裏插入圖片描述

Oracle GI (Grid Infrastructure)

在這裏插入圖片描述

Read mostly, HM(Hang Manager)

對於數據庫層面, 11g版本也推出了一些優秀的新特性, 例如: Read mostly,
這個新特性的出現使內存融合技術在操作以讀爲主的數據庫對象時變得更加高效.

HM(Hang
Manager)這個特性的出現使得RAC數據庫能夠自動地發現數據庫中出現的等待鏈條,死鎖或夯住的進程,
並且能夠提前解決掉這些可能導致數據庫性能問題的隱患,
同時也爲診斷數據庫性能問題提供更多的參考信息.

LMHB進程

LMHB進程是11gR2版本中新出現的後臺進程, 用於監控和內存融合相關的所有後臺進程,
當這些進程當中的一個或多個出現性能問題時,
LMHB通過終止阻塞進程或者終止實例的方式來避免出現數據庫掛起的問題.

多租戶和in-memory選項

在這裏插入圖片描述

HA Cluster

HA Cluster就是高可用集羣(High Avilability Cluster).
高可用的含義就是最大限度的提供可用的服務.

SGA

SGA(System Global Area)系統全局區, 這是一個非常龐大的內存區間,
也是爲什麼開啓Oral側之後佔用了很大內存的原因.

SGA分爲不同的池,我們可以通過視圖v$sgastat查看,如下所示。

SQL\> select pool ,sum(bytes) bytes from v\$sgastat group by pool;

POOL              BYTES  
------------ ----------  
              956298240  
java pool      16777216  
streams pool   16777216  
shared pool   199783376  
large pool     16777216

在這裏插入圖片描述

DLM

DLM是Oracle分佈式鎖技術, 也叫內存融合技術.

DLM(pre 9i)/GRD可以看成是內存融合的基礎.

GCS, GES, GRD啥關係

先說定義,

GCS (Global Cache Service)

GES (Global Enqueue Service)

GRD (Global Resource Directory)

簡單來說,

gcs負責管理維護buffer的併發控制

ges負責管理維護除buffer之外的所有資源的併發控制

grd, shard_pool的一部分,記錄全局資源的使用情況

詳細來說,

gcs用於緩衝區緩存管理的鎖, 用來協調由多個實例訪問的共享數據,
這些鎖稱之爲”並行緩存管理(PCM)鎖”;

ges 協調所有的全局隊列(任何非緩衝區緩存資源)請求, 即非PCM鎖,
這是RAC中進行鎖管理的唯一聯絡點, 它還參與死鎖檢測和請求超時,
在正常操作期間,它管理緩存,而在集羣再配置期間執行清理操作;

GRD就像是鎖和資源的一箇中央倉庫, 它分散在所有節點中,
沒有一個節點擁有關於所有資源的信息,
只有一個節點維護着有關一個資源的完整信息,這個節點爲該資源的”主控節點”,
其他節點只需要維護該資源上保存在其本地的鎖信息.

GRD(Global Resource
Service)其實就是一張哈希表,也就是一個全局資源目錄。用來記錄各個RAC節點資源的使用情況。
GCS(Global Cache Service)對應的進程是LMSn ,負責數據塊在實例間的傳遞。
GES(Global Enqueue
Service)對應的進程是LMD和LMON,負責在多個實例之間協調對數據塊的訪問順序,也就是管理隊列資源,保證數據的一致性訪問。LMD是實現隊列資源的釋放和分配的,LMON主要監控節點的健康。

Oracle RAC後臺進程LMD0, LMON, LMSN

LMD0, MLON, LMSN是Oracle RAC啓動後的後臺進程.

LMD0 (Global Enqueue Service Daemon 0 Process)

LMD0 Global Enqueue Service Daemon 0 Process Manages incoming remote resource requests from other instances LMD0 processes enqueue resources managed under Global Enqueue Service. In particular, LMD0 processes incoming enqueue request messages and controls access to global enqueues. It also performs distributed deadlock detections. Database and ASM instances, Oracle RAC

LMON (Global Enqueue Service Monitor Process)

MON Global Enqueue Service Monitor Process Monitors an Oracle RAC cluster to manage global resources LMON maintains instance membership within Oracle RAC. The process detects instance transitions and performs reconfiguration of GES and GCS resources. See Also: Oracle Real Application Clusters Administration and Deployment Guide

LMSn (Global Cache Service Process)

LMSn Global Cache Service Process Manages resources and provides resource control among Oracle RAC instances LMS, where n is 0-9 or a-z, maintains a lock database for Global Cache Service (GCS) and buffer cache resources. This process receives, processes, and sends GCS requests, block transfers, and other GCS-related messages. See Also: Oracle Real Application Clusters Administration and Deployment Guide

所有後臺進程參考

Oracle 11g後臺進程一覽表

share-nothing和share-everything

在這裏插入圖片描述

share-nothing

在這裏插入圖片描述

share-everything

內存融合技術涉及的各個進程和模塊之間的關係

在這裏插入圖片描述

11gR2集羣管理軟件各個組件基本結構

在這裏插入圖片描述

Oracle RAC歷史版本核心技術突破

在這裏插入圖片描述

安裝Oracle集羣

安裝過程分爲哪幾部

對於11gR2版本的集羣管理軟件, 整個安裝過程大概分爲三部分.

  1. 安裝前準備

  2. 安裝軟件

  3. 配置集羣

中央目錄(Central Inventory)

在這裏插入圖片描述

root.sh 完成哪些階段的工作

在這裏插入圖片描述

第5章 CSS部分

CSS (Cluster Synchronization Service)

CSSs是Oracle集羣管理軟件的核心組件.

腦裂

在這裏插入圖片描述

在這裏插入圖片描述

集羣的心跳機制有哪些

網絡心跳

磁盤心跳

本地心跳

心跳機制的作用

維護集羣的一致性

在這裏插入圖片描述

每個心跳機制的作用

網絡心跳: 首先是通過網絡心跳來確定集羣節點之間的連通性,
以便節點之間能夠了解彼此的狀態.

磁盤心跳: 磁盤心跳的主要目的就是當集羣發生腦裂時幫助定製腦裂的解決方案.

在這裏插入圖片描述

本地心跳: 這種心跳的作用是監控ocssd.bin進程以及本地節點的狀態.

表決盤/表決文件 VF(Voting File)

在這裏插入圖片描述

OCR (Oracle集羣註冊表 Oracle Cluster Register)

在這裏插入圖片描述

miscount

這個值用來定義集羣網絡心跳的超時時間,默認值是30s. 也就是說,
當集羣中的一個或多個節點連續丟失網絡心跳超過miscount時間後,
集羣需要進行重新配置,某一個或多個節點需要離開集羣. 當然, 對應11gR2版本的集羣,
這個值也是節點本地心跳的超時時間, 因爲本地心跳和網絡心跳是由相同的線程發送的.

LIOT (long I/O timeout)

這個參數定義了節點在進行磁盤心跳時對VF的I/O超時時間, 默認值爲200s, 也就是說,
如果cssd連續200s無法在一個VF上完成磁盤心跳的話, 這個VF會被離線掉.

SIOT (short I/O timeout)

這個參數定義了節點在進行重寫配置時對VF的I/O超時時間,默認值爲misscount(30)-reboottime(3)
= 27s

重新配置主節點 (Reconfiguration master)

當集羣中的節點數量(Node Membership)發送改變時,
會有一個節點被用於完成這次重新配置,該節點負責向集羣中的其他節點發送重新配置消息,
接收其他節點的反饋信息, 並對集羣的一些配置文件(如: OCR, VF)進行修改,
以反映集羣新的節點數量.

通常情況下, 集羣中編號最小的節點會被選擇作爲重新配置的主節點.

Reboot time

這個集羣參數用於指定Oracle集羣要求OS完成重啓的時間, 默認值爲3s.

diagwait

這個參數用於指定oprocd進程的margin時間.這個參數只適用於10gR2和11gR1版本的集羣,
而且只能夠被設置爲13.

Incarnation

這是一個單向增長的整數,集羣每經歷一次重新配置,這個數值就增加1.
Oracle通過這個數值來標誌集羣的最新狀態.

什麼是CSS組管理

在這裏插入圖片描述

第6章 CRS部分

CRS (Cluster Ready Service)

這裏將CRS稱之爲CRSD, 原因:
爲了將10gR2版本的集羣管理軟件名稱CRS和本章的集羣就緒服務部分加以區分, 避免混淆.

CRSD的主要功能是管理集羣中的應用程序(或者說是應用程序對應的資源),
以便實現集羣資源的高可用性. CRSD的另一部分功能就是管理OCR, 包括OCR的更新和備份.

CRS中的基本概念

資源

集羣所管理的應用程序實體或守護進程.

資源分爲本地資源和集羣資源兩種.

本地資源只能在集羣的某一個節點上運行, 不能被切換到其他節點上運行.

集羣資源正常情況下會在默認的節點上運行,但是可以根據不同的情況切換到其他節點上.

資源概要文件

概要文件定義了資源的很多屬性, 以便CRSD能夠根據概要文件定義的屬性來管理該資源,
例如: 檢查間隔, 動作腳本等.

動作

動作定義了CRSD對資源進行啓動, 停止和檢查操作時所需要運行的步驟,
他可以是一段shell腳本, 一段應用程序, 數據庫命令等.

狀態

當某一個動作發生在一個資源上之後, 一定會返回一個狀態作爲動作的輸出.

資源的狀態可以是以下幾種之一.

  1. ONLINE: 在線, 對應資源的online狀態

  2. OFFLINE: 離線, 對應資源的offline狀態, 當然, 即使資源被離線,
    GI仍然會探測這個資源的狀態, 以便在資源恢復正常時能夠自動將資源重新上線.

  3. UNKNOWN: 未知, 對應資源的unknown狀態. 在這種狀態下,
    CRSD會持續對該資源進行檢查, 以便在資源恢復正常後能夠發現它的新狀態.

依賴關係

TODO

資源之間並不是獨立的, 有些資源之間是存在相互依賴關係的.

權限

TODO

由於不同的資源需要執行的操作也是不同的,
這意味着執行操作的用戶也會不同(主要是root和Oracle用戶),
所以每個資源都會針對不同的用戶指定不同的權限.

這也是爲什麼crsd.bin守護進程需要以root用戶運行的原因之一.

RACG模塊

TODO

OCR (Oracle Cluster Register)

OCR實際上是一個包含了以上所有信息的註冊表,
CRSD通過訪問OCR來獲得集羣資源的列表(當然, 還包括其他很重要的信息),
以及每個資源的各個屬性.

可以說, OCR就相當於CRSD或者集羣的數據字典,
集羣中所有的屬性和資源的屬性都能在OCR中找到.

OCR主節點 (OCR Master Node)

TODO

OCR的詳細介紹

TODO

第7章 Oracle集羣管理軟件的啓動順序

第9章

ASM

Oracle ASM (Automatic Storage
Management)是Oracle提供的統一的存儲服務,屬於數據庫的一個組件.

在這裏插入圖片描述
ASM的基本架構

ASM實例

ASM實例是Oracle實現對ASM磁盤組和磁盤管理的方式.

它的結構和普通的數據庫實例是一致的, 有內存結構和後臺進程構成.

其中內存結構由SGA和PGA構成, 主要負責保存ASM磁盤相關的定義信息以及磁盤組的元數據,
而後臺進程負責管理這些ASM的源數據, 並與數據庫實例的進程進行通信,
爲數據庫提供存儲服務.

Quorum disk

在這裏插入圖片描述

OCR/VF和ASM磁盤組

從版本11.2開始, Oracle推薦把集羣的重要組件OCR和VF保存到ASM磁盤組當中,
以便使OCR和VF能夠使用ASM的特性(冗餘和條帶化).

對於OCR和VF, 它們會被保存到相同的磁盤組, 根據磁盤組的冗餘程度,
OCR和VF會保存多個副本.

第二部分 RAC數據庫軟件

第10章 解析內存融合技術

內存融合技術(Cache Fusion)

內存融合技術是RAC的核心技術.

在這裏插入圖片描述

RAC和單實例數據庫的區別

在這裏插入圖片描述

RAC內存結構 *

在這裏插入圖片描述

RAC特有的後臺進程

在這裏插入圖片描述

在這裏插入圖片描述

內存融合概念 **

內存融合的過程 **

SCN(System Change Number)的傳播和log file sync

DRM (Dynamic Remastering)和READ mostly

第11章 RAC數據庫的實例管理

RAC數據庫實例管理

由於RAC數據庫的一個重要節點就是多個數據庫實例同時訪問相同的物理數據庫, 所以,
就需要一套辦法來實現實例之間的通信, 並維持數據庫實例之間的一致性,
也就是RAC數據庫當中的實例管理.

在RAC數據庫當中, 這部分功能稱爲節點管理(Node Management, NM)或者CGS(Cluster
Group Service).

爲什麼要有實例管理

由於RAC數據庫的一個重要特點就是多個數據庫實例同時訪問相同的物理數據庫.
所以就需要一套辦法來實現實例之間的通信,
並維持數據庫實例之間的一致性,也就是RAC數據庫當中的實例管理.

在RAC數據庫中,這部分功能稱之爲節點管理(Node Management, NM)或者CGS(Cluster Group
Service).

CGS **

CGS(Cluster Group Service)功能實際上是Oracle
Rac的實例管理的實現方法,它負責實現以下功能:

  1. 實例之間的心跳機制

  2. 當實例離開或者加入集羣時完成數據庫集羣的重新配置

  3. 解決數據庫層面出現的腦裂

所以, 它的功能很像之前集羣部分當中的CSS組件,而且,
CGS的很多做法實際上和集羣層面的CSS是很類似的.

腦裂

數據庫層面的腦裂和集羣層面的腦裂時比較類似的, 但是在處理方式上卻有所不同.

數據庫層面的腦裂:
是指當數據庫集羣節點之間由於網絡問題導致了不能訪問的情況.腦裂在絕大部分出現雙節點的數據庫集羣丟失網絡心跳的情況下,所以數據庫層面的腦裂和集羣層面的腦裂時比較類似的,
但是在處理方式上卻有所不同.

數據庫層面的腦裂

在這裏插入圖片描述

實例之間的心跳機制 **

和CSS部分類似, RAC數據庫中有3種心跳: 網絡心跳, 磁盤心跳, 本地心跳.

LMHB

LMHB進程是在11gR2版本纔開始出現的, 該進程被稱爲Global Cache/Enqueue Service
Heartbeat Monitor.

顧名思義, 它被用來監控GCS和GES相關的後臺進程的心跳信息.

該進程會定期檢查LMON, LMS, LMD和LCK0的狀態,
如果發現某一個進程在一段時間之內沒有響應LMHB的心跳消息(也就是hang住了),
那麼LMHB進程就會嘗試找到阻塞該進程的阻塞進程(blocker).

如果阻塞進程不是數據庫必需的後臺進程,LMHB進程會通過終止阻塞進程的方式來解決內存融合核心進程hang住的問題;
否則, 如果沒有找到阻塞進程, 或者阻塞進程也是重要的數據庫後臺進程的話,
那麼LMHB可能會採用終止實例的方式來解決問題(這樣做的目的是爲防止由於某一個內存融合核心進程hang住導致整個數據庫層面出現性能問題.

第12章 RAC性能調優

RAC相關的統計信息分爲哪幾類

分爲3類:

  1. 與PCM資源相關的統計信息, 即GCS相關的統計信息,
    也就是數據庫相關的計時器和計數器.

  2. 與non-PCM資源相關的統計信息, 即GES相關的統計信息,
    也就是Enqueue相關的計時器和計數器.

  3. 與消息相關的統計信息.

RAC相關的等待事件

由於RAC相關的資源分爲PCM資源和Enqueue(non-PCM)資源,所以與RAC相關的等待事件也可以分爲Enqueue和gc兩類.

RAC死鎖的發現方式

RAC數據庫中的死鎖是由LMD進程處理的。

基本步驟如下:

  1. 每個實例的LMD進程定期申請DI資源,
    獲得DI資源的LMD進程會搜索各個實例沒有被滿足的鎖請求, 並繪製鎖的等待鏈路.

  2. 如果LMD進程發現有閉合環路(也就是死鎖)的存在,那麼將會導致這個環路的進程的當前DML語句回滾掉,以解決死鎖,並釋放DI資源.如果沒有死鎖,也會釋放DI資源.

RAC數據庫的常見性能問題

  1. 序列導致的性能問題

  2. 索引塊導致的性能問題

  3. 過多物理讀導致的性能問題

  4. 緩存尺寸導致的性能問題

第13章 RAC中的連接管理和工作負載管理

RAC的負載均衡有幾種

2種:

  1. 客戶端負載均衡

  2. 服務器端負載均衡

和客戶端負載均衡相比, 服務器端負載均衡算真正基於工作負載的負載均衡功能.

連接的故障切換有幾種

2種:

  1. 連接時的故障切換

  2. 已存在連接的故障切換

附錄

UXDB RAC 之前需要了解幾個概念

GES (Global Enqueue Service)

GCS (Global Cache Service)

CM (Cluster Manager)

RAC的層次:

CM層: 即 Cluster Manager 包括:

  1. CSS (Cluster Synchronization Services) : 簇同步服務, 對應進程

  2. CRS (Cluster Ready Services) : 對應進程

  3. 其他服務: EVM, ONS, OPROCD: 對應進程

NM層: 即Node Manager, 實現緩存同步, 包括以下進程:

  1. LMD

  2. LMS

  3. LMON

  4. LCK

  5. DIAG

CM資源: 實例, ASM實例, VIP等等, 在CM層基礎上運行的所有程序, 都被稱爲CM資源.

參考文檔:

https://max.book118.com/html/2016/1124/65348594.shtm

GRD (Global Resource Directory)

在這裏插入圖片描述

PCM (Parallel Cache Management)

Oracle使用 PCM( Parallel Cache Management) 維護緩衝區的一致性,通過PCM
Oracle允許一個節點訪問位於另一個節點的緩衝區Cache中的數據;

non-PCM

在這裏插入圖片描述

參考文章

Oracle RAC Cache Fusion 系列十三:PCM資源訪問

http://blog.woqutech.com/2019/08/21/oracle-rac-cache-fusion-系列十三:pcm資源訪問/

ORACLE RAC工作原理

https://blog.csdn.net/beaning_zhang/article/details/47273197

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章