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

第 10章 一般資料服務

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

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

與使用 SunPlex Agent Builder 產生的來源代碼模型 (請參閱 scdscreate(1HA)) 或標準 Sun Cluster 管理指令相比,GDS 具有以下優勢:

建立使用 GDS 的服務之方式

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

GDS 與 SunPlex Agent Builder

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

GDS 與標準 Sun Cluster 管理指令

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

選取用來建立以 GDS 為基礎的服務之方法

如程序如何使用 Sun Cluster 管理指令建立使用 GDS 的高度可用服務建立使用 GDS 之可延伸服務的標準 Sun Cluster 管理指令中所示,要發出適當的 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,應用程式就須聆聽所有的位址。

建立 GDS 資源之前,必須先配置 LogicalHostnameSharedAddress 資源。 請參閱Sun Cluster Data Services Planning and Administration Guide for Solaris OS,以取得有關如何配置 LogicalHostnameSharedAddress 資源的資訊。

若要指定值,請指定一個或多個資源名稱;每個資源名稱可包含一個或多個 LogicalHostname 或者一個或多個 SharedAddress。 請參閱 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 會提供自己的簡單探測功能,它連接至源自 Network_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 選項效果相同;即所有子系 (及其父系) 將被監視。


註解 –

此選項只能用標準 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 的服務。 在第 9章, SunPlex Agent Builder中將會更詳細地說明 SunPlex Agent Builder。

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

在 Agent Builder 中建立使用 GDS 的服務
  1. 啟動 SunPlex Agent Builder。


    # /usr/cluster/bin/scdsbuilder
    
  2. 出現 SunPlex Agent Builder 面板。

    標題為 SunPlex Agent Builder 顯示主 Agent Builder 畫面的對話方塊
  3. 輸入 [Vendor Name]。

  4. 輸入 [Application Name]。


    註解 –

    「供應商名稱」與「應用程式名稱」的組合不可超過九個字元。 它作為驅動程序檔套裝軟體的名稱使用。


  5. 移至工作目錄。

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

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

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

  7. 選取 GDS。

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

  9. SunPlex Agent Builder 面板會顯示建立服務的結果。 [建立] 按鈕將會變為灰階,您現在可以使用 [下一步] 按鈕。

    顯示輸入資訊後之 [建立] 畫面的對話方塊
配置驅動程序檔

在建立驅動程序檔之後,需要使用 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

  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


    註解 –

    線上援助頁與程序檔名稱將對應於上面輸入的以程序檔名稱開頭的 [應用程式名稱],例如 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 <ipmpgroup/adapter list>] 
     For scalable services: 
     Usage: startapp  
              -h <shared address name> 
              -p <port and protocol list> 
              [-l <load balancing policy>]  
              [-n <ipmpgroup/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 Stop_timeout=120 -x Probe_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
    
建立使用 GDS 之可延伸服務的標準 Sun Cluster 管理指令
  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 Port_list="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 介面等效的功能性。 該介面包含指令 scdscreate(1HA)scdsconfig(1HA)。 下一節會執行與基於 GUI 的程序透過 Agent Builder 的指令行版本建立使用 GDS 的服務相同的函式,但會使用非 GUI 的介面。

透過 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


    註解 –

    線上援助頁與程序檔名稱將對應於上面輸入的以程序檔名稱開頭的 [應用程式名稱],例如 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 <ipmpgroup/adapter list>] 
     For scalable services: 
     Usage: startapp  
              -h <shared address name> 
              -p <port and protocol list> 
              [-l <load balancing policy>]  
              [-n <ipmpgroup/adapter list>] 
              [-w <load balancing weights>]