Sun Cluster 3.0 5/02 增補

附錄 F 一般資料服務

本附錄提供一般資料服務 (GDS) 的相關資訊,並展示使用 SunPlex Agent Builder 或標準 Sun Cluster 管理指令,建立使用 GDS 的服務的方式。

一般資料服務概述

一般資料服務 (GDS) 這個機制使用插入「Sun Cluster 資源群組管理」框架的方式,讓簡單型網路警覺應用程式的可用性或可延伸性變高。此機制不需要編寫代理程式碼 (其為讓應用程式的可用性或可延伸性變高的典型方法)。

GDS 是單一且預先編譯的資料服務。在此方法中,預先編譯的資料服務及其元件、回呼方法 (rt_callbacks(1HA)) 的執行與資源類型註冊檔案 (rt_reg(4)),都是不可修改的。

預先編譯的資源類型

一般資料服務資源類型 SUNW.gds 包含在 SUNWscgds 套件中。scinstall(1M) 公用程式會在叢集安裝過程中安裝此套件。此 SUNWscgds 套件包含下列檔案:


# pkgchk -v SUNWscgds
 
/opt/SUNWscgds 
/opt/SUNWscgds/bin 
/opt/SUNWscgds/bin/gds_monitor_check 
/opt/SUNWscgds/bin/gds_monitor_start 
/opt/SUNWscgds/bin/gds_monitor_stop 
/opt/SUNWscgds/bin/gds_probe 
/opt/SUNWscgds/bin/gds_svc_start 
/opt/SUNWscgds/bin/gds_svc_stop 
/opt/SUNWscgds/bin/gds_update 
/opt/SUNWscgds/bin/gds_validate 
/opt/SUNWscgds/etc 
/opt/SUNWscgds/etc/SUNW.gds

為何使用 GDS

GDS 透過使用 SunPlex Agent Builder 產生的原始碼模型 (請參閱 scdscreate(1HA)) 或標準 Sun Cluster 管理指令,得到下列好處:

使用 GDS 建立服務的方法

使用 GDS 建立服務的方法有兩種:

GDS 與 SunPlex Agent Builder

使用 SunPlex Agent Builder 並選取 GDS 作為產生的原始碼類型。使用者輸入可用來產生一組負責配置給定應用程式的資源的驅動程序檔。

GDS 與標準 Sun Cluster 管理指令

此方法使用 SUNWscgds 中預先編譯的資料服務程式碼,但會要求系統管理員使用標準 Sun Cluster 管理指令 (scrgadm(1M) 與 scswitch(1M)) 來建立和配置資源。

如何選取用來建立 GDS 型服務的方法

"標準 Sun Cluster 管理指令使用 GDS 建立高可用性的服務""標準 Sun Cluster 管理指令使用 GDS 建立可延伸的服務" 中所示的程序,要發出適當的 scrgadmscswitch 指令,需要進行大量的輸入動作。

使用 GDS 與 SunPlex Agent Builder,可簡化過程,因為它會產生發出 scrgadmscswitch 指令的驅動程序檔。

何時不適用 GDS

使用 GDS 是有許多好處沒錯,但也有不適用 GDS 的時候。GDS 不適用於:

GDS 強制輸入

必須提供下列屬性:

Start_command

Start_command 屬性指定的 start (啟動) 指令,會啟動應用程式。它必須是一個具有可直接傳送到 Shell 以啟動應用程式的引數的完整 UNIX 指令。

Port_list

Port_list 會辨識應用程式聆聽之通訊埠的清單。Port_list 屬性必須在 SunPlex Agent Builder 建立的啟動程序檔上指定;如果使用標準 Sun Cluster 管理指令,則在 scrgadm 指令上指定。

GDS 選擇性輸入

GDS 的選擇性輸入包括:

Network_resources_used

此屬性的預設值為 Null。如果應用程式需要連結一個或多個特定位址,則必須指定此屬性。如果此屬性被省略或指定為 Null,應用程式就須聆聽所有的位址。

建立 GDS 資源之前,必須先配置 LogicalHostnameSharedAddress 資源。請參閱 Sun Cluster 3.0 12/01 Data Services Installation and Configuration Guide,以取得有關如何配置 LogicalHostnameSharedAddress 資源的資訊。

若要指定數值,可指定一個或多個資源名稱;每一個資名稱可包含一或多個邏輯主機名稱或共用位址。詳細資料請參閱 r_properties(5)。

Stop_command

stop 指令必須停止應用程式,只有在應用程式已經完全停止之後才傳回。它必須是一個可直接傳送到 Shell 以停止應用程式的完整 UNIX 指令。

如果有提供 Stop_command,則 GDS stop 方法會在 80% 的 stop 等待時間啟動 stop 指令。不管啟動 stop 指令的結果為何,GDS stop 方法會在 15% 的 stop 等待時間送出 SIGKILL。剩下的 5% 時間則保留給事務管理的額外負荷之用。

如果 stop 指令被省略,GDS 會試圖使用 Stop_signal 指定的訊號來停止應用程式。

Probe_command

probe 指令會週期性地檢查給定應用程式的運作狀況。它必須是一個具有可直接傳送到 Shell 以探測應用程式的引數的完整 UNIX 指令。如果應用程式正常,probe 指令會傳回 0 的結束狀態。

probe 指令的結束狀態可用來判定應用程式的故障嚴重狀況。此結束狀態稱為探測狀態,其必須是一個介於 0 (成功) 與 100 (完全故障) 之間的整數。此探測狀態也可以是 201 特殊值,這個值會致使應用程式立即故障轉移,除非 Failover_enabled 設定成 false。探測狀態用在 GDS 探測演算法中 (請參閱 scds_fm_action(3HA)),可決定要在本機重新啟動應用程式,或轉移至另一個節點。 如果結束狀態為 201,應用程式會即刻故障轉移。

如果 probe 指令被省略,GDS 會提供自己的簡單探測功能,連接位於一組得自 Newtork_resources_used 屬性或 scds_get_netaddr_list(3HA) 輸出的 IP 位址的應用程式。如果連接成功,便會立即中斷。如果連接和中斷都順利完成,應用程式會被視為運作良好。


註解 -

和 GDS 一起提供的探測功能,只用來取代正常運作的應用程式的特定探測功能。


Start_timeout

此屬性會指定 start 指令的啟動等待時間 (如需額外資訊,請參閱 "Start_command")。Start_timeout 的預設值為 300 秒。

Stop_timeout

此屬性會指定 stop 指令的停止等待時間 (如需額外資訊,請參閱 "Stop_command")。Stop_timeout 的預設值為 300 秒。

Probe_timeout

此屬性會指定 probe 指令的等待時間值 (如需額外資訊,請參閱 "Probe_command")。Probe_timeout 的預設值為 30 秒。

Child_mon_level

此屬性控制哪些程序由 PMF 監視。它會指定叉狀子程序被監視到哪個層級。這與 pmfadm (1M) 指令的 -C 引數類似。

省略此屬性或將它設定成預設值 -1,與在 pmfadm 指令省略 -C 選項的效果相同;亦即,所有子程序 (及其子項) 都會受到監視。詳細資訊請參閱 pmfadm(1M) 線上援助頁。


註解 -

此選項只能用標準 Sun Cluster 管理指令來指定。如果正使用 SunPlex Agent Builder,則無法指定此選項。


Failover_enabled

此布林值延伸屬性控制資源的故障轉移行為。如果此延伸屬性設定成 true,當重新啟動的數目在 retry_interval 秒之內超出 retry_count,則應用程式會故障轉移。

如果此延伸屬性設定成 false,當重新啟動的數目在 retry_interval 秒之內超出 retry_count,則應用程式不會重新啟動或故障轉移至另一個節點。

使用此延伸屬性可預防應用程式資源起始資源群組的故障轉移。預設值為 true

Stop_signal

GDS 使用此整數的延伸屬性值判斷用於透過 PMF停止應用程式的訊號。如需可指定的整數值清單,請參閱 signal(3head)。預設值為 15 (SIGTERM)。

使用 SunPlex Agent Builder 建立使用 GDS 的服務

使用 SunPlex Agent Builder 可以建立使用 GDS 的服務。關於 SunPlex Agent Builder 與欄位的定義,請參閱 Sun Cluster 3.0 12/01 Data Services Installation and Configuration Guide

在 Agent Builder 使用 GDS 建立服務

  1. 帶出 SunPlex Agent Builder。


    # /usr/cluster/bin/scdsbuilder
    

  2. 出現 SunPlex Agent Builder面板。

    Graphic
  3. 輸入 [Vendor Name]。

  4. 輸入 [Application Name]。


    註解 -

    「廠商名稱」與「應用程式名稱」的組合不可超過九個字元。它會被當成驅動程序檔的套件名稱來使用。


  5. 輸入 [Working Directory]。您可以使用 [Browse] 下拉式功能表選取目錄,而不用輸入路徑。

  6. 選取資料服務是否可延伸或故障轉移。

  7. 不需要選取 [Network Aware],因為建立 GDS 時便是預設為 [Network Aware]。

  8. 選取 GDS。

  9. 按一下 [Create] 按鈕以建立驅動程序檔。

  10. SunPlex Agent Builder 面板會顯示建立服務的結果。[Create] 按鈕會變成灰色,此時便可使用 [Next] 按鈕。

    Graphic

配置驅動程序檔

在建立驅動程序檔之後,需要使用 SunPlex Agent Builder 配置新的服務。

  1. 按一下 [Next] 按鈕,出現配置面板。

  2. 輸入 Start 指令的位置,或使用瀏覽按鈕找出 Start 指令的位置。

  3. (選擇性的) 輸入 Stop 指令,或使用瀏覽按鈕找出 Stop 指令的位置。

  4. (選擇性的) 輸入 Probe 指令,或使用瀏覽按鈕找出 Probe 指令的位置。

  5. (選擇性的) 指定 Start、Stop、Probe 指令的逾時值。

  6. 按一下 [Configure] 以開始配置驅動程序檔。

    驅動程序檔的套件會被建立並放置於:


    working-dir/<vendor_name><application>/pkg

    例如 /export/wdir/NETapp/pkg


    註解 -

    套件名稱是 [廠商名稱] (Vendor Name) 與 [應用程式名稱] (Application Name) 的連結。


  7. 在叢集所有節點上安裝完成的套件。


    # cd /export/wdir/NETapp/pkg
    # pkgadd -d .NETapp
    

  8. 在 pkgadd 期間將安裝下列檔案:


    /opt/NETapp 
    /opt/NETapp/README.app 
    /opt/NETapp/man 
    /opt/NETapp/man/man1m 
    /opt/NETapp/man/man1m/removeapp.1m 
    /opt/NETapp/man/man1m/startapp.1m 
    /opt/NETapp/man/man1m/stopapp.1m 
    /opt/NETapp/man/man1m/app_config.1m 
    /opt/NETapp/util 
    /opt/NETapp/util/removeapp 
    /opt/NETapp/util/startapp 
    /opt/NETapp/util/stopapp 
    /opt/NETapp/util/app_config


    註解 -

    線上援助頁與程序檔名稱將對應於上述所輸入的 [應用程式名稱] (Application Name),程序檔名稱會出現在應用程式名稱之前。 例如 startapp


    若要檢視線上援助頁,您需要指定到援助頁的路徑。例如,若要檢視 startapp 線上援助頁,可使用:


    # man -M /opt/NETapp/man startapp
    

  9. 在叢集節點上,配置資源並啟動應用程式。


    # /opt/NETapp/util/startapp -h <logichostname> -p <port and protocol list>
    

    依據資源類型,start (啟動) 程序檔的引數會有所不同:故障轉移或可延伸。檢查自訂的線上援助頁,或執行沒有引數的 start (啟動) 程序檔以取得用法敘述。


    # /opt/NETapp/util/startapp 
     The resource name of LogicalHostname or SharedAddress must be specified.
     For failover services: 
     Usage: startapp -h <logical host name> 
               -p <port and protocol list> 
              [ -n <nafogroup/adapter list>] 
     For scalable services: 
     Usage: startapp 
              -h <shared address name> 
              -p <port and protocol list> 
              [ -l <load balancing policy>] 
              [-n <nafogroup/adapter list>] 
               [-w <load balancing weights>]

SunPlex Agent Builder 的輸出

SunPlex Agent Builder 產生三個驅動程序檔和根據您的輸入產生的配置檔。配置檔會指定資源群組與資源類型的名稱。

驅動程序檔為:

這些驅動程序檔擁有和 SunPlex Agent Builder為 非 GDS 型代理程式產生的公用程式程序檔相同的介面及行為。程序檔會封裝在可在多個叢集上重複使用的 Solaris 可安裝套件中。

您可以自訂配置檔案,提供自己的資源群組名稱或通常輸入至 scrgadm 指令的參數。如果您不自訂程序檔,SunPlex Agent Builder 會為 scrgadm 指令提供合理的預設值。

使用標準 Sun Cluster 管理指令建立使用 GDS 的服務

本節說明如何將上述參數實際輸入 GDS。以現有的 Sun Cluster 管理指令如 scrgadmscswitch,使用與管理 GDS。

如果驅動程序檔提供足夠的功能,就不需要輸入本節所示之較低層級管理指令。然而,如果要更嚴密控制 GDS 型資源,便可以這麼做。這裡有一些實際由驅動程序檔所執行的指令。

標準 Sun Cluster 管理指令使用 GDS 建立高可用性的服務
  1. 註冊 SUNW.gds 資源類型。


    # scrgadm -a -t SUNW.gds
    

  2. 建立包含 LogicalHostname 資源與故障轉移服務本身的資源群組。


    # scrgadm -a -g haapp_rg
    

  3. 建立 LogicalHostname 資源的資源。


    # scrgadm -a -L -g haapp_rs -l hhead
    

  4. 建立故障轉移服務本身的資源。


    # scrgadm -a -j haapp_rs -g haapp_rg -t SUNW.gds \
         -y Scalable=false -y Start_timeout=120 \
         -y Port_list="2222/tcp" \
         -x Start_command="/export/ha/appctl/start" \
         -x Stop_command="/export/ha/appctl/stop" \
         -x Probe_command="/export/app/bin/probe" \
         -x Child_mon_level=0 -y Network_resources_used=hhead \
         -x Failover_enabled=true -x Stop_signal=9
    

  5. haapp_rg 資源群組上線運作。


    # scswitch -Z -g haapp_rg
    

標準 Sun Cluster 管理指令使用 GDS 建立可延伸的服務
  1. 註冊 SUNW.gds 資源類型。


    # scrgadm -a -t SUNW.gds
    

  2. 建立 SharedAddress 資源的資源群組。


    # scrgadm -a -g sa_rg
    

  3. sa_rg 建立 SharedAddress 資源。


    # scrgadm -a -S -g sa_rg -l hhead
    

  4. 建立可延伸服務的資源群組。


    # scrgadm -a -g app_rg -y Maximum_primaries=2 \
    -y Desired_primaries=2 -y RG_dependencies=sa_rg
    

  5. 建立可延伸服務本身的資源群組。


    # scrgadm -a -j app_rs -g app_rg -t SUNW.gds \
         -y Scalable=true -y Start_timeout=120 \
         -y Stop_timeout=120 -x Probe_timeout=120 \
         -y Portlist="2222/tcp" \
         -x Start_command="/export/app/bin/start" \
         -x Stop_command="/export/app/bin/stop" \
         -x Probe_command="/export/app/bin/probe \
         -x Child_mon_level=0 -y Network_resource_used=hhead \
         -x Failover_enabled=true -x Stop_signal=9
    

  6. 讓包含網路資源的資源群組上線運作。


    # scswitch -Z -g sa_rg
    

  7. app_rg 資源群組上線運作。


    # scswitch -Z -g app_rg
    

SunPlex Agent Builder 的指令行介面

SunPlex Agent Builder 擁有與 GUI 介面相等功能性的指令行介面。此介面包含 scsdcreate(1ha) 與 scdsconfig(1ha) 指令。下一節會執行與 GUI 為主的程序 "" 相同的功能,不過會使用非 GUI 的介面。

使用 SunPlex Agent Builder 之相等指令行功能性來建立使用 GDS 的服務
  1. 建立服務。

    對於故障轉移服務,使用:


    # scdscreate -g -V NET -T app -d /export/wdir
    

    對於可延伸的服務,使用:


    # scdscreate -g -s -V NET -T app -d /export/wdir
    


    註解 -

    -d 參數是選用的。如果未指定這個參數,工作目錄會預設到目前的目錄。


  2. 配置服務。


    # scdsconfig -s "/export/app/bin/start" \
    -t "/export/app/bin/stop" \
    -m "/export/app/bin/probe" -d /export/wdir
    


    註解 -

    只需 start 指令。所有其他參數則均可選用。


  3. 在叢集所有節點上安裝完整的套件。


    # cd /export/wdir/NETapp/pkg
    # pkgadd -d .NETapp
    

  4. 在 pkgadd 期間將安裝下列檔案:


    /opt/NETapp 
    /opt/NETapp/README.app 
    /opt/NETapp/man 
    /opt/NETapp/man/man1m 
    /opt/NETapp/man/man1m/removeapp.1m 
    /opt/NETapp/man/man1m/startapp.1m 
    /opt/NETapp/man/man1m/stopapp.1m 
    /opt/NETapp/man/man1m/app_config.1m 
    /opt/NETapp/util 
    /opt/NETapp/util/removeapp 
    /opt/NETapp/util/startapp 
    /opt/NETapp/util/stopapp 
    /opt/NETapp/util/app_config


    註解 -

    線上援助頁與程序檔名稱將對應於上述所輸入的 [應用程式名稱] (Application Name),程序檔名稱會出現在應用程式名稱之前。 例如 startapp


    若要檢視線上援助頁,您需要指定到援助頁的路徑。例如,若要檢視 startapp 線上援助頁,可使用:


    # man -M /opt/NETapp/man startapp
    

  5. 在叢集節點上,配置資源並啟動應用程式。


    # /opt/NETapp/util/startapp -h <logichostname> -p <port and protocol list>
    

    依據資源類型,start (啟動) 程序檔的引數會有所不同:故障轉移或可延伸。檢查自訂的線上援助頁,或執行沒有引數的 start (啟動) 程序檔以取得用法敘述。


    # /opt/NETapp/util/startapp 
     The resource name of LogicalHostname or SharedAddress must be specified.
     For failover services: 
     Usage: startapp -h <logical host name> 
               -p <port and protocol list> 
              [-n <nafogroup/adapter list>] 
     For scalable services: 
     Usage: startapp 
              -h <shared address name> 
              -p <port and protocol list> 
              [-l <load balancing policy>] 
              [-n <nafogroup/adapter list>] 
               [-w <load balancing weights>]