Sun Java System Application Server Enterprise Edition 8.1 2005Q2 高可用性管理指南

第 8 章 配置高可用性階段作業持續性和容錯移轉

本章說明如何啟用和配置高可用性階段作業持續性:

階段作業持續性和容錯移轉簡介

Application Server 經由 HTTP 階段作業資料和有狀態階段作業 Bean (SFSB) 階段作業資料的容錯移轉功能,提供高可用性階段作業持續性。容錯移轉表示在伺服器實例或硬體出現故障時,其他伺服器實例接管分散式階段作業。

需求

在滿足以下條件時,分散式階段作業可在多個 Sun Java System Application Server 實例中執行:

限制

階段作業容錯移轉時,對開啟的檔案或網路連線的任何參照都會遺失。編碼應用程式時必須牢記此限制。

僅可以將某些物件連結至支援容錯移轉的分散式階段作業。與 Servlet 2.4 規格相反,如果不支援容錯移轉的物件類型連結至分散式階段作業,Sun Java System Application Server 不會丟出 IllegalArgumentException

可以將以下物件連結至支援容錯移轉的分散式階段作業:

無法將以下物件類型連結至支援容錯移轉的階段作業:

通常,對於這些物件,容錯移轉不可用。但是,容錯移轉可能在某些情況下可用,例如,如果物件是可串列化的。

應用程式範例

以下目錄包含說明階段作業持續性的範例應用程式:

install_dir/samples/ee-samples/highavailability
install_dir/samples/ee-samples/failover

以下範例應用程式說明 SFSB 階段作業持續性:

install_dir/samples/ee-samples/failover/apps/sfsbfailover

設定高可用性階段作業持續性

本小節說明如何設定高可用性階段作業持續性,包含以下主題:

Procedure設定高可用性階段作業持續性

開始之前

高可用性階段作業持續性與動態部署、動態重新載入和自動部署不相容。這些功能適用於開發而非生產環境,因此必須在啟用 HA 階段作業持續性之前停用它們。如需有關如何停用這些功能的資訊,請參閱「Sun Java System Application Server Enterprise Edition 8.1 2005Q2 管理指南」中的第 2 章「部署應用程式」

  1. 建立 Application Server 叢集。

    如需更多資訊,請參閱建立叢集

  2. 為叢集建立 HADB 資料庫。

    如需更多資訊,請參閱 configure-ha-cluster(1)

  3. 為叢集設定 HTTP 負載平衡。

    如需更多資訊,請參閱設定 HTTP 負載平衡

  4. 啟用所需應用程式伺服器實例和 Web 或 EJB 容器的可用性。

    然後配置階段作業持續性設定。選擇以下方法之一:

  5. 重新啟動叢集中的每個伺服器實例。

    如果實例目前正在處理請求,請在重新啟動該實例前將其靜止,這樣,它就有足夠的時間來處理正在處理的請求。如需更多資訊,請參閱停用 (靜止) 伺服器實例或叢集

  6. 啟用所需的特定 SFSB 的可用性。

    選取需要對階段作業狀態設定檢查點的方法。請參閱配置個別 Bean 的可用性

  7. 如果要使每個 Web 模組均具有高可用性,請使每个 Web 模?均可分散。

  8. 部署期間啟用個別應用程式、Web 模組或 EJB 模組的可用性。

    請參閱配置個別應用程式或 EJB 模組的可用性

    在管理主控台中,核取 [啟用可用性] 方塊,或使用 --availabilityenabled 選項設定為 trueasadmin deploy 指令。

啟用階段作業可用性

您可以啟用五個範圍 (最高至最低) 的階段作業可用性:

  1. 伺服器實例,依預設啟用。如需說明,請參閱下一小節啟用伺服器實例的可用性

  2. 容器 (Web 或 EJB),依預設啟用。如需有關在容器層級啟用可用性的資訊,請參閱:

  3. 應用程式,依預設停用

  4. 獨立 Web 或 EJB 模組,依預設停用

  5. 個別 SFSB,依預設停用

若要在給定範圍啟用可用性,還必須在所有更高層級也啟用。例如,若要啟用應用程式層級的可用性,必須在伺服器實例層級和容器層級啟用可用性。

給定層級的預設值是其上一層級的設定值。例如,如果已啟用容器層級的可用性,則依預設啟用應用程式層級的可用性。

如果已停用伺服器實例層級的可用性,則啟用其他任何層級的可用性都不生效。如果已啟用伺服器實例層級的可用性,除非已明確停用,否則將啟用所有層級的可用性。

啟用伺服器實例的可用性

若要啟用伺服器實例的可用性,請使用 asadmin set 指令將配置的 availability-service.availability-enabled 特性設定為 true。

例如,如果配置名稱為 config1


asadmin set --user admin --passwordfile password.txt 
--host localhost 
--port 4849 
config1.availability-service.availability-enabled="true"

Procedure使用管理主控台啟用伺服器實例的可用性

  1. 在樹形元件中,展開 [配置] 節點。

  2. 展開要編輯的配置之節點。

  3. 選取 [可用性服務] 節點。

  4. 在 [可用性服務] 頁面,核取 [可用性服務] 核取方塊來啟用實例層級的可用性。

    若要停用可用性,請取消核取該方塊。

    此外,如果為獲得階段作業持續性而變更了用於連線 HADB 的 JDBC 資源,可以變更儲存池名稱。如需詳細資訊,請參閱 configure-ha-cluster(1)

  5. 按一下 [儲存] 按鈕。

  6. 停止和重新啟動伺服器實例。

HTTP 階段作業容錯移轉

J2EE 應用程式通常具有大量階段作業狀態資料。Web 購物車即為階段作業狀態的經典範例。而且,應用程式可以快取頻繁需要的階段作業物件資料。實際上,幾乎所有需要進行大量使用者互動活動的應用程式均需要維護階段作業狀態。

配置 Web 容器的可用性

若要使用 asadmin 啟用和配置 Web 容器的可用性,請參閱 configure-ha-persistence(1)

此外,還可使用 asadmin set 指令將配置的 availability-service.web-container-availability.availability-enabled 特性設定為 true,然後使用 configure-ha-persistence 根據需要設定特性。

例如,如下使用 set 指令,其中,config1 為配置名稱:


asadmin set --user admin --passwordfile password.txt 
--host localhost --port 4849 
config1.availability-service.web-container-availability.availability-enabled="true"
asadmin configure-ha-persistence --user admin --passwordfile secret.txt 
--type ha 
--frequency web-method 
--scope modified-session 
--store jdbc/hastore 
--property maxSessions=1000:reapIntervalSeconds=60 cluster1

Procedure使用管理主控台啟用 Web 容器的可用性

  1. 在樹形元件中,選取所需配置。

  2. 按一下 [可用性服務]。

  3. 選取 [Web 容器可用性] 標籤。

    核取 [可用性服務] 核取方塊以啟用可用性。若要停用可用性,請取消核取該方塊。

  4. 變更其他設定,如以下可用性設定小節中所述。

  5. 重新啟動伺服器實例。

可用性設定

[可用性服務] 的 [Web 容器可用性] 標籤讓您可以變更以下可用性設定:

持續性類型為啟用了可用性的 Web 應用程式指定階段作業持續性機制。允許的值包括 memory (無持續性)、file (檔案系統) 和 ha (HADB)。

必須配置並啟用 HADB 後,才能使用 ha 階段作業持續性。如需詳細配置資訊,請參閱 configure-ha-cluster(1)

如果啟用了 Web 容器可用性,預設為 ha。否則,預設為 memory。對於需要階段作業持續性的生產環境,請使用 ha。前兩個類型 (memory 和 file ) 的持續性不提供高可用性階段作業持續性。

持續性頻率:指定儲存階段作業狀態的頻率。僅當持續性類型為 ha 時適用。允許的值包括 :

持續性範圍:指定階段作業物件數和儲存階段作業狀態的頻率。僅當持續性類型為 ha 時適用。允許的值包括:

單次登入狀態:核取此方塊以啟用單次登入狀態的持續性。若要停用可用性,請取消核取該方塊。如需更多資訊,請參閱將階段作業容錯移轉與單次登入配合使用

HTTP 階段作業儲存:如果為獲得階段作業持續性而變更了用於連線 HADB 的 JDBC 資源,可以變更 HTTP 階段作業儲存。如需詳細資訊,請參閱 configure-ha-cluster(1)

配置個別 Web 應用程式的可用性

若要啟用和配置個別 Web 應用程式的可用性,請編輯應用程式部署描述元檔案 sun-web.xml。應用程式部署描述元中的設定會置換 Web 容器的可用性設定。

session-manager 元素的 persistence-type 屬性決定應用程式使用之階段作業持續性的類型。必須將該屬性設定為 ha 才能啟用高可用性階段作業持續性。

如需有關 sun-web.xml 檔案的更多資訊,請參閱「Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide」中的「The sun-web.xml File」

範例

<sun-web-app> ... 
  <session-config> 
    <session-manager persistence-type=ha> 
      <manager-properties> 
        <property name=persistenceFrequency value=web-method /> 
      </manager-properties> 
      <store-properties> 
        <property name=persistenceScope value=session /> 
      </store-properties> 
    </session-manager> ... 
</session-config> ...

將階段作業容錯移轉與單次登入配合使用

在單一應用程式伺服器實例中,使用者經過應用程式認證後,即無需分別經在相同實例上執行的其他應用程式重新認證。這稱為單次登入。如需更多資訊,請參閱「Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide」中的「User Authentication for Single Sign-on」

若要使該功能在 HTTP 階段作業容錯移轉到叢集中另一個實例後仍然可用,必須將單次登入資訊保留在 HADB 中。若要保持單次登入資訊,首先請啟用伺服器實例和 Web 容器的可用性,然後啟用單次登入狀態容錯移轉。

透過管理主控台中的 [可用性服務] 的 [Web 容器可用性] 標籤,您可以啟用單次登入狀態容錯移轉,如配置 Web 容器的可用性中所述。您也可以使用 asadmin set 指令將配置的 availability-service.web-container-availability.sso-failover-enabled 特性設定為 true。

例如,按如下所示使用 set 指令,其中 config1 為配置名稱:

asadmin set --user admin --passwordfile password.txt 
--host localhost --port 4849 
config1.availability-service.web-container-availability.
sso-failover-enabled="true"

單次登入群組

可使用單一名稱和密碼組合存取的多個應用程式,即構成單次登入群組。對於與應用程式 (是單次登入群組的一部分) 相對應的 HTTP 階段作業,如果其中一個階段作業逾時,其他階段作業並不會失效,並且仍然可用。這是因為一個階段作業的逾時不應影響其他階段作業的可用性。

因此,如果一個階段作業逾時並且您嘗試從執行該階段作業的同一瀏覽器視窗存取相應的應用程式,則無需再次進行認證。但是將建立一個新的階段作業。

以屬於含有其他兩個應用程式的單次登入群組的購物車應用程式為例。假設其他兩個應用程式的階段作業逾時值大於購物車應用程式的階段作業逾時值。如果購物車應用程式的階段作業逾時,並且您嘗試從執行該階段作業的同一瀏覽器視窗執行購物車應用程式,則無需再次進行認證。但是,前一輛購物車將遺失,並且必須建立一輛新的購物車。即使執行購物車應用程式的階段作業已逾時,其他兩個應用程式也會繼續照常執行。

類似地,可假定與其他兩個應用程式中的任何一個應用程式對應的階段作業逾時。當從執行該階段作業的同一瀏覽器視窗連線應用程式時,您無需再次進行認證。


備註 –

此運作方式僅適用於階段作業逾時情況。如果啟用了單次登入並且您使用 HttpSession.invalidate() 令其中一個階段作業失效,則屬於單次登入群組的所有應用程式之階段作業都將失效。如果您嘗試存取屬於單次登入群組的任一應用程式,則需要再次進行認證,系統將為存取該應用程式的用戶端建立一個新的階段作業。


有狀態階段作業 Bean 容錯移轉

有狀態階段作業 Bean (SFSB) 包含用戶端特定的狀態。用戶端與有狀態階段作業 Bean 之間存在一對一關係。建立時,EJB 容器會為每個 SFSB 提供一個唯一的階段作業 ID,此 ID 將 SFSB 連結至用戶端。

在伺服器實例出現故障時,SFSB 的狀態可以儲存在持續性存放區中。SFSB 的狀態在其使用週期中預先定義的時間儲存於持續性存放區中。這稱為檢查點操作。如果啟用,通常會在 Bean 完成了任何作業事件之後 (即使該作業事件回復) 執行檢查點操作。

但是,如果 SFSB 參與了 Bean 管理的作業事件,則可能會在 Bean 方法執行到一半時確定該作業事件。因為 Bean 的狀態可能由於方法呼叫而處於過渡過程中,因此不是對 Bean 狀態進行檢查點操作的恰當時間。這種情況下,如果 Bean 在方法結束時不在其他作業事件的範圍內,EJB 容器會在相應方法結束時對 Bean 的狀態進行檢查點操作。如果 Bean 管理的作業事件使用多個方法,檢查點操作將延遲,直至後續方法結束時沒有使用中的作業事件。

SFSB 的狀態無需是作業事件,且可能做為非作業事件商務方法而進行了重大修改。如果某個 SFSB 出現這種情況,則您可以指定一系列檢查點方法,如指定進行檢查點操作方法中所述。

如果可分散 Web 應用程式參照 SFSB,且 Web 應用程式的階段作業容錯移轉,則 EJB 參照也將容錯移轉。

如果在 Application Server 實例停止時取消部署使用階段作業持續性的 SFSB,則可能不會清除持續性存放區中的階段作業資料。若要防止發生此情況,請在 Application Server 實例執行時取消部署 SFSB。

配置 EJB 容器的可用性

Procedure啟用 EJB 容器的可用性

  1. 選取 [EJB 容器可用性] 標籤。

  2. 核取 [可用性服務] 核取方塊。

    若要停用可用性,請取消核取此核取方塊。

  3. 請按照可用性設定中的說明變更其他設定

  4. 按一下 [儲存] 按鈕。

  5. 重新啟動伺服器實例。

等效的 asadmin 指令

若要啟用 EJB 容器的可用性,請使用 asadmin set 指令為配置設定以下三個特性:

例如,如果 config1 為配置名稱,則使用以下指令:

asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability .availability-enabled="true"

asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability .sfsb-persistence-type="file"

asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability .sfsb-ha-persistence-type="ha"

可用性設定

[可用性服務] 的 [EJB 容器可用性] 標籤可讓您變更以下可用性設定:

HA 持續性類型:為啟用了可用性的 SFSB 指定階段作業持續性和鈍化機制。允許的值包括 file (檔案系統) 和 ha (HADB)。對於需要階段作業持續性的生產環境,請使用預設值 ha

SFSB 持續性類型:為尚未啟用可用性的 SFSB 指定鈍化機制。允許的值包括 file (預設值) 和 ha

如果將任一持續性類型設定為 file,EJB 容器都將指定檔案系統位置,以儲存鈍化的階段作業 Bean 狀態。檔案系統的檢查點操作對於測試很有用,但不適用於生產環境。如需更多資訊,請參閱「Sun Java System Application Server Enterprise Edition 8.1 2005Q2 管理指南」中的「配置儲存特性」

如果任何其他伺服器實例出現故障,HA 持續性會使伺服器實例的叢集可以回復 SFSB 狀態。HADB 也用做鈍化和啟動儲存。在需要 SFSB 狀態持續性的生產環境中使用此選項。如需更多資訊,請參閱 configure-ha-cluster(1)

SFSB 儲存池名稱:如果為獲得階段作業持續性而變更了用於連線 HADB 的 JDBC 資源,可以變更 SFSB 儲存池名稱。如需詳細資訊,請參閱 configure-ha-cluster(1)

停用可用性時配置 SFSB 階段作業儲存

如果停用了可用性,本機檔案系統將用於 SFSB 狀態鈍化,但不用於持續性。若要變更 SFSB 狀態的儲存位置,請變更 EJB 容器中的 [階段作業儲存位置] 設定。如需更多資訊,請參閱「Sun Java System Application Server Enterprise Edition 8.1 2005Q2 管理指南」中的「配置儲存特性」

配置個別應用程式或 EJB 模組的可用性

部署期間,可以啟用個別應用程式或 EJB 模組的 SFSB 可用性:

配置個別 Bean 的可用性

若要啟用個別 SFSB 的可用性並選取進行檢查點操作方法,請使用 sun-ejb-jar.xml 部署.

若要啟用高可用性階段作業持續性,請在 ejb 元素中設定 availability-enabled="true"。若要控制 SFSB 快取的大小和運作方式,請使用以下元素:

如需有關 sun-ejb-jar.xml 的更多資訊,請參閱「Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide」中的「The sun-ejb-jar.xml File」


範例 8–1 啟用了可用性的 EJB 部署描述元範例

<sun-ejb-jar>
    ...
    <enterprise-beans>
        ...
        <ejb availability-enabled="true">
            <ejb-name>MySFSB</ejb-name>
        </ejb>
        ...
    </enterprise-beans>
</sun-ejb-jar>

指定進行檢查點操作方法

如果啟用,通常會在 Bean 完成了任意作業事件之後 (即使該作業事件回復) 執行檢查點操作。若要在導致 Bean 狀態重大修改之非作業事件商務方法結束時,指定額外選擇性的 SFSB 檢查點設定功能,請使用 sun-ejb-jar.xml 部署描述元檔案的 ejb 元素中的 checkpoint-at-end-of-method 元素

如果要在建立之後立即對 SFSB 的初始狀態進行檢查點操作,checkpoint-at-end-of-method 元素中的非作業事件方法可以是:


備註 –

如果 SFSB 未參與任何作業事件,並且沒有在 checkpoint-at-end-of-method 元素中明確指定 SFSB 的方法,則不會對 Bean 的狀態設定檢查點 (即使此 Bean 的 availability-enabled="true")。

為了取得更好的效能,請指定方法的子集。此方法應該完成對 Bean 的狀態做出重要修改的大量工作或結果。



範例 8–2 指定方法檢查點之 EJB 部署描述元範例

<sun-ejb-jar>
    ...
    <enterprise-beans>
        ...
        <ejb availability-enabled="true">
            <ejb-name>ShoppingCartEJB</ejb-name>
            <checkpoint-at-end-of-method>
                <method>
                    <method-name>addToCart</method-name>
                </method>
            </checkpoint-at-end-of-method>
        </ejb>
        ...
    </enterprise-beans>
</sun-ejb-jar>