Oracle rac叢集環境中的特殊問題

來源:互聯網
上載者:User

標籤:style   color   io   使用   ar   檔案   資料   sp   art   

    備忘:本文摘抄於張曉明《大話Oracle RAC:叢集 高可用性 備份與恢複》

 

因為叢集環境需要多個電腦協同工作,要達到理想狀態,必須要考慮在叢集環境下面臨的新挑戰。

1.並發控制

    在叢集環境中,關鍵資料通常是並發存放的,比如放在共用磁碟上。而叢集內各個成員的生身份是對等的,所有節點對資料有相同的訪問權利。這時就必須有某種機制能夠控制節點對資料的訪問。

   在Oracle rac中,是利用DLM (Distribute Look Management)機制來進行多個執行個體間的並發控制。

 

2.健忘症 (Amnesia)

    這個問題發生在叢集設定檔不是集中存放,而是每個節點都有一個本機複本。在叢集正常運行時,使用者可以在任何節點更改叢集的配置,並且這種更改會自動同步到其他節點。

    但考慮這樣一種情境:兩個節點的叢集,節點1因為正常的維護需要被關閉,然後在節點2修改了某些配置,然後關閉節點2,啟動節點1。因為之前在節點2做的配置修改沒有同步到節點1,所以節點1啟動後,它仍然是用舊的設定檔工作,這時就會造成配置丟失,也基於是所謂的"健忘症"。

   解決"健忘症"最簡單的辦法是,整個叢集使用一個叢集設定檔,無論哪個節點修改了配置資訊都是同一分,配置資訊對每個節點都是一樣的。

   Oracle RAC使用OCR DISK 檔案來解決這個問題。

 

3.腦裂 (Split Brain)

     在叢集裡,節點間需要通過某種機制(心跳)瞭解彼此的健康情況,以確保各節點協調工作。假設只是"心跳"出現故障,但各個節點還在正常運行。這時,每個節點都認為其他節點宕機,自己是整個叢集環境中的"唯一健在者",自己應該獲得叢集的"控制權"。在叢集環境中,存放裝置都是共用的,(都來控制獨享,勢必會破壞資料的完整性和一致性)這就意味著資料災難,這樣一種狀況就是"腦裂"。

    解決這個問題的通常辦法是使用投票演算法(Quorum Algorithm),這個演算法的原理如下:

    叢集中各個節點需要心跳機制來通報彼此的"健康情況",假設每收到一個節點的"通報"代表一票。對於三個節點的叢集,正常運行時,每個節點都會有3票(自己和另外兩個節點的通報)。假設節點1的心跳出現故障,但是節點1還在運行:這時整個叢集就會分裂為兩個小的Partition。節點1自己是一個Partition,節點2和節點3是一個Partition。這時就必須剔出一個Partition,應該剔出哪個Partition呢?

   這時節點2和節點3組成的Partition,每個節點有兩票;節點1自己是一個partition,節點1隻有一票。安裝投票演算法節點2和節點3組成的小叢集獲得了控制權,而節點1被踢出,由節點2和節點3組成的新的叢集繼續對外提供服務。

   如果叢集只有兩個節點,則上面的演算法就沒有用了,因為每個節點只有一票,沒有辦法比較。這必須要引入第3個裝置Quorum Device。

    Quorum Device通常採用的是共用磁碟,這個磁碟也叫Quorum Disk,這個Quorum Disk也代表一票。當新跳出現故障時,兩個節點同時去爭取Quorum Disk這一票,最早到達的請求被最先滿足,後到達的這個節點就無法獲得這一票。這時,最先獲得Quorum Disk的節點就獲得兩票,而另一個節點只有一票,就會被踢出叢集。

   在ORACLE RAC中Voting Disk用來記錄節點間成員的狀態,當出現腦裂時,仲裁哪個partition獲得控制權,其他的partition被踢出。

 

4.IO隔離 (IO Fencing)

      這個問題是腦裂問題的延伸,當叢集出現"腦裂"時,必須要能夠判斷出哪個節點應該獲得叢集的控制權,哪些節點要被趕出叢集,這就是"投票演算法"要解決的問題,前一部分已經做瞭解釋。

     但僅僅這樣做是不夠的,還必須保證被趕出來的節點不能操作共用資料。因為這時該節點可能還在運行中,如果不加限制很有可能會修改共用資料。這是IO隔離(IO Fencing)要解決的問題。

    IO Fencing實現有硬體和軟體兩種方式。對於支援SCSI Reserve/Release命令的存放裝置,可以使用SG命令實現。正常節點使用SCSI Reserve命令"鎖住"存放裝置,故障節點發現存放裝置被鎖後,就知道自己被趕出叢集了,也就是說知道自己出現了異常狀況,就要自行重啟,以恢複到正常工作狀態,這個機制也叫做suicide (自殺),Sun和Veritas使用的是這種機制。

    STONITH (Shoot The Other Node In The Head)是另一種實現方式,這種方式直接操作電源開關。當一個節點發生故障時,另一個節點如果能夠偵測到,就會通過串列口發出命令,控制故障節點的電源開關,通過暫時斷電,而後又上當的方式使得故障節點被重啟動。這種方式需要硬體支援。

    Oracle Rac採用的是軟體方式,直接重啟故障節點。無論採用哪種方式,IO Fencing目的都是相同的,為了保障故障節點不能再繼續訪問共用資料。

 

                                ------摘抄於張曉明《大話Oracle RAC:叢集 高可用性 備份與恢複》

Oracle rac叢集環境中的特殊問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.