本節論述以下主題︰
J2EE 應用程式對階段作業持續性的需求先前於階段作業持續性中已有說明。Application Server 使用高可用性資料庫 (HADB) 作為高可用性階段作業存放區。HADB 隨附於 Application Server Enterprise Edition 中,但可在不同的主機上執行部署。HADB 為 HTTP 階段作業與有狀態的階段作業 Bean 資料提供高可用性資料存放區。
此分離性架構的優點包含:
高可用性叢集中的伺服器實例鬆散結合,且可作為高效能的 J2EE 容器。
停止與啟動伺服器實例不會影響其他伺服器或其可用性。
HADB 可在另外一組較便宜的機器上執行 (例如,具有單一處理器或雙處理器的機器)。數個叢集可共用這些機器。您可以在執行 Application Server 的機器 (並置) 上或不同的機器 (個別層級) 上執行 HADB,視部署需求而定。如需有關這兩個選項的更多資訊,請參閱並置拓樸。
當狀態管理需求變更時,可以將資源增加至 HADB 系統,而不會影響現有的叢集或其應用程式。
我們已針對 Application Server 用途最佳化 HADB,HADB 不適合讓應用程式當作一般用途的資料庫。
如需 HADB 硬體與網路系統需求的資訊,請參閱「Sun Java System Application Server 9.1 版本說明」中的「硬體和軟體需求」。如需 HADB 所需的其他系統配置步驟,請參閱「Sun Java System Application Server 9.1 高可用性管理指南」中的第 2 章「安裝和設定高可用性資料庫」。
每個 HADB 節點至少有一個 CPU。
每個節點至少有 512 MB 的記憶體。
如需網路配置需求的資訊,請參閱「Sun Java System Application Server 9.1 高可用性管理指南」中的第 2 章「安裝和設定高可用性資料庫」。如需非常高可用性的其他需求,請參閱減少雙重故障的機會。
HADB 是包含成對節點的分散式系統。節點會分成兩個資料備援單元 (DRU),每個節點來自每個 DRU 的每對節點,如資料備援單元中所述。
每個節點包含:
作業事件狀態複製的一組程序
在程序間通訊時所使用的專屬共用記憶體區域。
一或多個輔助儲存裝置 (磁碟)。
可代管一或多個階段作業資料庫的一組 HADB 節點。 每個階段作業資料庫與不同的應用程式伺服器叢集相關聯。刪除叢集也會刪除相關聯的階段作業資料庫。
如需 HADB 硬體需求的資訊,請參閱「Sun Java System Application Server 9.1 版本說明」中的「硬體和軟體需求」。
HADB 節點有兩種類型:
每個節點皆有一個父程序和數個子程序。父程序又稱為節點監督員 (NSUP),由管理代理程式啟動。父程序負責建立子程序並將其保持在執行狀態。
子程序包含:
作業事件伺服器程序 (TRANS) 可協調分散式節點上的作業事件,並管理資料儲存。
關聯代數伺服器程序 (RELALG) 可協調並執行複合關聯代數查詢,例如排序和連結。
SQL 共用記憶體伺服器程序 (SQLSHM) 可維護 SQL 字典快取。
SQL 伺服器程序 (SQLC) 可接收用戶端查詢、將查詢編譯為本機 HADB 指示、將指示傳送至 TRANS、接收結果,然後將結果傳遞至用戶端。每個節點針對每個用戶端連線會有一個主要的 SQL 伺服器和一個輔助伺服器。
節點管理員伺服器程序 (NOMAN),讓管理代理程式用來執行 hadbm 管理用戶端所發出的管理指令。
如前所述,每個 HADB 實例包含一對 DRU。每個 DRU 與配對中另一個 DRU 有相同數目的使用中節點及備用節點。DRU 中的每個使用中節點在另一個 DRU 中有 鏡像節點。由於鏡像的原因,每個 DRU 會包含完整的資料庫複本。
下圖顯示內含六個節點的 HADB 架構範例:四個使用中節點與兩個備用節點。節點 0 與 1、2 與 3 是鏡像組。在此範例中,每個主機有一個節點。一般來說,若主機有足夠的系統資源,便可有多個節點 (請參閱系統需求)。
您必須增加代管成對 HADB 節點的機器,每個 DRU 中有一部機器。
HADB 透過複製資料與服務可達成高可用性。鏡像節點上的資料複本會指定為主要複本與緊急待命複本。主要複本會執行插入、刪除、更新與讀取等作業。緊急待命複本會接收主要複本作業的記錄,並在作業事件存留時間內加以重做。僅有主要節點可執行讀取作業,因此不會記錄。每個節點皆包含主要複本與緊急待命複本,並扮演這兩個角色。資料庫會分段並分散至 DRU 中的使用中節點。鏡像組中的各節點包含相同的一組資料片段。複製鏡像節點中的資料稱為複製。複製可讓 HADB 提供高可用性:當節點故障時,鏡像節點幾乎會立即接管 (幾秒內)。複製可確保可用性並使人無法察覺節點故障或 DRU 故障,而不致失去資料或無法提供服務。
當鏡像節點接管故障節點的功能時,必須執行雙份工作:也就是自己的工作以及故障節點的工作。若鏡像節點的資源不足,超載情況會降低節點的效能並增加節點故障的可能性。當節點故障時,HADB 會嘗試重新啟動節點。若故障的節點無法重新啟動 (例如由於硬體故障),系統會繼續運作但可用性會降低。
HADB 可容許一個節點、整個 DRU 或多個節點故障,但無法容許節點與鏡像節點同時故障的「雙重故障」。如需有關如何降低雙重故障可能性的資訊,請參閱減少雙重故障的機會。
當節點故障時,其鏡像節點會接管故障的節點。若故障的節點沒有備用節點,則此時故障的節點將無鏡像節點。備用節點會自動取代故障節點的鏡像節點。擁有備用節點可降低系統沒有鏡像節點的運作時間。
備用節點一般不含資料,但會不斷監視 DRU 中使用中節點是否故障。當節點故障且在指定逾時期間未回復時,備用節點會從鏡像節點複製資料並與之同步化。所需的時間視複製的資料量及系統與網路能力而定。進行同步化之後,備用節點會無須手動介入而自動取代鏡像節點,從而解除鏡像節點的超載情況,而平衡鏡像節點的負載。這又稱為故障回復或自我修復。
修復故障的主機 (透過更換硬體或升級軟體) 並重新啟動時,由於原始備用節點現在變成使用中,因此在此主機上執行的一或多個節點,會加入系統成為備用節點。
備用節點不是必要項目,但這些節點可讓系統即使在機器故障時,也可維持其服務整體水準。備用節點亦可簡化在代管使用中節點的機器上,執行規劃維護的作業。為每個 DRU 配置一部機器作為備用機器,如此一來,若其中一部機器故障,HADB 系統便可繼續,而不會對效能與可用性造成不良影響。
一般來說,請以具有足夠應用程式伺服器實例與 HADB 節點的備用機器,取代無法使用的任何機器。
下列範例說明如何在 HADB 部署中使用備用節點。可能的部署拓樸有兩種:並置,在此拓樸中,HADB 與 Application Server 位於相同的主機上;以及個別層級,在此拓樸中,HADB 與 Application Server 位於不同的主機上。如需有關部署拓樸的更多資訊,請參閱第 3 章, 選取拓樸。
在此備用節點配置範例中,假設您有一個內含四部 Sun FireTM V480 伺服器的並置拓樸,其中每部伺服器有一個應用程式伺服器實例與兩個 HADB 資料節點。
請為備用節點額外配置兩部伺服器 (每個 DRU 一部機器)。每個備用機器執行一個應用程式伺服器實例以及兩個備用 HADB 節點。
假設您有一個個別層級的拓樸,其中 HADB 層有兩部 Sun FireTM 280R 伺服器,每部伺服器執行兩個 HADB 資料節點。若要在即使一部機器無法使用的情況下,維持此系統的完整能力,請為應用程式伺服器實例層與 HADB 層各配置一部備用機器。
應用程式伺服器實例層的備用機器,必須和應用程式伺服器實例層中其他機器有相同數目的實例。同理,HADB 層的備用機器,必須和 HADB 層中其他機器有相同數目的 HADB 節點。
HADB 的內建資料複製可容許單一節點或整個 DRU 故障。依預設,當鏡像節點組或兩個 DRU 皆故障時,HADB 無法承受此雙重故障。在這類情況下,將無法使用HADB。
除了如上節所述使用備用節點外,還可以採取下列步驟降低雙重故障的可能性:
提供獨立的電源供應:為達最佳的容錯能力,支援一個 DRU 的伺服器必須有獨立的電源 (透過不斷電系統)、處理單元及儲存裝置。若在一個 DRU 中發生電源故障,其他 DRU 中的節點會繼續處理請求,直到電源恢復為止。
提供雙重互連:若要容許單一網路的故障,請複製 DRU 之間的線路與交換器。
這些步驟為選用步驟,但會增加 HADB 實例的整體可用性。
HADB 管理系統提供內建安全性並協助多平台的管理。如下圖所述,HADB 管理架構包含下列元件:
如圖所示,執行 HADB 服務的每部機器上會執行一個 HADB 管理代理程式。每部機器一般會代管一或多個 HADB 節點。HADB 管理網域類似 Application Server 網域,包含許多機器。一個網域中至少需有兩部機器,資料庫才有容錯能力,且一般來說,機器的數目必須是偶數才可組成 DRU 組。因此,一個網域可包含許多管理代理程式。
如圖所示,一個網域可包含一或多個資料庫實例。一部機器可包含一或多個屬於一或多個資料庫實例的節點。
HADB 管理用戶端是指令行公用程式 hadbm,用於管理 HADB 網域及其資料庫實例。HADB 服務可持續執行 (即使相關聯的應用程式伺服器叢集停止亦然),但如果要刪除,則必須小心關閉。如需有關使用 hadbm 的更多資訊,請參閱「Sun Java System Application Server 9.1 高可用性管理指南」中的第 3 章「管理高可用性資料庫」。
您可以使用 asadmin 指令行公用程式建立及刪除與高可用性叢集相關聯的 HADB 實例。如需更多資訊,請參閱「Sun Java System Application Server 9.1 高可用性管理指南」中的第 9 章「配置高可用性階段作業持續性和容錯移轉」。
管理代理程式是伺服器程序 (名為 ma),可存取主機上的資源;例如,它可建立裝置並啟動資料庫程序。管理代理程式會協調及執行管理用戶端指令,例如啟動或停止資料庫實例。
管理用戶端透過指定代理程式的位址與連接埠號碼,連線至管理代理程式。連線之後,管理用戶端就會透過管理代理程式將指令傳送至 HADB。代理程式接收到請求後會加以執行。因此,管理代理程式必須執行於主機上,才可對該主機發出任何 hadbm 管理指令。您可將管理代理程式配置為自動啟動的系統服務。
管理代理程式程序可在 HADB 節點監督員程序失敗時將其重新啟動,從而確保 HADB 節點監督員程序的可用性。因此,對於部署,您必須確保 ma 程序的可用性,才可維持 HADB 的整體可用性。重新啟動後,管理代理程式會從系統網域的其他代理程式,回復網域與資料庫配置資料。
使用主機作業系統 (OS) 以確保管理代理程式的可用性。在 Solaris 或 Linux 上,init.d 可確保 ma 程序在程序失敗並重新啟動作業系統之後的可用性。在 Windows 上,管理代理程式會以 Windows 服務執行。因此,若代理程式故障或作業系統重新啟動,作業系統便會重新啟動管理代理程式。
HADB 管理網域是一組主機,每個主機有在相同連接埠號碼上執行的管理代理程式。網域中的主機可包含一或多個 HADB 資料庫實例。定義管理網域的方法,是依據代理程式所使用的共用連接埠號碼,以及建立網域或增加代理程式至網域時所產生的識別碼 (稱為 domainkey)。domainkey 提供唯一的網域識別碼,這點極為重要,因為管理代理程式使用多重播送進行通訊。您可以設定 HADB 管理網域對應 Application Server 網域。
在一個網域中有多個資料庫實例有助於開發環境,因為如此可讓不同的開發人員群組使用自己的資料庫實例。在某些情況下,也有助於生產環境。
屬於同一個網域的所有代理程式會協調其管理作業。當您透過 hadbm 指令變更資料庫配置時,所有代理程式會隨之變更配置。除非節點的主機上有執行的管理代理程式,否則您無法停止或重新啟動節點。但是,您可以在無法使用某些代理程式的情況下執行 hadbm 指令,以讀取 HADB 狀態或配置變數值。
使用下列管理用戶端指令處理管理網域:
hadbm createdomain:使用特定主機建立管理網域。
hadbm extenddomain:將主機增加至現有的管理網域。
hadbm deletedomain:移除管理網域。
hadbm reducedomain:從管理網域移除主機。
hadbm listdomain:列出管理網域中所定義的所有主機。
管理代理程式會將資料庫配置儲存在儲存庫。由於儲存庫會在所有管理代理程式之間進行複製,因此容錯能力很高。將配置保留在伺服器上,可讓您從任何安裝管理用戶端的電腦上執行管理作業。
必須執行網域中的大部分管理代理程式,才可對儲存庫進行任何變更。因此,若網域中有 M 個代理程式,至少必須執行 M/2 + 1 個代理程式 (無條件捨去到整數),才可對儲存庫進行變更。
若網域中有些主機無法使用 (例如由於硬體故障),且您因為沒有配額而無法執行某些管理指令,請使用 hadbm disablehost 指令從網域移除故障的主機。