回到網頁內容 臺灣-繁體中文
HP.com 首頁 產品資訊 支�#169;及驅動程式 解決方案 如何購買
» 聯絡 HP
進階選項
HP.com 首頁
以 ServiceGuard OPS Edition 規劃 OPS 叢集 > 第 3 章. 認識ServiceGuard OPS Edition軟體元件

套件控制命令集運作方式

» 

技術文件

PDF 格式的完整書籍
» 回饋意見
內容©韟像B開©l

 » 目錄

 » 索引

套件是ServiceGuard啟動和中止已配置的應用程式之方法。在ServiceGuard中,套件亦是故障轉移行為的單元。套件是由ServiceGuard管理的服務、磁碟容體和IP位址的集合,來確定它們的可用性。每個叢集最多可以有60個套件,且每個叢集可以有900個服務。

套件如何執行?

若套件目前沒有在執行,便會啟動,套件管理員檢測到它已在叢集的某適當的節點上啟動。如果套件在數個節點上啟動,則套件管理員會使用故障轉移規則來決定由何處啟動套件。請注意,您不需使用cmrunpkg命令。在許多狀況下,最好的啟動套件方式是用cmmodpkg命令使套件在一個或多個節點上啟動。

套件管理員會一直試著繼續執行套件,除非有某種因素阻止套件在任何節點上執行。套件無法執行的最普遍原因是AUTO_RUN未啟動,或特殊節點上的套件未啟動NODE_SWITCHING。當套件在一個節點上失效,然後在另一個節點上啟動時,套件將會在新的位置上自動啟動。這樣的程序就是所謂的套件切換,也就是遠端切換

當您建立套件時,您要指定套件可以執行的節點清單。標準套件一次只能在一個節點上執行,然後在節點清單中的下一個可用節點上執行。套件能在叢集啟動時自動啟動,如果AUTO_RUN 參數設定為YES。相反地,AUTO_RUN 設定為 NO 的套件在叢集啟動時將不會自動啟動,您必須使用 cmmodpkg 命令明確地使這種套件啟動。

附註: 如果您在叢集執行中時配置套件,在cmapplyconf 命令完成後,套件不會立即啟動。若要在沒有中止和重新啟動叢集的狀況下啟動套件,您必須執行cmrunpkgcmmodpkg 命令。

套件如何啟動,以及其在執行時的行為為何?圖 3-13 「顯示重要事件的套件時序線」中顯示套件生命週期的許多階段中的其中幾個。

圖 3-13 顯示重要事件的套件時序線

顯示重要事件的套件時序線

下列為套件生命週期中最重要的時刻:

  1. 在控制命令集啟動前

  2. 在執行run命令集期間

  3. 服務執行中

  4. 當服務、子網路或監視資源失效時

  5. 在halt命令集執行期間

  6. 當套件或節點因某個命令而中止時

  7. 當節點失效時

在控制命令集啟動前

首先,選取一個節點。這個節點必須是在套件的節點清單中,它必須符合套件故障轉移規則,而且在選定節點上必須具有套件所需的任何資源。其中一個資源是監視套件的子網路。如果子網路無法使用,則套件不能在這個節點上啟動。另一種型態的資源與監視的外部資源有依存關係。如果監視過程顯示的配置資源的值超出許可範園,則套件無法啟動。

一旦選定節點,便會檢查套件確實能在節點上啟動。然後在選定節點上,由控制命令集為套件啟動服務。嚴格來說,選定節點上的run命令集通常被用來啟動套件。

執行run命令集期間

一旦套件管理員決定套件能在特定的節點上啟動後,它便啟動run命令集(亦即,用start參數執行控制命令集)。該命令集執行下列的步驟(如圖 3-14 「執行run命令集的套件時序線」所示):

  1. 啟動容體群組。

  2. 裝載檔案系統。

  3. 在節點上指定套件IP位址給LAN卡。

  4. 執行任何自行定義的run命令。

  5. 啟動每一個套件服務。

  6. 啟動套件需要的任何資源,特別是標記為延遲的啟動。

  7. 以結束碼0作結束。

圖 3-14 執行run命令集的套件時序線

執行run命令集的套件時序線

在任何相關步驟中,錯誤會導致命令集不正常結束 (傳回結束碼1)。例如,套件服務如果無法啟動,則控制命令集將會以錯誤結束。

而且,如果run命令集執行在RUN_SCRIPT_TIMEOUT指定的時間內沒有完成,則套件管理員會將這命令集殺掉。在run命令集執行期間,訊息會被寫入一個和run命令集同一目錄下的日誌檔中。這個日誌檔和run命令集有相同檔名,副檔名為.log。正常的啟動會記錄在日誌檔中,而錯誤訊息或啟動套件時的警告也記錄在其中。

附註: 套件run命令集完成它的工作後,就會退出,那表示一旦套件正常執行,命令集就不再執行。命令集結束後,由命令集啟動的服務的PID會直接由套件管理員監視。如果服務停止,套件管理員便會執行套件halt命令集,或是如果SERVICE_FAILFAST_ENABLED設定為YES,便會中止執行套件的節點。如果在套件控制命令集中為服務指定一些重新啟動(restart),在重新啟動計數器允許的情況下,服務可能會重新啟動,不用重新執行套件run命令集。

run命令集正常和不正常結束

run命令集結束後的結束碼決定套件的下個動作。正常的結束表示套件啟動成功,而其他結束表示啟動作業沒有順利完成。

  • 0 - 正常結束。套件正常的啟動,所以所有服務都在這個節點啟用。

  • 1 - 不正常結束,即所謂的 NO_RESTART結束。套件沒有正常的完成所有啟動步驟。服務會被殺掉,而且套件沒有故障轉移到其他節點。

  • 2 - 替代結束,即所謂的 RESTART結束。有錯誤發生,但允許套件在另一個節點上啟動。如果有錯誤,您可能會在自行定義的程序使用這種結束的方式,但在其他節點啟動可能會成功。以 RESTART結束的套件無法在本機節點上執行,但仍能在其他節點執行。

  • 逾時 - 另一種結束的型式,當 RUN_SCRIPT_TIMEOUT所設定的時間到達時。在這個情況下,套件會被殺掉,而且是全域性地停用。但不是在目前的節點上停用。

使用cmrunserv啟動服務

在套件控制命令集中,cmrunserv命令啟動個別的服務。檔案中編寫的每項服務都會執行這個命令一次。每項服務都有一個重新啟動的計數。cmrunserv命令將這個數字傳給套件管理員,如果此項服務失效的話,就會以適當的次數重新啟動此項服務。下面是一些典型的設定:

SERVICE_RESTART[0]=" " ; 不重新啟動

SERVICE_RESTART[0]="-r <n>" ; 重新啟動<n>�/para>

SERVICE_RESTART[0]="-R" ; 一直重新啟動

附註: 如果您設定了重新啟動的次數,而又將SERVICE_FAILFAST_ENABLED 設定成YES,則failfast將會在所有重新啟動嘗試失效後發生。將服務的 SERVICE_ RESTART 設定成 -R,而將SERVICE_FAILFAST_ENABLED設定成YES沒有意義的。

服務執行中時

在正常的叢集服務運作期間,套件管理員將持續監視以下各項:

  • 服務的程序識別碼

  • 在套件配置檔中為監視而配置的子網路

  • 套件所依存的配置資源。

有些失效會導致本機切換。例如,在特定的LAN卡上若發生故障,而該子網路有已配置的備用LAN,那麼「網路管理員」就會切換到正常的LAN卡。如果有某項服務失效,但此項服務的RESTART參數設成大於0的值,則此項服務就會重新啟動而不會停止這個套件,一直到所配置的重新啟動次數為止。

若有相依的已配置EMS資源,和會導致事件發生的觸發源,套件便會中止。

在正常運作期間,當所有服務在執行時,您可以在cmviewcl命令輸出的Script Parameters這一段查閱服務的狀態。

當服務、子網路,或監視資源失效時

當有錯誤時,會發生什麼事?如果服務失效且不能重新啟動,或子網路失效且沒有備用,或配置的資源失效時,則套件將會在它目前的節點中止,而且會根據套件切換旗標的設定而在另一個節點重新啟動。

套件中止通常表示套件halt命令集有在執行(請參閱下一節的說明)。然而,失效服務的SERVICE_FAILFAST_ENABLED若設為「YES」,那麼節點將會在偵測到故障時馬上停止。如果這個旗標沒有設定,遺失的服務將會導致套件因執行halt命令集而慢慢地中止。

如果AUTO_RUN設定為YES,套件將會在另一個適當的節點啟動,如果此節點符合啟動的所有需求的話。如果AUTO_RUN設定為NO,那麼套件只會中止,不會在其他地方啟動。

附註: 套件若相依在子網路,且在主要節點上的該子網路故障時,則套件即將會關閉。子網路若是立即回復 (於套件在承接節點上重新啟動之前),套件便會在主要節點上重新啟動。因而在此情況下,套件不會切換至叢集中的另一個節點。

當套件因命令而中止時

ServiceGuard cmhaltpkg 命令能執行套件halt命令集,此命令會中止特定套件服務的執行。如此一來,套件便會慢慢地停止,之後即停用所有節點上套件的切換。

附註: 如果cmhaltpkg命令是配合 -n <nodename> 選項下達,那麼只有在該節點上執行時,套件才會中止。

cmmodpkg命令無法用來中止套件,但是它會取消特定節點或所有節點上的切換功能。當切換功能被停用時,套件能繼續執行,但如果它在目前的節點上停止執行的話,將不能在其他節點上啟動。

在執行halt命令集期間

一旦套件管理員偵測到服務失效,或是當特定的套件已下達cmhaltpkg命令,便會開始執行halt命令集(亦即,以halt參數執行的控制命令集)。這個命令集執行下列的步驟(如圖 3-15 「halt命令集執行的套件時序線」所示):

  1. 中止之前啟動的任何延遲資源。

  2. 中止所有套件服務。

  3. 執行自行定義的halt命令。

  4. 在節點上移除LAN卡的套件IP位址。

  5. 卸載檔案系統。

  6. 停用容體群組。

  7. 以結束碼0作結束。

圖 3-15 halt命令集執行的套件時序線

halt命令集執行的套件時序線

在任何相關步驟中,錯誤會導致命令集不正常結束(傳回結束碼1)。而且如果在HALT_SCRIPT_TIMEOUT指定的時間內halt命令集沒有完成,套件管理員將會殺掉這個命令集。在執行halt命令集期間,訊息會寫入與halt命令集相同目錄下的日誌檔。這個日誌檔有著和halt命令集相同的檔名和.log附檔名。正常的啟動以及與中止套件時相關的錯誤訊息或警告,會被記錄在日誌檔中。

halt命令集的正常和不正常結束

套件轉移到其他節點的能力,會受到離開halt命令集時結束狀況的影響。下面列出可能的結束碼:

  • 0 - 正常結束。套件正常的中止,所以所有在這節點上的服務均停止。

  • 1 - 不正常結束,即所謂的 NO_RESTART結束。套件不正常中止。服務被殺掉,套件在全域和本機皆被停用。

  • 2 - 替代結束,即所謂的 RESTART結束。有錯誤發生,但允許套件在另一個節點上啟動。它不是全域性地停用。如果有錯誤產生,您可能會在自行定義的自訂程序使用這種結束方式,但允許套件在另一個節點上啟動。以 RESTART結束的套件,在本機停用,但不是全域性地停用。

  • 逾時 - 另一種結束的方式,過了 HALT_SCRIPT_TIMEOUT時間即會發生。在這個情況下,套件會被殺掉,而且是全域性地停用。但不是在目前的節點上停用。

套件控制命令集錯誤和結束狀況

表3-4顯示錯誤狀況的可能組合、Failfast 設定和故障轉移套件的移動。

表 3-4 錯誤狀況和套件移動

套件錯誤狀況

結果

錯誤或結束碼已啟用節點Failfast已啟用服務Failfast錯誤發生後主要節點上的HP-UX狀態錯誤發生或結束後執行halt命令集錯誤發生後允許套件在主要節點上執行允許套件在替代的節點上執行
服務失效YESYESTOCNoN/A (TOC)Yes
服務失效NOYESTOCNoN/A (TOC)Yes
服務失效YESNO執行中YesNoYes
服務失效NONO執行中YesNoYes
run命令集結束 1任一設定任一設定執行中No未變更No
run命令集結束 2YES任一設定TOCNoN/A (TOC)Yes
run命令集結束 2NO任一設定執行中NoNoYes
run命令集逾時YES任一設定TOCNoN/A (TOC)Yes
run命令集逾時NO任一設定執行中No未變更No

halt命令集結束 1YES任一設定執行中N/AYesNo
halt命令集結束 1NO任一設定執行中N/AYesNo
halt命令集逾時YES任一設定TOCN/AN/A (TOC)Yes
除非在
cmhaltpkg命
令執行後發生逾時。
halt命令集逾時NO任一設定執行中N/AYesNo
服務失效任一設定YESTOCNoN/A (TOC)Yes
服務失效任一設定NO執行中YesNoYes
網路中斷YES任一設定TOCNoN/A (TOC)Yes
網路中斷NO任一設定執行中YesYesYes
失去監視資源YES任一設定TOCNoN/A (TOC)Yes

失去監視資源NO任一設定執行中YesYes
如果此資源不是延遲資源。如果此為延遲資源,則為No。
Yes

 

可列印版本
隱私權聲明 使用範圍與著作權聲明
© Hewlett-Packard Development Company, L.P.