1. 程式人生 > >RAC啟動流程,啟動程序,隔離機制相關資訊

RAC啟動流程,啟動程序,隔離機制相關資訊

RAC的啟動流程
第一步:高可用性服務層 (HAS)
第二步:叢集就緒服務層 (CRS)
./crsctl start has
./crsctl start crs

ohasd程序是系統INIT生成,ohasd程序是啟動Clusterware的起點,高可用性服務層由GPNPD,GIPC,mDNS和GNS等服務組成,伺服器的重啟將使obasd程序自動重啟.
ohasd是執行在respawn(重生)模式下面的,linux系統的/etc/inittab檔案中只包含了ohasd的自動啟動項。

CRS守護程序,crs管理儲存在OCR中的每個叢集資源,包括啟動,停止,監控和失敗切換操作。
CSS控制叢集包含的節點成員,並以發出通知的方式管理叢集配置。  Cssdagent程序監控叢集並提供I/O防護,這個服務以前是由oprocd提供,在Windows就是OraFenceService服務,cssdagent執行失敗,Clusterware將重啟該節點。
ASM 提供Clusterware磁碟檔案的儲存,ASM例項需要在cssd程序啟動之前先啟動,且MOUNT相應磁碟組成功
Event Management(EVM)  一個後臺程序,釋出由Clusterware建立的事件,是CRS和CSS通訊的橋樑。

CRS - EVENT MANAGEMENT - CSS

CRS擁有專門管理root使用者所擁有資源的程序,orarootagent程序,如網路,網格虛擬IP地址資源。

 RAC中在ROOT使用者下執行的程序:CRSd.bin ,oCTSSd.bin ,GNSd ,OHASD.bin ,orarootagent.

網路心跳
所謂的網路心跳是通過是有網路來檢測節點的狀態,由於私有網路硬體或軟體的故障導致叢集節點間的是有網路在一定時間內無法進行正常的通訊,這種現象就成為腦裂。

  檢查腦裂的超時時間(misscount)

#./crsctl get css misscount
資料庫系統預設的超時時間為30秒鐘,並在30秒後,在Clusterware的日誌中會有相應的心跳丟失的記錄。
注意:在RAC中一定不能採用節點間直連的方式來組建心跳網路,這樣會導致心跳大量丟失,不利於Clusterware的穩定執行。
IPMI :智慧平臺的管理介面,相當於智腦來管理叢集中的心跳及服務的重啟。

磁碟心跳
所謂的磁碟心跳就是共享磁碟來檢測節點的狀態。在Clusterware磁碟檔案中,表決磁碟就是用於檢測Clusterware磁碟心跳的共享磁碟檔案。
每個節點每一秒寫一次記錄到每個表決磁碟,以此來確認各節點的正常狀態。如果發現某一秒中,在某一節點並未檢測到表決磁碟的記錄,則會引起腦裂。

網路心跳和磁碟心跳都是由OCSSD程序來檢測的。
  關於磁碟心跳與網路心跳相關的兩個引數
    1、disktimeout(超時時間)
     #[[email protected]**]#./crsctl get css disktimeout
  disktimeout在Oracle資料庫系統中的超時時間是200秒
     此引數會檢測表決磁碟是否離線,並在Clusterware的告警日誌中生產表決磁碟離線記錄。
    2、reboottime引數
     除了misscount和disktimeout引數之外,還需要提到reboottime引數,該引數表示的含義是節點被踢出之後,節點開始重啟允許的最大時間。
     [
[email protected]
**]#./crsctl get css reboottime reboottime在資料庫系統中預設的最大時間是3秒鐘。 調整心跳引數 [[email protected]**]#./crsctl set css -h -h(幫組) 調整網路超時時間 misscount [[email protected]**]#./crsctl set css misscount 10 調整表決磁碟的超時時間 disktimeout [[email protected]**]#./crsctl set css disktimeout 50 調整表決磁碟離線後最大的重啟時間 [[email protected]**]#./crsctl set css reboottime 1 IPMI(只能平臺管理介面)是標準的工業管理協議,它最重要的物理部件就是BMC(Basebord Management Controller).相當於平臺管理的“大腦”,IPMI可以通過BMC監控各個感測器的資料並記錄各種事件的日誌,因此IPMI也成為BMC。它的優勢在於獨立於CPU BIOS和OS,所以無論在開機還是關機的狀態下,只要接通電源使用者就可以實現對伺服器的監控。 IPMI的配置: 1、在安裝期間可以配置IPMI 2、可以使用CRSCTL工具進行配置 Oracle資料庫隔離的三個引數

Hangcheck-timer 的三個引數
1、hangcheck_tick:定義了hangcheck-timer檢查節點是否hang的頻率,單位是秒,預設是60秒。
2、hangcheck_margin:定義了期望和真正的scheduling之間允許的誤差,單位是秒,預設值是180秒
3、hangcheck_reboot:定義瞭如果核心在hangcheck_tick和hangcheck-margin相加的時間內相應失敗的話,hangcheck-timer是否重啟節點。
如果hangcheck_reboot的值大於等於1,hangcheck-timer模組將會重啟系統;如果設定為0,則即使系統hang的時候hangcheck-timer也不會重啟系統。

其中misscount 網路超時時間 的值要設定大於hangcheck_tick+hangcheck_margin之和。

RAC的隔離機制
系統層隔離機制
關於hangcheck-timer.ko模組的安裝
#find /lib -name “hangcheck-timer.ko”
若有輸出則代表已經安轉過了,是預設被安裝在linux版本2.4.9-e.12中的。
Oracle 10g版本中.設定一下引數值比較合適。在11gRAC後便不用再進行設定,系統預設便好。
modprode hangcheck-timer hangcheck_tick=10 hangcheck_margin=40 hangcheck_reboot=1

叢集層隔離機制
 OPROCD程序
    oprocd程序和cssd程序一樣位於叢集層。
   10.2.0.4開始,在linux平臺加入了oprocd程序,10g和11gR1 oprocd監控叢集節點系統狀態,RAC使用oprocd和Hangcheck-timer提供叢集的I/O隔離。
    oprocd程序的功能是在系統上建立執行緒監控各種各樣的程序,檢查是否存在程序Hang住的情況,每隔1秒鐘oprocd執行緒被喚醒並檢查程序,檢查上次喚醒一來經歷的時間,如果這個時間超過了某個期待值(1.5秒),OPROCD程序就會重啟節點。如果檢測失敗會sleep 500毫秒之後再次嘗試。這個程序是用來檢測節點的processHang(CPU掛起)。  
    oprocd程序在11gR2版本開始,oprocd的功能被cssdagent所代替。

 資料庫層隔離機制
    LMON(Global Enqueue Service Monitor)全域性佇列服務監控
     資料庫層的LMON程序會定期檢查RAC database的健康狀況,如果發現節點的Database存在問題,同樣會採取相應的措施保證RAC的隔離性。

 RAC被踢出的原因
    Kernel Hang/伺服器負載嚴重(oprocd、Hangcheck-timer).
    內聯網路心跳丟失。
    VoteDisk心跳丟失。
    oclsmon掃描到cssd Hang.

GPnP (網格即插即用)(是從11gR2 RAC開始的新功能)
GPnP profile檔案

在Clusterware啟動期間,CSS守護程序使用GPnP profile發現表決檔案(引數 “DiscoveryString”).一個不正確的Discovery字串講阻止CSS守護程序啟動,導致整個CRS無法啟動。
Oracle不支援手動修改profile.xml檔案。
GPnP profile檔案儲存的是叢集的配置資訊,預設的儲存位置是:

G R I D H O M E / g p n p / GRID_HOME/gpnp/ HOSTNAME/profile/peer/profile.xml
$GRID_HOME/gpnp/profile/peer/profile.xml(全域性備份)

GPnP儲存的是RAC的配置資訊,包括叢集名稱,網路型別資訊(public/private),ASM和CSS的儲存資訊,安全的數字簽名,以及ASM例項的SPFILE檔案位置。

關於GPnP在叢集中所有節點網格即插即用的完整性的驗證。

cluvfy comp gpnp [-n  node_list] {-verbose}

SET TRANSACTION IOSLATION LEVEL {READ COMMITTED | READ UNCOMMITTED | REPEATABLE READ | SERIALIZABLE )

引數解釋:  read committed:可以保證一致性讀
            read uncommitted:可能讀有dirty read(髒讀)
            repeatable read:重複讀
            serializable:序列化

Examples :
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ GO BEGIN TRANSACTION
select * from table_name

LOCK TABLE語句
此語句用於防止其它併發事務訪問或修改表
語法
LOCK TABLE table_name
[WITH HOLD]
IN {share | exclusive} MODE
引數
table_name 表必須是基表,而不是檢視,因為臨時表資料時當前連線的本地資料,所有鎖定全域性臨時表或區域性臨時表都無效。
[WITH HOLD]子句 ,如果指定該子句,鎖一直保持到連線結束,如果沒有指定該子句,則提交或回退當前事務時將釋放鎖。
[SHARE]模式 禁止其他事務修改表,單允許他們讀取表,在改模式下,只要沒有其它的事務所修改的行,就可以間接地或顯式地使用LOCK TABLE更改表中的資料。
[EXCLUSIVE] 模式 禁止其它事務訪問表。
如果用LOCK TABLE table_name IN EXCLUSIVE MODE排他性地鎖表t,則伺服器的預設行為時不獲取t的行鎖定,將SUBSUME_ROW_LOCKS現象設定為OFF 可以禁用此行為。

                SQL>   LOCK  TABLE table_name  
                         IN   option   MODE

關於 select …… for update 語句的含義
對錶獨佔鎖
例如 select * from T for update 是對錶T加了會話級別獨佔鎖,只有當前會話斷開,獨佔鎖才會別去掉

對錶行加一個獨佔鎖 select …… for update of
例如 select * from T for update of T.column

對某資源進行請求時,發現該資源未被釋放,則不等待,直接報錯。select …… for update nowait
例如 select * from T for update nowait

對某資源進行請求時,發現該資源未被釋放,則等待。這是for update的預設值
select …… for update [wait]

對某資源進行請求時,發現該資源如未被釋放,有鎖存在,則跳過
select …… for update skip lock
解釋:在查詢時,只會顯示出沒有被鎖定的查詢結果,也只能對查詢出來的結果進行鎖定,執行DML語句。