1. 程式人生 > >叢集環境下的一些特殊問題

叢集環境下的一些特殊問題

1、什麼是cluster

    一個cluster是由兩個或是多個獨立的、通過網路連線的servers組成的。幾個硬體供應商多年以來提供了Cluster效能的各種需求。一些Clusters僅僅為了提供高可用性的,在當前活動的node發生故障時轉移到次節點node。另一些是為了提供分散式的連線、工作的可擴充套件性。另一個Cluster的共同特點是,對於一個應用程式,它可以看做是一個單獨的server。同樣,管理幾個servers應該儘可能像管理一個server一樣簡單。Cluster管理器軟體提供了這種功能。

    如果是single server的nodes,檔案必須儲存在其各自node能訪問的位置。存在有幾個不同拓撲結構來解決資料訪問的問題,這主要依賴於Cluster設計的主要目標。

    相互連線時一個物理的網路連線,作為每個Cluster節點直接的互動通訊。

    簡而言之,一個Cluster就是一組獨立的servers,它們共同協作,組成一個single system。

    2、什麼是Oracle real Application Cluster(RAC)

    RAC是一個軟體可以使你通過執行多個依賴相同Database的Instance,使用Cluster硬體。資料庫files被存放在物理或是邏輯上連線每個節點的磁碟上。以便於每個活動的Instance都可以對files進行讀寫操作。

    RAC軟體管理著資料的訪問。所以更改操作在Instances之間是被相互協調的,並且每個Instance看到的資訊和資料映象都是一致的。

    通過RAC結構,可以獲得冗餘,從而使得即使在一個系統crash或是不可訪問時,應用程式也可通過其他Instance訪問Database。

    3、為啥使用RAC

    RAC可以高度利用標準的Cluster,降低模組servers成本。

    RAC自動的提供了服務的工作量管理。應用程式的服務可以被分組或分類,組成商業元件完成應用工作任務。RAC中的服務可以是持續的、不間斷的Database操作,併為多Instance上的多個服務提供支援。可以設計services到一個或多個Instance上執行,並且交替Instances可以用於備份Instances。如果主Instance失敗,Oracle會將services從失敗的Instance節點移動到活動的可替代的Instance上。Oracle也會自動的通過連線進行資料裝載的平衡。

    RAC利用多個廉價的computers共同提供Database的服務,就像一個大的computer一樣,服務於只有大規模SMP才能提供的各種應用。

    RAC是基於共享磁碟結構的,在需求上可以增加或縮減,而不需要人為的在Cluster中進行資料的分隔。並且RAC可以簡單的增加、移出Cluster中的servers。

    4、Clusters和可擴充套件性

    如果使用對稱多處理(symmetric multiprocessing SMP)機制能夠對應用程式提供透明的服務,則應該使用RAC也可以得到同樣的效果,而不需要進行應用程式程式碼的任何改動。

    當一個節點發生失敗,RAC可以排除該Database Instance和node本身,從而保證Database的完整。

    下面是一些可擴充套件性的例子:

    *  允許更多併發的批處理。

    *  允許更大程度的併發執行。

    *  在OLTP系統中可以是連線的使用者大增。

    1)可擴充套件性的層次:主要有四個層次

    *  hardware 的可擴充套件性:相互連線性是它的關鍵,這一般依賴於較高的頻寬和較低的延遲。

    *  OS的可擴充套件性:在OS中,同步方法可以決定系統的可擴充套件性。在一些情況下,硬體的潛在可擴充套件性會因為OS無力併發維持請求的多個資源而被丟失。

    *  Database管理系統的可擴充套件性:在併發結構中的一個關鍵因素是併發是由內部影響的還是外部程序影響的。此問題的答案影響了同步的機制。

    *  應用層次上的可擴充套件性:應用程式必須被明確的設計為可擴充套件的。當系統中如果多數情況下,每個session都在更新相同的data,則可能產生瓶頸。這不僅是指RAC,對於single-instance系統也是一樣。

    需要明確的是,如果任何一個層次沒有達到可擴充套件性,不管其他層次可擴充套件性多強,併發的Cluster程序都可能失敗。可擴充套件性不足的典型原因是共享資源的訪問。這使得併發的操作在此瓶頸上序列化執行。這不僅僅是RAC中的侷限,而是所有結構中的侷限性。

    2)scaleup和speedup

    *  scaleup是工作量和資源都成比例增加時能維持相同效能水平的能力(相應時間)

    Scaleup=(volume parallel)/(volume original)–time for ipc

    *  speedup是指通過增加資源的數量完成固定的工作量,獲得執行時間成比例的縮減的效果。

    Speedup=(time original)/(time parallel)–time for ipc 

    其中,ipc是程序間通訊的簡寫——interprocess communication
 

   RAC Architecture and Concepts

    1、RAC軟體原理

    在一個RAC Instance中,會見到一些普通Instance中不存在的後臺程序,它們主要是用於維持Database在每個Instance中的一致性。管理全域性資源,具體如下:

    *  LMON:全域性佇列服務監控程序——Global Enqueue Service Monitor
    *  LMD0:全域性佇列服務守護程序——Global Enqueue Service Daemon
    *  LMSx:全域性緩衝服務程序,x可以從0到j——Global Cache Service Processes
    *  LCK0:鎖程序——Lock process
    *  DIAG:診斷程序——Diagnosibility process

    在Cluster層,可以找到Cluster Ready Services軟體的主要程序,它們在所有平臺上提供標準的Cluster介面,並實現高可用性的操作。在每個Cluster node上都可以看到如下的程序:

    *  CRSD和RACGIMON:用於高可用性操作的引擎。
    *  OCSSD:提供成員節點和服務組的訪問
    *  EVMD:事件檢測程序,由oracle使用者執行管理
    *  OPROCD:Cluster的監控程序

    此外還存在幾個工具用於管理Cluster中全域性層次上的各種資源。這些資源是ASM Instance、RAC Database、Services和CRS應用節點。本書中涉及的工具主要有Server Control(SRVCTL)、DBCA和Enterprise Manager。

    2、RAC軟體儲存原理

    Oracle10g的RAC安裝分為兩個階段。第一階段是安裝CRS,其次是安裝帶有RAC元件的Database軟體並建立Cluster資料庫。CRS軟體使用的Oracle home必須不同於RAC軟體使用的home。儘管可以將Cluster中CRS和RAC軟體通過使用Cluster檔案系統共享儲存,但是軟體總是按一定規則安裝在每個節點的本地檔案系統中。這支援線上補丁的升級,並消除了單節點軟體造成的失敗。另外有兩個必須儲存在共享的儲存裝置中:

    *  voting file:其本質上是用於Cluster synchronization Services守護程序進行節點資訊的監控。大小約為20MB。

    *  Oracle Cluster Registry(OCR)檔案:也是CRS關鍵的組成部分。用於維護在Cluster中高可用性元件的資訊。例如,Cluster節點列表,Cluster資料庫Instance到節點的對映和CRS應用資源的列表(如Services、虛擬內部連結協議地址等)。此檔案是通過SRVCTL類似的管理工具自動維護的。其大小約100MB。

    voting file和OCR file是不能被儲存在ASM中的,因為它們必須在任何Oracle Instance啟動前就可以被訪問。並且,兩者必須是在冗餘的、可靠的儲存裝置中存放,如RAID。推薦最好的做法是將這些檔案放在裸磁碟上。

    3、OCR的結構

    Cluster的配置資訊是在OCR中維護的。OCR依賴分散式的共享快取結構用於優化關於Cluster知識庫的查詢。在Cluster中的每個節點都通過OCR程序訪問OCR快取在其記憶體中維護著一個副本。事實上在Cluster中,只有一個OCR程序對共享儲存中的OCR進行讀寫操作。此程序負責重新整理(refresh)其自己擁有的本地快取以及Cluster中其他節點的OCR cache。對於涉及到Cluster知識庫的訪問,OCR客戶端直接訪問本地OCR程序。當客戶端需要更新OCR時,它們將通過本地OCR程序與那個扮演讀寫OCR檔案的程序進行互動。

    OCR客戶端應用有:Oracle通用安裝器(OUI)、SRVCTL、企業管理器(EM)、DBCA、DBUA、NetCA和虛擬網路協議助理(VIPCA)。此外,OCR維護管理著CRS內部中定義的各種應用程式的資源的依賴和狀態資訊,特別是Database、Instance、Services和節點的應用程式。

    配置檔案的名字是ocr.loc,並且配置檔案變數是ocrconfig_loc。Cluster 知識庫的位置是不受限於裸裝置的。可以將OCR放置在由Cluster file system管理的共享儲存裝置上。

    note:OCR也可用於在ASM的單Instance中作為配置檔案,每個節點有一個OCR。

    4、RAC Database儲存原理

    與single-Instance Oracle的儲存方式最主要的不同之處在於RAC儲存必須將所有RAC中資料檔案存放在共享裝置中(裸裝置或是Cluster檔案系統)以便於訪問相同Database的Instance能夠共享。必須為每個Instance建立至少兩個redo log組,並且所有的redo log組必須也儲存在共享裝置中,從而為了crash恢復的目的。每個Instance的線上redo log groups被稱作一個Instance的線上redo 執行緒。

    此外,必須為每個Instance建立一個共享的undo表空間用於Oracle推薦的undo自動管理特點。每個undo表空間必須是對所有Instance共享的,主要用於恢復的目的。

    歸檔日誌不能被存放在裸裝置上,因為其命名是自動產生的,並且每個是不一致的。因此需要儲存在一個檔案系統中。如果使用Cluster file system(CFS),則可以在任何時間在任何node上訪問這些歸檔檔案。如果沒有使用CFS,就不得不使其他Cluster成員在恢復時那些歸檔日誌是可用的,例如通過網路檔案系統(NFS)來實現。如果使用推薦的flash recovery area特性,則其必須被儲存在共享目錄下,以便於所有的Instance能夠訪問。(共享目錄可以是一個ASM磁碟組,或是一個CFS)。

    5、RAC和共享儲存技術

    儲存是網格技術中的關鍵組成部分。傳統上,儲存都直接依附在每個Server(directly attached to each individual Server DAS)上。在過去的幾年來,更靈活的儲存出現並得到應用,主要是通過儲存空間網路或是正規的乙太網來實現訪問。這些新的儲存方式使得多個Servers訪問相同的磁碟集合成為可能,在分散式環境中,可以獲得簡單的存取。

    storage area network(SAN)代表了資料儲存技術在這一點的演進。傳統上,C/S系統中,資料被儲存在Server內部或是依附它的裝置中。隨後,進入了network attached storage(NAS)階段,這使得儲存裝置與Server和直接連線它們的網路向分離。它在SAN遵循的原則進一步允許儲存裝置存在於各自的網路中,並直接通過高速的媒介進行交換。使用者可以通過Server系統對儲存裝置的資料進行訪問,Server 系統與本地網路(LAN)和SAN相互連線。

    檔案系統的選擇是RAC的關鍵。傳統的檔案系統不支援多系統的並行掛載。因此,必須將檔案儲存在沒有任何檔案系統的裸卷標或是支援多系統併發訪問的檔案系統中。

    因此,三個主要的方法用於RAC的共享儲存有:

    *  裸卷標:既是一些直接附加的裸裝置,需要用於儲存,並以block模式程序操作。

    *  Cluster file system:也需要以block模式程序存取。一個或多個Cluster file 系統可以被用於儲存所有的RAC檔案。

    *  自動儲存管理(ASM):對於Oracle Database files,ASM是一個輕便的、專用的、最佳化的Cluster file system。

    6、Oracle Cluster file system

    Oracle Cluster file system(OCFS)是一個共享檔案系統,專門為Oracle RAC設計。OCFS排除了Oracle Database files被連線到邏輯磁碟上的需要,並使得所有的節點共享一個ORACLE Home,而不需每個node在本地有一個副本。OCFS卷標可以橫跨一個或多共享disks,用於冗餘和效能的增強。

    下面時可放入OCFS中的檔案類表:
  
    *  Oracle software的安裝檔案:在10g中,此設定只在windows 2000中支援。說是後面的版本會提供在Linux中的支援,但我還沒具體看。

    *  Oracle 檔案(控制檔案、資料檔案、redo logs檔案,bfiles等)

    *  共享配置檔案(spfile)

    *  在Oracle執行期間,由Oracle建立的檔案。

    *  voting和OCR檔案

    Oracle Cluster file system對開發人員和使用者時免費的。可從官方網站下載。

    7、自動儲存管理(ASM)

    是10g的新特性。它提供了一個縱向的統一管理的檔案系統和卷標管理器,專門用於建立Oracle Database 檔案。ASM可以提供單個SMP機器的管理或是貫穿多個Oracle RAC的Cluster節點。

    ASM無需再手動調節I/O,會自動的分配 I/O 負載到所有的可用資源中,從而優化效能。通過允許增加Database大小而不需shutdown資料庫來調節儲存分配,來輔助DBA管理動態資料庫環境。

    ASM可以維護資料的冗餘備份,從而提高故障的容錯。它也可以被安裝到可靠的儲存機制中。

    8、選擇RAW或CFS

    *  CFS的優點:對於RAC的安裝和管理非常簡單;對RAC使用Oracle managed files(OMF);single Oracle軟體安裝;在Oracle data files上可以自動擴充套件;當物理節點失敗時,對歸檔日誌的統一訪問。

    *  裸裝置的使用:一般會用於CFS不可用或是不被Oracle支援的情況下;它提供了最好的效能,不需要在Oracle和磁碟之間的中間層;如果空間被耗盡,裸裝置上的自動擴充套件將失敗;ASM、邏輯儲存管理器或是邏輯卷標管理其可以簡化裸裝置的工作,它們也允許載入空間到線上的裸裝置上,可為裸裝置建立名字,從而便於管理。

 9、RAC的典型Cluster棧


    在Cluster中的每個節點都需要一個被支援的相互連線的軟體協議來支援內部Instance的互動,同時需要TCP/IP支援CRS的輪詢。所有的UNIX平臺在千兆乙太網上使用user datagram protocol(UDP)作為主要的協議並進行RAC內部Instance 的IPC互動。其他支援的特有協議包括用於SCI和Sunfire的連線互動的遠端共享記憶體協議和超文字協議,用於超光纖互動。在任何情況下,互動必須能被平臺的Oracle所辨識。

    使用Oracle clusterware,可以降低安裝並支援併發症。但如果使用者使用非以太互動,或開發了依賴clusterware的應用程式在RAC上,可能需要vendor clusterware。

    同互動連線一樣,共享儲存方案必須被當前平臺的Oracle所辨識。如果在目標平臺上,CFS可用,Database area和flash recovery area都可以被建立到CFS或ASM上。如果在目標平臺上,CFS不可用,則Database area可以建立在ASM或是裸裝置上(需要卷標管理器)並且flash recovery area必須被建立在ASM中。

    10、RAC certification Matrix:它設計用於處理任何認證問題。可以使用matrix回答任何RAC相關的認證問題。具體使用步驟如下:

    *  連線並登陸 http://metalink.oracle.com
    *  點選選單欄的“certify and availability”按鈕
    *  點選“view certifications by product”連線
    *  選擇RAC
    *  選擇正確的平臺

    11、必要的全域性資源

    一個single-Instance環境,鎖座標通向一個共享的資源就像表中的一行。lock避免了兩個程序同事修改相同的資源。

    在RAC環境中,內部節點的同步時關鍵,因為它維持著不同節點中各自程序的一致性,避免其在同時修改相同的資源資料。內部節點的同步確保每個Instance看到buffer cache中block的最近的版本。上圖中顯示了當不存在加鎖的情況。

    1)全域性資源的協調

    cluster操作要求在所有Instance中對控制共享資源的訪問進行同步。RAC使用Global Resource Directory來記錄cluster Database中資源的使用資訊。Global Cache Service(GCS)和Global Enqueue Service(GES)管理GRD中的資訊。

    每個Instance在其本地的SGA中維護GRD的一部分。GCS和GES指定一個Instance管理特殊資源的所有資訊,它被稱為資源的master。每個Instance都知道resource的Instance masters。

    維護RAC的活動中的cache的依附性(cache coherency)是非常重要的。所謂cache coherency是保持在不同Oracle Instances中的多個block版本的一致性的技術。GCS通過所謂的cache融合演算法來實現cache coherency。

    GES管理所有非cache 融合演算法的內部Instance資源操作和Oracle入隊機制的狀態軌跡。GES主要的控制的資源是字典cache locks和library cache locks。同時,它還對所有死鎖敏感的佇列和資源起到死鎖檢測的作用。

    2)Global cache coordination例項

    假設某data block被第一個節點修改,成為髒資料。並且在clusterwide中,只有一個block copy版本,其內容用SCN號代替了。則具體的步驟如下:

    ① 第二個Instance檢視修改該block,向GCS提出請求。

    ② GCS向block的holder(持有者)提交請求。在此,第一個Instance就是holder。

    ③ 第一個Instance接到訊息,並將block傳送給第二個Instance。第一個Instance儲存髒buffer用於恢復的目的。block的髒映象被稱作block的past image。一個past image block將不能進一步被改變。

    ④收到block後,第二個Instance通知GCS,告知已經holds該block。

    3)write to disk coordination:example
 

    在cluster結構中的Instances中的caches中,可能存在同一個block的不同的修改版本。由GCS管理的寫協議確保了只有最近一個版本被寫入磁碟中。它同時需要確保其他之前的版本從其他cache中被清洗。一個寫磁碟的請求可以從任意一個Instance上發起,無論它是儲存了block的當前版本還是過去的版本。假設第一個Instance hold過去的block映象,請求Oracle將buffer寫入磁碟,如上圖,過程如下:

    ①第一個Instance傳送一個寫請求給GCS

    ②GCS將請求轉給第二個Instance,當前該block的holder

    ③第二個Instance接到寫請求後將block寫入磁碟

    ④第二個Instance通知GCS,告知其寫操作完成

    ⑤當接到GCS接到通知後,GCS命令所有的過去的映象的holders刪除其過去的映象。此映象將不會在因恢復而需要。

    12、RAC和Instance/crash recovery

    1)當一個Instance失敗,當該失敗被其他Instance檢測到,第二個Instance將會執行下面的恢復操作:

    ①在恢復的第一階段,GES重新灌入佇列

    ②GCS也重新灌入其資源。GCS程序只重新灌入那些失去其控制的資源。在這期間,所有的GCS資源請求和寫請求都臨時被掛起。然而,事務可以繼續修改data blocks,只要這些事務已經獲得了必要的資源。

    ③當佇列被重新配置後,一個活動的Instance可以獲得佔有該Instance恢復佇列。因此,當GCS資源被重新灌入的同時,SMON確定需要被恢復的blocks的集合。這個集合被稱作恢復集。因為,使用cache 融合演算法,一個Instance傳送這些blocks的內容到請求的Instance,而不需要將這些blocks寫入磁碟。這些blocks在磁碟上的版本可能不包含其他Instance程序的data的修改操作的blocks。這意味著SMON需要合併所有失敗的Instance的redo logs來確定恢復集。這是因為一個失敗的執行緒可能導致一個在redo 中的hole(洞)需要用指定的block填補。所以失敗的Instance的redo 執行緒不能被連續的應用。同時,活動的Instances的redo 執行緒不需恢復,因為SMON可以使用過去和當前的通訊緩衝的映象。

    ④用於恢復的緩衝空間被分配,並且那些之前讀取redo logs被辨識的資源被宣告為恢復資源。這避免了其他Instance訪問這些資源。

    ⑤所有在隨後的恢復操作中需要的資源被獲得,並且GRD當前是不凍結的。任何不需恢復的data block現在可以被訪問。所以當前系統時部分可用的。此時,假設有過去或當前的blocks映象需要被恢復,而其在cluster Database中的其他caches中,對於這些特殊的blocks,最近的映象是開始恢復點。如果對於要恢復的block,過去映象和當前映象緩衝都不在活動的Instance的caches中,則SMON將寫入一個log,表明合併失敗。SMON會對第三步中辨識的每個block進行恢復和寫入,在恢復之後會馬上釋放資源,從而使更多的資源在恢復時可以被使用。

    當所有的block被恢復,佔用的恢復資源被釋放,則系統再次可用。

    note:在恢復中,log合併的開支和失敗的Instances的數目是成比例的,並且與每個Instance的redo logs的大小有關。

    2)Instance recovery和Database availability

    上圖顯示了在進行Instance恢復時,每一步執行時資料庫的可用程度:

    A.  RAC執行在多節點上

    B.  有節點失敗被檢測到

    C.  GRD的佇列部分被重新設定;資源管理被重新分配到活動的nodes。此操作的執行比較快

    D.  GRD的緩衝部分被重新設定,SMON讀取失敗Instance的redo logs辨識那些需要恢復的blocks的集合

    E.  SMON向GRD發起請求,獲得所有在需要恢復的blocks集合中的Database blocks。當請求結束,所有的其他的blocks都可被訪問了

    F.  Oracle執行滾動的向前恢復。失敗執行緒的redo logs被應用到Database,並且那些被完全恢復的blocks將馬上可以被訪問

    G.  Oracle執行滾回恢復。對於尚未提交的事務,undo blocks被應用到Database中

    H.  Instance的恢復完成,所有的data可以被訪問

    13、有效的內部節點行級鎖

    Oracle支援有效的行級鎖。這些行級鎖主要是在DML操作時被建立,例如UPDATE。這些鎖被持有,直到事務被提交或回滾。任何請求同行的lock的程序都將被掛起。

    cache融合演算法的塊傳輸獨立於這些user可見的行級鎖。GCS對blocks的傳輸是一個底層的操作,無需當代行級鎖被釋放就開始進行。blocks可能被從一個Instance傳輸到其他其他Instances,同時該blocks可能被加鎖。

    GCS提供對data blocks的訪問,允許多個事務的併發進行。

    14、RAC的額外的記憶體需求

    RAC特有的記憶體多數是在SGA建立時從shared pool中分配的。因為blocks可能跨越Instances被緩衝,必須要求更大的緩衝區。因此,當將single Instance的Database遷移到RAC中時,保持每個Instance的請求工作量都能通single-instance時的情況,則需要對執行RAC的Instance增大10%的buffer cache和15%的shared pool。這些值只是基於RAC大小的經驗,一個初始的嘗試值。一般會大於此值。

    如果正在使用推薦的自動記憶體管理特性,可以通過修改SGA_TARGET初始引數來設定。但考慮到同樣數量的user訪問被分散到多個nodes中,每個Instance的記憶體需求可以被降低。

    實際資源的使用可以通過查詢每個Instance中的GCS和GES實體中的檢視V$RESOURCE_LIMIT檢視CURRENT_UTILIZATION和MAX_UTILIZATION欄位,具體語句為:

    SELECT resource_name, current_utilization, max_utilization FROM v$resource_limit WHERE resource_name like ‘g%s_%’;

    15、RAC與併發執行

    Oracle的優化器是基於執行訪問代價的,這就考慮了併發執行的代價,並將其作為獲得理想的執行計劃的一個部件。

    在RAC環境中,優化器的併發選擇是由內部節點和外部節點併發兩類組成的。例如,一個特殊的查詢請求需要六個查詢程序完成,並且在本地節點有六個併發的從屬執行程序都是idle的,則查詢通過使用本地資源執行,從而獲得結果。這闡述了有效地內部節點併發,也無需多節點併發的查詢協調的開支。如果本地節點中只有兩個併發執行從屬程序可用,則這兩個程序和其他節點的四個程序共同執行查詢。在這種情況下,內部節點和外部節點併發都被使用到,從而加速查詢。

    在真實環境的決策支援應用程式中,查詢不能通過各種查詢servers得到較好的劃分。所以有些併發執行servers完成其任務後先於其他servers變為idle狀態。Oracle併發執行技術動態監測idle的程序,並將超載程序的隊列表中的任務分配任務給處於idle狀態的程序。這樣,Oracle有效的再分配了所有程序的查詢工作量。RAC進一步擴充套件這個效率到整個cluster上。

    16、全域性動態效能檢視

    全域性動態效能檢視顯示所有開啟並訪問RAC Database的Instances相關的資訊。而標準動態效能檢視只顯示了本地Instance的相關資訊。

    對於所有V$型別的檢視,都會對應一個GV$檢視,除了幾個別的特殊情況。除了V$檢視中的columns,GV$檢視中包含了一個名為INST_ID的額外的column,顯示了RAC中的Instance number。可以在任何開啟的Instance上訪問GV$。

    為了查詢GV$檢視,每個Instance上的初始PARALLEL_MAX_SERVERS初始化引數至少設定為1 。這是由於對GV$的查詢使用了特殊的併發執行。併發執行的協調者執行在客戶端連線的Instance上,並且每個Instance上分配一個slave用於查詢其潛在的V$檢視。如果有一個Instance上的PARALLEL_MAX_SERVERS被設定為0,則無法獲得該node的資訊,同理,如果所有的併發servers非常忙,則也無法獲得結果。在以上兩種情況下,不會獲得提示或錯誤資訊。

    17、RAC和Service

    18、虛擬IP地址和RAC

    當一個node完全失敗,虛擬IP地址(VIP)是關於所有有效應用的。當一個節點失敗,其相關的VIP自動的分派到cluster中的其他node上。當這種情況出現時:

    * crs在另外一個node的網絡卡的MAC地址上繫結這個ip,對使用者來說是透明的。對於直接連線的客戶端,會顯示errors。

    *  隨後發往VIP的資料包都將轉向新的節點,它將給客戶端傳送error RST返回包。從而使客戶端快速的獲得errors資訊,進行對其他節點的連線重試。

    如果不使用VIP,則一個node失敗後,發往該節點的連線將等待10分鐘的TCP過期時間。
什麼是RAC

    傳說中的RAC,做為我們本文的主角,其全稱是Real Application Cluster,官方的中譯是真正應用叢集,聽起來和叫起來都很彆扭是不是,我們還是就叫它RAC吧。RAC並非是個新技術,其前身叫OPS(Oracle Parallel Server),從9i開始才改名叫RAC(回頭有空俺再寫篇blog跟大夥數道數道rac的前世今生),這屬於oracle的老把戲了,它的不少產品都是邊做邊改名,比如Oracle Data Guard在9i之前叫做Standby,對於這些知識大家不妨也多瞭解瞭解,如果你的就業經歷足夠長,俺覺著你就一定能理解俺所說的,有時候資深並不代表著技術有多牛,而是人家待的年頭夠久,對於歷史那是相當熟悉啊,所以資深也能理解成資歷的嘛,對於後來者而言怎樣快速獲得資歷呢,黑黑,你也去熟悉歷史唄(en,俺曉得,俺又跑題鳥)~~~

    RAC不僅僅是個元件,就我理解,它更應該被稱之為一種體系,因為它不是單單由某項特性組成,而是一堆特性應用的集合。該體系實現了多個例項同時訪問和管理同一資料庫,多個例項可以存在於不同節點,也可以在相同的節點上(從提升效能的角度來看,並不推薦這樣),彼此通過內網連線交換資料,並且能夠自動平衡負載,如果其中某個節點發生故障,RAC能夠通過後臺的監控程序將連線自動切換到另外一個或多個節點上,從而實現應用的無縫切換,對例項的高可用提供保護。

    因此,我們也能夠得出結論,RAC保護的是例項,而並非資料,這點一定要明確(對資料進行冗餘的特性在oracle中叫Data guard,詳細請見:一步一步學Dataguard)。

    什麼是CRS

    Cluster Ready Service是oracle叢集件的軟體架構,提到架構我們一般都會下意識覺著,哇這東西真牛啊,事實也確實如此,CRS可以說是RAC環境穩定執行的基礎,但平常呢你又感受不到它的存在。做為框架,它有多個組成部分,包括一系列的程序和一堆的服務,後面我們將會一一瞭解,總之它不是一個在戰鬥,它不是一個人。。。

    什麼是CVU

    全稱Cluster Verification Utility,CVU是oracle專門為RAC提供的一個檢查工具,目的是期望在安裝前就你的安裝環境進行檢查,看看軟硬體環境是否已就緒,該工具功能非常強大,通過搭配不同引數可以檢查安裝RAC所需環境的方方面面(後文詳緒)。不過,該工具所顯示的檢查結果也僅供參考,具體情況需要具體分析,並非說其檢查報錯,你就不能成功配置RAC了。另外由於oracle自身的一些bug等原因,可能也會造成CVU給出錯誤的資訊。

    什麼是OUI

    說起OUI大家應該都不會陌生,其全稱是Oracle Universal Installer,就是圖形化的安裝助手,這個就不多說什麼了。

    什麼是ASM

    做為oracle當前主推的一種儲存特性,在oracle官方文件中處處都能看到Oracle recommends using ASM之類的字眼,其實這並不奇怪,就像剛生完孩子的母親抱著孩子出門遛彎,逢人就想跟人說:看看我家孩子多漂亮的心理是一樣的,畢竟是人家自己的東西,如果它自己都不推廣還能靠誰去推廣呢,與何況這裡頭還有著更重要的經濟利益和長遠戰略,oracle不僅建議你儲存用 asm,它還有n多別的建議,比如管理用em,儲存用asm,表空間管理用local,undo管理用auto等等。扯遠了,回到主題,啥是ASM呢,其全稱是:Automatic Storage Management。可以把它理解成oracle自己設計的,用軟體實現的,用於儲存的黑匣子。

    什麼是OMF

    Oracle Manage File 的簡寫,一般在建立資料庫-指定資料檔案路徑時你會見到它的身影。一旦你選擇了該種路徑方式,在建立表空間,控制檔案,日誌檔案時就不需要指定位置和檔名了,Oracle會根據一些初始化引數的設定自動分配和命名,其通常與ASM搭配使用。

    什麼是OCR

    Oracle Cluster Registry用於儲存叢集和資料庫的配置資訊,做為CRS的關鍵元件,,因此,OCR必須保存於共享磁碟(但不能是ASM,asm畢竟只是一個軟體實現的叢集檔案系統,在讀取叢集資訊時,可能連asm例項都還沒啟動呢),大概需要100M左右的空間。

    什麼是Voting Disk

    用於儲存叢集中各節點資訊並確保各節點的一至性狀態,同樣也必須保存於共享磁碟(也不能是asm),大概需要20M左右的空間。

    什麼是VIP

    即虛擬IP,Oracle推薦客戶端連線時通過指定的虛擬IP連線,這也是Oracle10g新推出的一個特性。其本質目的是為了實現應用的無停頓(雖然目前還是有點小問題,但離目標已經非常接近)。使用者連線虛IP,這個IP並非綁定於網絡卡,而是由oracle程序管理,一旦某個使用者連線的虛IP所在例項宕機,oracle會自動將該IP對映到狀態正常的例項,這樣就不會影響到使用者對資料庫的訪問,也無須使用者修改應用。