Sun Cluster 資料服務開發者指南 (適用於 Solaris 作業系統)

第 4 章 修改資源類型

本章討論修改資源類型所需瞭解的問題。還包含有關可讓叢集管理員升級資源之方式的資訊。

本章涵蓋下列主題:

修改資源類型簡介

叢集管理員必須能執行以下作業︰

您想要升級的資源類型稱為支援升級的資源類型。您可能變更的現有資源類型的元素如下所示︰


備註 –

修改應用程式程式碼時,您無須修改資源類型。


您需要瞭解提供叢集管理員升級資源類型所需工具的需求。本章將說明設置這些工具所需瞭解的內容。

設置資源類型註冊檔案的內容

資源類型名稱

資源類型名稱的三個元件是在 RTR 檔案中指定為 vendor-idresource-typert-version 的特性。scrgadm 指令會插入句點和冒號分割符以建立資源類型名稱︰

vendor-id.resource-type:rt-version

vendor-id 前綴用來辨別不同公司提供的具有同一名稱的兩個註冊檔案。若要確保 vendor-id 唯一,請在建立資源類型時使用公司的股票代號。rt-version 用來辨別同一基本資源類型的多個註冊版本 (升級)。

您可以透過鍵入以下指令獲得完全合格的資源類型名稱︰


# scha_resource_get -O Type -R resource-name -G resource-group-name

在 Sun Cluster 3.1 之前的註冊資源類型名稱將繼續使用以下語法︰

vendor-id.resource-type

資源類型名稱的格式說明資源類型名稱的格式。

指定 #$upgrade#$upgrade_from 指令

若要確保您正在修改的資源類型為支援升級的資源類型,請將 #$upgrade 指令納入資源類型的 RTR 檔案。對於您要支援的資源類型的每個舊版本,請在 #$upgrade 指令後面增加零個或多個 #$upgrade_from 指令。

#$upgrade#$upgrade_from 指令必須顯示於 RTR 檔案中的資源類型特性宣告區段和資源宣告區段之間。請參閱 rt_reg(4) 線上手冊。


範例 4–1 RTR 檔案中的 #$upgrade_from 指令

#$upgrade_from   "1.1"   WHEN_OFFLINE
#$upgrade_from   "1.2"   WHEN_OFFLINE
#$upgrade_from   "1.3"   WHEN_OFFLINE
#$upgrade_from   "2.0"   WHEN_UNMONITORED
#$upgrade_from   "2.1"   ANYTIME
#$upgrade_from   ""      WHEN_UNMANAGED

#$upgrade_from 指令的格式如下所示︰

#$upgrade_from version tunability
version

RT_version。如果所有資源類型均沒有版本,或其版本並非您先前在 RTR 檔案中定義的版本,請指定空字串 (“”)。

tunability

叢集管理員可以升級指定的 RT_version 的條件和時間。

使用 #$upgrade_from 指令中的以下可調性值︰

ANYTIME

當對於叢集管理員升級資源的時間無限制時使用。升級期間該資源可完全處於線上狀態。

WHEN_UNMONITORED

當新資源類型版本的方法如下時使用︰

  • UpdateStopMonitor_checkPostnet_stop 方法與舊的資源類型版本的啟動方法 (Prenet_stopStart) 相容

  • Fini 方法與舊版本的 Init 方法相容

升級之前,叢集管理員必須僅停止資源監視器程式。

WHEN_OFFLINE

當新資源類型版本的 UpdateStopMonitor_checkPostnet_stop 方法符合以下情況時使用︰

  • 與舊版本的 Init 方法相容

  • 與舊的資源類型版本的啟動方法 (Prenet_stopStart) 不相容

升級之前,叢集管理員必須先將資源離線。

WHEN_DISABLED

類似於 WHEN_OFFLINE。然而升級之前,叢集管理員必須停用資源。

WHEN_UNMANAGED

當新的資源類型版本的 Fini 方法與舊版本的 Init 方法不相容時使用。升級之前,叢集管理員必須將現有資源群組切換為未管理狀態。

如果資源類型的某一版本沒有顯示在 #$upgrade_from 指令的清單中,則依預設,RGM 會將 WHEN_UNMANAGED 的可調性強加至該版本。

AT_CREATION

用於防止現有資源升級為資源類型的新版本。叢集管理員必須刪除然後重建資源。

變更 RTR 檔案中的 RT_version

當 RTR 檔案的內容變更時,您僅需變更 RTR 檔案中的 RT_version 特性。為該特性選擇一個值,使其可以清晰表示此資源類型版本為最新版本。

RT_version 字串中以下字元納入 RTR 檔案,否則,資源類型限制將失敗︰

RT_version 特性在 Sun Cluster 3.0 中為可選擇特性,在 Sun Cluster 3.1 中則強制啟動。

舊版 Sun Cluster 中的資源類型名稱

Sun Cluster 3.0 中的資源類型名稱不含有版本字尾,如下所示︰

vendor-id.resource-type

即使在叢集管理員將叢集軟體升級至 Sun Cluster 3.1 或更高版本後,最初在 Sun Cluster 3.0 中註冊的資源類型將繼續具有一個遵循該語法的名稱。同樣地,如果 RTR 檔案是在執行於 Sun Cluster 3.1 及以上版本的叢集上註冊的,則其 RTR 檔案缺少 #$upgrade 指令的資源類型將獲得一個 Sun Cluster 3.0 格式名稱 (不具有版本字尾)。

叢集管理員可以透過使用 Sun Cluster 3.0 中的 #$upgrade 指令或 #$upgrade_from 指令註冊 RTR 檔案。然而,不支援將現有資源升級為 Sun Cluster 3.0 中新的資源類型。

叢集管理員升級時的情況

以下說明了叢集管理員升級資源類型時必須做的工作或升級時的情況︰


備註 –

當在 Sun Cluster 3.0 中建立的資源升級為 Sun Cluster 的更高版本時,這些資源將不會從資源類型繼承新的預設資源特性屬性。此限制僅套用至從 Sun Cluster 3.0 叢集升級至 Sun Cluster 3.1 的叢集。叢集管理員可以透過指定特性的值並置換預設值,從而克服此限制。


實作資源類型監視器程式碼

叢集管理員可以註冊 Sun Cluster 3.0 中支援升級的資源類型。但是,Sun Cluster 將記錄不具有版本字尾的資源類型名稱。若要在 Sun Cluster 3.0 和 Sun Cluster 3.1 中正確執行,此資源類型的監視器程式碼必須能夠處理二者的命名慣例︰

vendor-id.resource-type:rt-version
vendor-id.resource-type

資源類型名稱的格式說明資源類型名稱的格式。

叢集管理員無法以兩個不同的名稱對資源類型的同一版本註冊兩次。若要啟用監視器程式碼確定正確的名稱,請呼叫監視器程式碼中的以下指令︰

scha_resourcetype_get -O RT_VERSION -T VEND.myrt
scha_resourcetype_get -O RT_VERSION -T VEND.myrt:vers

然後,將輸出值與 vers 進行比較。對於 vers 的特定的值,這些指令中僅有一個指令會成功。

確定安裝需求和封裝

確定資源類型套裝軟體的安裝需求和封裝時,請牢記以下兩個需求︰

若要確定要使用的正確封裝,請考量以下問題︰

這些問題的答案有助於確定新資源類型要使用的正確封裝。

變更 RTR 檔案之前

修改資源類型時,您無須建立新方法或監視器程式碼。例如,您可能僅變更資源特性的預設值或可調性。在此實例中,由於您不變更方法程式碼,您僅需要可讀 RTR 檔案之新的有效路徑名稱。

如果您無須重新註冊舊的資源類型,則新的 RTR 檔案可以覆寫先前的版本。否則,請將新的 RTR 檔案放入新路徑。

如果升級會變更特性的預設值或可調性,請使用資源類型新版本的 Validate 方法以驗證現有的特性屬性對於新資源類型有效。如果現有特性屬性對於新資源類型無效,則叢集管理員可以將現有資源的特性變更為正確的值。如果升級會變更特性的 minmaxtype 屬性,則當叢集管理員升級資源類型時,scrgadm 指令將自動驗證這些限制。

如果升級會增加新特性或刪除舊特性,您可能需要變更回呼方法或監視器程式碼。

變更監視器程式碼

如果您僅變更資源類型的監視器程式碼,則安裝套裝軟體時可能覆寫監視器二進位程式碼。

變更方法程式碼

如果在資源類型中僅變更方法程式碼,您必須確定新的方法程式碼是否與舊的方法程式碼相容。此問題的答案將確定新方法程式碼是必須儲存於新路徑還是可以覆寫舊方法。

如果您可以將新的 StopPostnet_stopFini 方法 (如果已宣告) 套用至已初始化的資源或由舊版本的 StartPrenet_stopInit 方法啟動的資源,則可以使用新方法覆寫舊方法。

如果將新的預設值套用至特性會導致 StopPostnet_stopFini 等方法失敗,叢集管理員必須在資源類型升級後,相應地限制資源狀態。

資源類型升級之後,您可以讓叢集管理員透過限制 Type_version 特性的可調性來限制資源狀態。

一種封裝方法是將仍支援的資源類型所有舊版本納入套裝軟體中。此方法允許套裝軟體的新版本替代套裝軟體的舊版本,而不會覆寫或刪除方法的舊路徑。您必須決定要支援的舊版本的數量。

確定要使用的封裝方案

下表概述了要用於新的資源類型之封裝方案。

表 4–1 確定要使用的封裝方案

變更類型 

可調性值 

封裝方案 

僅在 RTR 檔案中進行特性變更。 

ANYTIME

僅傳送新的 RTR 檔案。 

更新方法。 

ANYTIME

將更新的方法放入與舊方法不同的路徑。 

安裝新的監視器程式。 

WHEN_UNMONITORED

僅覆寫監視器的舊版本。 

更新方法。 

新的 UpdateStop 方法與舊的 Start 方法不相容。

WHEN_OFFLINE

將更新的方法放入與舊方法不同的路徑。 

更新方法,並將新特性增加到 RTR 檔案。新方法需要新特性。 

目標是如果資源群組在某節點上從離線狀態轉為線上狀態,則允許所在資源群組保持線上狀態,但阻止資源處於線上狀態。 

WHEN_DISABLED

覆寫舊版方法。 

更新方法,並將新特性增加到 RTR 檔案。新方法不需要新特性。 

ANYTIME

覆寫舊版方法。 

更新方法。新的 Fini 方法與舊的 Init 方法不相容。

WHEN_UNMANAGED

將更新的方法放入與舊方法不同的路徑。 

更新方法。未對 RTR 檔案進行任何變更。 

不適用。未對 RTR 檔案進行任何變更。 

覆寫舊版方法。由於您未對 RTR 檔案進行變更,資源無需註冊或升級。 

為修改的資源類型提供的文件

「Sun Cluster Data Services Planning and Administration Guide for Solaris OS」中的「Upgrading a Resource Type」提供了叢集管理員如何升級資源類型的說明。若要讓叢集管理員升級修改的資源類型,請將這些說明以及本節說明的附加資訊結合起來。

通常,建立新的資源類型時,您需要提供包含以下內容的文件︰

有關安裝升級版本前所做準備之資訊

叢集管理員在節點上安裝升級套裝軟體前必須進行的準備工作,如下所示︰

有關何時升級資源之資訊

對叢集管理員解釋何時可以將資源升級至資源類型的新版本。叢集管理員在何種條件下可以升級資源類型,將視 RTR 檔案中資源各個版本的 #$upgrade_from 指令之可調性而定,如下所示︰


範例 4–2 #$upgrade_from 如何定義當叢集管理員可以升級的條件

此範例將顯示 #$upgrade_from 指令的可調性如何影響叢集管理員可以將資源升級為資源類型之新版本的條件。

#$upgrade_from   "1.1"   WHEN_OFFLINE
#$upgrade_from   "1.2"   WHEN_OFFLINE
#$upgrade_from   "1.3"   WHEN_OFFLINE
#$upgrade_from   "2.0"   WHEN_UNMONITORED
#$upgrade_from   "2.1"   ANYTIME
#$upgrade_from   ""      WHEN_UNMANAGED

版本 

叢集管理員何時可以升級資源 

1.1、1.2 或 1.3 

僅當資源離線時 

2.0 

僅當資源未被監視時 

2.1 

任何時候 

所有其他版本 

僅當資源群組未被管理時 


有關對資源特性變更之資訊

說明對升級時要求叢集管理員修改現有的資源特性之資源類型所做的任何變更。您可能需要進行的變更包含以下各項︰