Oracle RAC 相關概念(Final)

tolywang發表於2009-03-18


1, RAC 提供的好處:
a. 多節點負載均衡
b. 提供高可用性,故障容錯及無縫切換功能,將硬體和軟體的異常造成的影響最小化。
c. 透過並行執行技術提供事務響應的時間 - 通常用於資料分析系統。
d. 透過橫向擴充套件提高每秒交易數和連線數 - 通常用於OLTP。
e. 節約硬體成本,可以使用多個廉價的PC伺服器代替小型機或大型機,節約相應的維護成本。
f. 可擴充套件性好,可以方便新增刪除節點,擴充套件硬體資源。


2. RAC 缺點:
a. 管理更復雜,要求更高
b. 系統規劃設計較差時效能可能會不如單節點
c. 可能會增加軟體成本(按照CPU收費)


3. Oracle9i之前RAC被稱為OPS,之後被稱為RAC. OPS和RAC區別在於前者沒有Cache Fusion, 後
者有, OPS需要將資料寫入disk後其他節點發出請求再次從disk讀取, cache fusion可以在記憶體之間進行
資料塊的傳輸, 各個節點更新後,將最後的版本寫入磁碟。

 

4. Clusterware 的主要程式

a. crsd : 負責叢集的高可用操作,管理crs資源: db,instance,listener,vip, ons, gsd等,
操作包括啟動,關閉,監控及故障切換。 該程式由root使用者管理和啟動。 crsd如果有故障會導致系統重新啟動。

b. cssd : 管理各個節點間的關係, 用於節點通訊,節點在在加入或離開叢集的時候通知cluster,這個程式
由oracle使用者執行管理,發生故障的時候cssd也會自動重新啟動系統。 

c. oprocd: 叢集程式管理, process monitor for the cluster , 用於保護共享資料IO fencing
僅在沒有使用vendor 的叢集軟體狀態下執行 。

d. evmd : 事件監測程式, 由oracle使用者執行管理

 


Cluster Ready Services(CRS):管理叢集內高可用操作的基本程式。Crs管理的任何事物被稱之為資源,它們可以是
一個資料庫、一個例項、一個監聽、一個虛擬IP(VIP)地址、一個應用程式等等。CRS是根據儲存於OCR中的資源配置資訊來管
理這些資源的。這包括啟動、關閉、監控及故障切換(start、stop、monitor及failover)操作。當一資源的狀態改變時,
CRS程式生成一個事件。當你安裝RAC時,CRS程式監控Oracle的例項、監聽等等,並在故障發生時自動啟動這些元件。預設
情況下,CRS程式會進行5次重啟操作,如果資源仍然無法啟動則不再嘗試。

 

5. 共享檔案 OCR 及 votingdisk

a. Oracle Cluster Registry(OCR): 記錄OCR記錄節點成員的配置資訊,如database、ASM、instance、
   listener、VIP等CRS資源的配置資訊,可儲存於裸裝置或者群集檔案系統上

b. Voting Disk : 仲裁盤,儲存節點的成員資訊, 如包含哪些節點成員、節點的新增刪除資訊 等 。

 


6. 安裝 

在Oracle RAC中,軟體不建議安裝在共享檔案系統上;包括CRS_HOME和ORACLE_HOME,尤其是CRS軟體,推薦安裝
在本地檔案系統中,這樣在進行軟體升級,以及安裝patch和patchset的時候可以使用滾動升級(rolling upgrade)的方式,
減少計劃當機時間。另外如果軟體安裝在共享檔案系統也會增加單一故障點。


如果使用ASM儲存,需要為asm單獨安裝ORACLE軟體,獨立的ORACLE_HOME,易於管理和維護,比如當遇到asm 的bug需要
安裝補丁時,就不會影響RDBMS檔案和軟體。

 


7. 腦裂症(split brain)
  
在一個共享儲存的叢集中,當叢集中hearbeat丟失時,如果各節點還是同時對共享儲存去進行操作,那麼在這種情況
下所引發的情況是災難的。ORACLE RAC採用投票演算法來解決這個問題,思想是這樣的:每個節點都有一票,考慮有A,B,C三個節點的
叢集情形,當A節點由於各種原因不能與B,C節點通訊時,那麼這叢集分成了兩個DOMAIN,A節點成為一個DOMAIN,擁有一票;B,C節
點成為一個DOMAIN擁有兩票,那麼這種情況B,C節點擁有對叢集的控制權,從而把A節點踢出叢集,對要是通IO FENCING來實現。如
果是兩節點叢集,則引入了仲裁磁碟,當兩個節點不能通訊時,請求最先到達仲裁磁碟的節點擁用對叢集的控制權。


網路問題(interconnect斷了);時間不一致;misscount超時 等等 才發生brain split。
而此時為保護整個叢集不受有問題的節點影響,而發生brain split(或叫fencing?)
oracle採用的是server fencing,就是重啟有問題的節點,試圖修復問題。當然有很多問題是不能自動修復的。比如時間不一致,
而又沒有ntp;網線壞了。。。這些都需要人工介入修復問題。而此時的表現就是有問題的節點反覆重啟。

 

8. 心跳傳輸協議預設是UDP .

 

9. 從Oracle10g起,Oracle提供了自己的叢集軟體,叫Oracle clusterware簡稱CRS,這個軟體是安裝oracle rac的前提,而
第三方叢集則成了安裝的可選項。同時提供了另外一個新特性叫做ASM,可以用於RAC下的共享磁碟裝置的管理,還實現了資料檔案的條帶化和映象,
以提高效能和安全性 (S.A.M.E: stripe and mirror everything ) ,不再依賴第三方儲存軟體來搭建RAC系統。

 


10. Oracle Clusterware 的心跳

Oracle clusterware 使用兩種心跳裝置來驗證成員的狀態,保證叢集的完整性;一是對voting disk 的心跳,ocssd 程式每秒向
votedisk 寫入一條心跳資訊;  二是節點間的私有乙太網的心跳,兩種心跳機制都有一個對應的超時時間,分別叫做 misscount 和disktimeout:

misscount 用於定義節點間心跳通訊的超時,單位為秒;
disktimeout ,預設200 秒,定義css 程式與vote disk 連線的超時時間;
reboottime ,發生裂腦並且一個節點被踢出後,這個節點將在reboottime 的時間內重啟;預設是3 秒;


使用下面的命令檢視misscount 的值。

# crsctl get css misscount 

 


11. 在下面兩種情況發生時,css 會踢出節點來保證資料的完整,:

(1) Private Network IO time > misscount,會發生split brain 即裂腦現象,產生多個“子叢集”(subcluster) ,‘
這些子叢集進行投票來選擇哪個存活,踢出節點的原則按照下面的原則:

節點數目不一致的,節點數多的subcluster 存活;節點數相同的,node ID 小的節點存活。

(2) Vote Disk IO Time > disktimeout ,踢出節點原則如下:失去半數以上vote disk 連線的節點將在reboottime
的時間內重啟;
例如有5 個vote disk,當由於網路或者儲存原因某個節點與其中>=3 個vote disk 連線超時時,該節點就會重啟。當一個或者兩個vote d
isk 損壞時則不會影響叢集的執行。

 


12. 如何檢視現有系統的配置 。


對於一個已經有的系統,可以用下面幾種方法確認資料庫例項的心跳配置,包括網路卡名稱,IP 地址,使用的網路協議:
(1) 最簡單的方法:可以在資料庫的後臺報警日誌中得到。具體參見上面列出的告警日誌;
(2) 使用oradebug ;
SQL> oradebug setmypid
SQL> oradebug ipc
SQL> oradebug tracefile_name
找到對應trace 檔案的這一行:socket no 10 IP 10.0.0.1 UDP 49197
(3) 從資料字典中得到(V$CLUSTER_INTERCONNECTS 和 V$CONFIGURED_INTERCONNECTS),或查詢x$ksxpia 

 

13. 為了避免心跳網路成為系統的單一故障點,簡單地我們可以使用作業系統繫結的網路卡來作為Oracle 的心跳網路,以AIX 為
例,我們可以使用etherchannel 技術,假設系統中有ent0/1/2/3 四塊網路卡,我們繫結2 和3 作為心跳:

在HPUX 和Linux 對應的技術分別叫APA 和bonding

 


14. UDP 私有網路的調優

當使用UDP 作為資料庫例項間cache fusion 的通訊協議時,在作業系統上需要調整相關引數,以提高UDP 傳輸效率,並在
較大資料時避免出現超出OS 限制的錯誤:
(1) UDP 資料包傳送緩衝區:大小通常設定要大於(db_block_size * db_multiblock_read_count )+4k,
(2) UDP 資料包接收緩衝區:大小通常設定10 倍傳送緩衝區;
(3) UDP 緩衝區最大值:設定儘量大(通常大於2M)並一定要大於前兩個值;
各個平臺對應檢視和修改命令如下:
Solaris 檢視 ndd /dev/udp udp_xmit_hiwat udp_recv_hiwat udp_max_buf ;
修改 ndd -set /dev/udp udp_xmit_hiwat 262144
ndd -set /dev/udp udp_recv_hiwat 262144
ndd -set /dev/udp udp_max_buf 2621440
AIX 檢視 no -a |egrep “udp_|tcp_|sb_max”
修改 no -p -o udp_sendspace=262144
no -p -o udp_recvspace=1310720
no -p -o tcp_sendspace=262144
no -p -o tcp_recvspace=262144
no -p -o sb_max=2621440
Linux 檢視 檔案/etc/sysctl.conf
修改 sysctl -w net.core.rmem_max=2621440
sysctl -w net.core.wmem_max=2621440
sysctl -w net.core.rmem_default=262144
sysctl -w net.core.wmem_default=262144
HP-UX 不需要
HP TRU64 檢視 /sbin/sysconfig -q udp
修改: 編輯檔案/etc/sysconfigtab
inet: udp_recvspace = 65536
udp_sendspace = 65536
Windows 不需要

 

15. 相關log路徑 

$ORA_CRS_HOME/crs/log
$ORA_CRS_HOME/crs/init
$ORA_CRS_HOME/css/log
$ORA_CRS_HOME/css/init
$ORA_CRS_HOME/evm/log
$ORA_CRS_HOME/evm/init
$ORA_CRS_HOME/srvm/log

 

16. VIP, GSD, ONS

VIP 服務,供透明切換(TAF)使用 . VIP是一個使用者用來連線資料庫的替代公網地址(alternate public address),而不
是標準的公網IP地址(standard public IP address)。在配置VIP時,你必須為每個節點保留一個IP地址,此地址與公網屬
於同一子網。

GSD 服務: A component that receives requests from SRVCTL to execute administrative job
tasks, such as startup or shutdown. The command is executed locally on each node, and
the results are returned to SRVCTL. by default.


ONS 服務, Oracle Notification Service(ONS):通訊的快速應用通知(FAN:Fast Application Notification)
事件的釋出及訂閱服務。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-631561/,如需轉載,請註明出處,否則將追究法律責任。

相關文章