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

第 10 章 一般資料服務

本章提供了關於通用資料服務 (GDS) 的資訊,並顯示如何建立使用 GDS 的服務。您可以使用 SunPlex Agent Builder 或 Sun Cluster 管理指令建立此服務。

本章涵蓋下列主題:

通用資料服務概念

GDS 是一個透過將簡單支援網路和不支援網路的應用程式插入 Sun Cluster 資源群組管理 (RGM) 架構來使它們具有高可用性或延伸性的機制。 此機制無需編碼資料服務,而通常,您必須執行此作業以使應用程式具有高可用性或可延伸性。

GDS 是單一且預先編譯的資料服務。您無法修改預先編譯的資料服務和其元件、回呼方法 (rt_callbacks) 實作,以及資源類型註冊檔案 (rt_reg)。

本節包含下列主題:

預先編譯的資源類型

通用資料服務資源類型 SUNW.gds 包含在 SUNWscgds 套裝軟體中。scinstall 公用程式會在安裝叢集期間安裝此套裝軟體。請參閱 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 的優勢和劣勢

與使用 Agent Builder 原始碼 (請參閱 scdscreate(1HA) 線上手冊) 或 Sun Cluster 管理指令相比,使用 GDS 具有以下優勢︰

雖然使用 GDS 具有許多優勢,但 GDS 不可用於以下這些情況中︰

建立使用 GDS 的服務之方法

有兩種方式可建立使用 GDS 的服務︰

GDS 與 Agent Builder

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

GDS 與 Sun Cluster 管理指令

此方法使用 SUNWscgds 中預先編譯的資料服務程式碼。然而,叢集管理員必須使用 Sun Cluster 管理指令建立和配置資源。請參閱 scrgadm(1M)scswitch(1M) 線上手冊。

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

若要發佈正確的 scrgadmscswitch 指令,需要的鍵入工作量很大。如需範例,請參閱如何使用 Sun Cluster 管理指令建立使用 GDS 的高度可用服務如何使用 Sun Cluster 管理指令建立使用 GDS 的可延伸服務

GDS 和 Agent Builder 配合使用可簡化程序,因為它會產生發佈 scrgadmscswitch 指令的程序檔。

GDS 如何記錄事件

GDS 可讓您記錄從 GDS 傳送至 GDS 啟動的程序檔的相關資訊。此資訊包含啟動、探測和停止方法的狀態,以及特性變數。您可以使用此資訊診斷程序檔中的問題或錯誤,或將其用於其他用途。

您可以使用Log_level 特性中說明的 Log_level 特性,指定 GDS 要記錄的訊息之層級或類型。您可以指定 NONEINFOERR

GDS 日誌檔

以下兩個 GDS 記錄檔位於目錄 /var/cluster/logs/DS/resource-group-name/resource-name 中︰

以下範例顯示了 start_stop_log.txt 包含的資訊類型︰

10/20/2005 12:38:05 phys-node-1 START-INFO> Start succeeded. [/home/brianx/sc/start_cmd]
10/20/2005 12:42:11 phys-node-1 STOP-INFO> Successfully stopped the application

以下範例顯示了 probe_log.txt 包含的資訊類型︰

10/20/2005 12:38:15 phys-node-1 PROBE-INFO> The GDS monitor (gds_probe) has been started
10/20/2005 12:39:15 phys-node-1 PROBE-INFO> The probe result is 0
10/20/2005 12:40:15 phys-node-1 PROBE-INFO> The probe result is 0
10/20/2005 12:41:15 phys-node-1 PROBE-INFO> The probe result is 0

必需的 GDS 特性

如果您的應用程式為支援網路型,您必須提供 Start_command 延伸特性和 Port_list 特性。如果您的應用程式為不支援網路型,則您必須僅提供 Start_command 延伸特性。

Start_command 延伸特性

Start_command 延伸特性中指定的啟動指令將啟動應用程式。 此指令必須是一個可以直接傳送至 Shell 以啟動應用程式的具有引數的 UNIX 指令。

Port_list 特性

Port_list 特性識別應用程式偵聽的連接埠清單。Port_list 特性必須在 Agent Builder 建立的啟動程序檔中指定,或如果您正在使用 Sun Cluster 管理指令,則使用 scrgadm 指令指定。

可選擇的 GDS 特性

可選擇的 GDS 特性包含系統定義的特性延伸特性。系統定義的特性是 Sun Cluster 提供的標準特性集。在 RTR 檔案中定義的特性稱為延伸特性。以下為可選擇的 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 特性

停止指令必須停止應用程式,並僅在應用程式完全停止後傳回。 此指令必須是一個可以直接傳送至 Shell 以停止應用程式的完整 UNIX 指令。

如果提供了 Stop_command 延伸特性,則 GDS 停止方法將啟動具有 80% 停止逾時的停止指令。不管啟動停止指令的結果如何,GDS 停止方法將使用 15% 的停止逾時時間傳送 SIGKILL。剩餘的 5% 時間則為事務性工作的經常性耗用時間。

如果省略了停止指令,GDS 將嘗試使用 Stop_signal 中指定的訊號停止應用程式。

Probe_command 特性

探測指令會定期地檢查給定應用程式的運作狀態。此指令必須是一個可以直接傳送至 Shell 以探測應用程式的具有引數的 UNIX 指令。如果應用程式正確執行,則探測指令將在 0 的結束狀態下傳回。

探測指令的結束狀態用於確定應用程式失敗的嚴重性。此結束狀態稱為探測狀態,必須是一個介於 0 (成功) 與 100 (完全失敗) 之間的整數。探測狀態也可是一個為 201 的特殊值,其可導致應用程式立即容錯移轉,除非 Failover_enabled 設定為 FALSE。GDS 探測演算法使用探測狀態確定是否本機重新啟動應用程式或容錯移轉。請參閱 scds_fm_action(3HA) 線上手冊,以取得更多資訊。如果結束狀態為 201,應用程式會立即進行防故障備用。

如果省略了探測指令,GDS 將提供其自己的簡單探測。此探測連接至 IP 位址集上的應用程式,該位址集從 Network_resources_used 特性或從 scds_get_netaddr_list() 函數的輸出中取得。請參閱 scds_get_netaddr_list(3HA) 線上手冊,以取得更多資訊。如果連接成功,則將立即中斷連接。如果連接與中斷連接均成功,則應用程式被視為執行良好。


備註 –

GDS 提供的探測僅是功能完整的、針對應用程式的探測之簡單取代。


Start_timeout 特性

此特性將指定啟動指令的啟動逾時。請參閱Start_command 延伸特性,以取得附加資訊。Start_timeout 的預設為 300 秒。

Stop_timeout 特性

此特性將指定停止指令的停止逾時。請參閱Stop_command 特性,以取得附加資訊。Stop_timeout 的預設為 300 秒。

Probe_timeout 特性

此特性將指定探測指令的逾時值。請參閱Probe_command 特性,以取得附加資訊。Probe_timeout 的預設為 30 秒。

Child_mon_level 特性


備註 –

如果您使用 Sun Cluster 管理指令,則可以使用 Child_mon_level 特性。如果您使用 Agent Builder,則無法使用此特性。


此特性提供對透過程序監視工具 (PMF) 進行監視的程序的控制。此特性表示被監視的衍生子程序到達的層級。此特性所起的作用與-C 引數對 pmfadm 指令所起的作用相似。請參閱 pmfadm(1M) 線上手冊。

省略此特性或將它設定為預設值 -1,與在 pmfadm 指令省略 -C 選項的效果相同。即,所有子程序及其子項都會受到監視。

Failover_enabled 特性

此布林延伸特性控制資源的容錯移轉運作方式。如果此延伸特性設定為 TRUE,則當重新啟動數目在 Retry_interval 秒之內超出 Retry_count 次,應用程式將容錯移轉。

如果此特性設定為 FALSE,當重新啟動的數目在 Retry_interval 秒之內超出 Retry_count 次,則應用程式不會重新啟動或容錯移轉至其他節點。

您可以使用此特性防止應用程式資源初始化資源群組的容錯移轉。此特性的預設值為 TRUE

Stop_signal 特性

GDS 使用此整數延伸特性的值確定用於透過 PMF 停止應用程式的訊號。請參閱 signal(3HEAD) 線上手冊,以取得您可以指定的整數值清單。預設值為 15 (SIGTERM )。

Log_level 特性

此特性將指定由 GDS 記錄的診斷訊息的層級或類型。您可以為此特性指定 NONEINFOERR。指定 NONE 時,GDS 將不記錄診斷訊息。當您指定 INFO 時,僅記錄資訊性訊息。當您指定 ERR 時,僅記錄錯誤訊息。依預設,GDS 不記錄診斷訊息 (NONE)。

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

您可以使用 Agent Builder 建立使用 GDS 的服務。 第 9 章, SunPlex Agent Builder更詳細地說明了 Agent Builder。

建立與配置基於 GDS 的程序檔

Procedure如何啟動 Agent Builder 與建立程序檔

步驟
  1. 成為超級使用者,或者假定一個對等身份。

  2. 啟動 Agent Builder。


    # /usr/cluster/bin/scdsbuilder
    
  3. Agent Builder [建立] 畫面出現。

    標題為 SunPlex Agent Builder 的對話方塊,顯示主 Agent Builder [建立] 螢幕
  4. 鍵入供應商名稱。

  5. 鍵入應用程式名稱。


    備註 –

    從 Solaris 9 作業系統開始,供應商名稱和應用程式名稱的組合可以超出九個字元。然而,如果您使用舊版本的 Solaris Operating System,則供應商名稱和應用程式名稱的組合不能超出九個字元。此組合用做程序檔的套裝軟體名稱。


  6. 移至工作目錄。

    您可以使用 [瀏覽] 下拉式功能表,選取目錄,而非鍵入路徑。

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

    您不需要選取 [支援網路],因為建立 GDS 時設定為該預設。

  8. 選取 GDS。

  9. (可選擇) 從所示預設值變更 RT 版本。


    備註 –

    在 [RT 版本] 欄位中不能使用下列字元︰空格、標籤、斜線 (/)、反斜線 (\)、星號 (*)、問號 (?)、逗號 (,)、分號 (;)、左方括號 ([),或右方括號 (])。


  10. 按一下 [建立]。

    Agent Builder 便會建立程序檔。結果將顯示在 [輸出記錄] 區域。

    在輸入資訊後顯示 [建立] 螢幕的對話方塊

    請注意,[建立] 按鈕顯示為灰色。現在便可配置程序檔。

  11. 按一下 [下一步]。

    [配置] 畫面出現。

    顯示 [配置] 畫面的對話方塊

Procedure如何配置程序檔

建立程序檔後,您需要配置新服務。

步驟
  1. 鍵入啟動指令的位置,或按一下 [瀏覽] 以尋找啟動指令。

    您可以指定特性變數。使用特性變數說明特性變數。

  2. (可選擇) 鍵入停止指令的位置,或按一下 [瀏覽] 以尋找停止指令。

    您可以指定特性變數。使用特性變數說明特性變數。

  3. (可選擇) 鍵入探測指令的位置,或按一下 [瀏覽] 以尋找探測指令。

    您可以指定特性變數。使用特性變數說明特性變數。

  4. (可選擇) 指定啟動、停止、探測指令的新逾時值。

  5. 按一下 [配置]。

    Agent Builder 將配置程序檔。


    備註 –

    Agent Builder 會鏈結供應商名稱和應用程式名稱以建立套裝軟體名稱。


    將建立程序檔的套裝軟體,並將其放置在以下目錄中:

    working-dir/vendor-name-application/pkg
    

    例如 /export/wdir/NETapp/pkg

  6. 在叢集的每個節點上,成為超級使用者或假定為等效角色。

  7. 在叢集的每個節點上,安裝完整的套裝軟體。

    • 對於區域環境中的 Solaris 10 作業系統,作為全域區域中的全域管理員,請鍵入以下指令︰


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

      假如套裝軟體的內容不會影響全域區域的任何區域 (與非全域區域共用),則您指定的套裝軟體將增加至全域區域。

      以下檔案由 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
    • 對於非區域環境中任何其他版本的 Solaris 作業系統或 Solaris 10 作業系統,請鍵入以下指令︰


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

      透過 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) 之後。


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


    # /opt/NETapp/util/startapp -h logicalhostname -p port-and-protocol-list
    

    依據資源類型的不同,startapp 程序檔的引數也會不同:故障轉移或可延伸。


    備註 –

    若要確定您需要鍵入的指令行,請檢查自訂線上手冊,或執行不帶任何引數的 startapp 程序檔,以顯示用法敘述。

    若要檢視線上援助頁,您需要指定到援助頁的路徑。例如,若要檢視 startapp(1M) 線上手冊,請鍵入:


    # man -M /opt/NETapp/man startapp
    

    若要顯示用法敘述,請鍵入︰


    # /opt/NETapp/util/startapp
     The resource name of LogicalHostname or SharedAddress must be
     specified. For failover services:
     Usage: startapp -h logicalhostname
              -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]

Agent Builder 輸出

基於您建立套裝軟體時提供的輸入,Agent Builder 將產生三個程序檔與一個配置檔案。配置檔案指定資源群組與資源類型的名稱。

程序檔如下所示︰

這些程序檔具有與公用程式程序檔 (由基於非 GDS 資料服務的 Agent Builder 產生) 相同的介面和運作方式。這些程序檔會置於您可在多個叢集上重複使用的 Solaris 套裝軟體中。

您可以自訂配置檔案,提供自己的資源群組名稱或通常作為 scrgadm 指令的引數的其他引數。如果您不自訂程序檔,Agent Builder 將提供 scrgadm 引數的預設值。

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

本小節說明如何將引數輸入至 GDS。您可使用現有 Sun Cluster 管理指令,如 scrgadmscswitch,維護和管理 GDS。

如果程序檔提供足夠的功能性,則您無需使用本小節中所示的低階管理指令。然而,如果您需要更好地控制基於 GDS 的資源,則可以使用低階管理指令。這些指令由程序檔執行。

Procedure如何使用 Sun Cluster 管理指令建立使用 GDS 的高度可用服務

步驟
  1. 成為超級使用者,或者假定一個對等身份。

  2. 註冊 SUNW.gds 資源類型。


    # scrgadm -a -t SUNW.gds
    
  3. 建立包含 LogicalHostname 資源與容錯移轉服務本身的資源群組。


    # scrgadm -a -g haapp_rg
    
  4. LogicalHostname 資源建立資源。


    # scrgadm -a -L -g haapp_rs -l hhead
    
  5. 建立故障轉移服務本身的資源。


    # 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
    
  6. haapp_rg 資源群組上線運作。


    # scswitch -Z -g haapp_rg
    

Procedure如何使用 Sun Cluster 管理指令建立使用 GDS 的可延伸服務

步驟
  1. 成為超級使用者,或者假定一個對等身份。

  2. 註冊 SUNW.gds 資源類型。


    # scrgadm -a -t SUNW.gds
    
  3. SharedAddress 資源建立資源群組。


    # scrgadm -a -g sa_rg
    
  4. sa_rg 上建立 SharedAddress 資源。


    # scrgadm -a -S -g sa_rg -l hhead
    
  5. 建立可延伸服務的資源群組。


    # scrgadm -a -g app_rg -y Maximum_primaries=2 \
          -y Desired_primaries=2 -y RG_dependencies=sa_rg
    
  6. 為可延伸服務建立資源。


    # 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
    
  7. 讓包含網路資源的資源群組上線運作。


     # scswitch -Z -g sa_rg
    
  8. app_rg 資源群組上線運作。


    # scswitch -Z -g app_rg
    

Agent Builder 的指令行介面

Agent Builder 將併入可提供與 GUI 提供的功能相同的指令行介面。 此介面由指令 scdscreatescdsconfig 組成。請參閱 scdscreate(1HA)scdsconfig(1HA) 線上手冊。

Procedure如何使用 Agent Builder 的指令行版本建立使用 GDS 的服務

本小節說明如何使用指令行介面執行使用 Agent Builder 建立使用 GDS 的服務中所示的相同步驟。

步驟
  1. 成為超級使用者,或者假定一個對等身份。

  2. 建立服務。

    • 對於防故障備用服務,請鍵入:


      # scdscreate -g -V NET -T app -d /export/wdir
      
    • 對於可延伸服務,請鍵入:


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

    備註 –

    -d 引數為可選。如果您不指定此引數,則目前目錄會變成工作目錄。


  3. 配置服務。


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

    您可以指定特性變數。使用特性變數說明特性變數。


    備註 –

    僅需要 start 指令。其他所有選項和引數為可選。


  4. 在叢集的每個節點上,安裝完整的套裝軟體。

    • 對於區域環境中的 Solaris 10 作業系統,作為全域區域中的全域管理員,請鍵入以下指令︰


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

      假如套裝軟體的內容不影響全域區域的任何區域 (與非全域區域共用),則您指定的套裝軟體將增加至全域區域。

      以下檔案由 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
    • 對於非區域環境中任何其他版本的 Solaris 作業系統或 Solaris 10 作業系統,請鍵入以下指令︰


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

      透過 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) 之後。


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


    # /opt/NETapp/util/startapp -h logicalhostname -p port-and-protocol-list
    

    startapp 程序檔的引數依據資源類型變更︰故障轉移或可延伸。


    備註 –

    若要確定您需要鍵入的指令行,請檢查自訂線上手冊,或執行不帶任何引數的 startapp 程序檔,以顯示用法敘述。

    若要檢視線上援助頁,您需要指定到援助頁的路徑。例如,若要檢視 startapp(1M) 線上手冊,請鍵入:


    # man -M /opt/NETapp/man startapp
    

    若要顯示用法敘述,請鍵入︰


    # /opt/NETapp/util/startapp
     The resource name of LogicalHostname or SharedAddress must be specified.
     For failover services:
     Usage: startapp -h logicalhostname
              -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]