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

第 10 章 一般資料服務

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

本章節包含下列主題:

GDS 簡介

GDS 是一種機制,它透過將簡單的網路支援應用程式與非網路支援應用程式插入 Sun Cluster 資源群組管理 (RGM) 框架中,使其具有高度可用性或可延伸性。此機制不需要您為代理程式編碼,而通常您必須這樣做,才能使應用程式具有高度可用性或可延伸性。

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

預先編譯的資源類型

一般資料服務資源類型 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 的優勢和劣勢

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

雖然使用 GDS 有許多優勢,但也存在不使用該機制的情況。在以下情況下,將不使用 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 的高度可用服務與如何使用 Sun Cluster 管理指令建立使用 GDS 的可延伸服務中所示,要發出適當的 scrgadm 與 scswitch 指令,需要進行大量的輸入動作。

將 GDS 與 SunPlex Agent Builder 搭配使用可簡化程序,因為它會產生可發出 scrgadm 與 scswitch 指令的程序檔。

GDS 如何記錄事件

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

請使用Log_level 特性中描述的 Log_level 特性來指定 GDS 要記錄的訊息層級或類型。您可以指定 NONE、INFO 或 ERR。

GDS 日誌檔

以下兩個 GDS 日誌檔位於目錄 /var/cluster/logs/DS/resource_group_name/ resource_name 中:

以下範例顯示 start_stop_log.txt 所含資訊的類型:

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

以下範例顯示 probe_log.txt 所含資訊的類型:

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

必需的 GDS 特性

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

Start_command 延伸特性

您在 Start_command 延伸特性中指定的 Start 指令將啟動應用程式。它必須是一個 UNIX 指令,並且具有可直接傳送到 shell 以啟動應用程式的引數。

Port_list 特性

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

可選擇的 GDS 特性

以下清單包含可選擇的 GDS 特性:

Network_resources_used 特性

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

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

若要指定一個值,請指定一個或多個資源名稱。每個資源名稱可以包含一個或多個 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 指令將定期檢查給定應用程式的運作狀況。它必須是一個 UNIX 指令,並具有可直接傳送到 shell 以測試應用程式的引數。如果應用程式正常,probe 指令會傳回結束狀態 0。

probe 指令的結束狀態可用來判定應用程式的故障嚴重狀況。此結束狀態稱為測試狀態,它必須是一個介於 0 (成功) 與 100 (完全故障) 之間的整數。此測試狀態也可以是特殊值 201,除非將 Failover_enabled 設定為 FALSE,否則它會導致應用程式立即防故障備用。測試狀態用在 GDS 測試演算法中 (請參閱 scds_fm_action(3HA) 線上說明手冊),以決定要在本機重新啟動應用程式,或者將故障轉移至另一個節點。如果結束狀態為 201,應用程式會立即進行防故障備用。

如果忽略 probe 指令,GDS 將提供它自己的簡單測試方式,可透過 IP 位址集 (源自 Network_resources_used 特性或 scds_get_netaddr_list 的輸出) 連接至應用程式 (請參閱 scds_get_netaddr_list(3HA) 線上說明手冊)。如果連接成功,便會立即中斷。如果連接和中斷都順利完成,應用程式會被視為運作良好。


注意 –

和 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 特性


注意 –

如果您使用標準的 Sun Cluster 管理指令,則可以使用該選項。如果您使用 SunPlex Agent Builder,則無法使用該選項。


此特性控制透過程序監視設備 (PMF) 監視的程序。它會指定叉狀子程序被監視到哪個層級。此特性所起的作用與-C 引數對 pmfadm 指令所起的作用相似。請參閱 pmfadm(1M) 線上說明手冊。

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

Failover_enabled 特性

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

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

此特性可用來防止應用程式資源啟動資源群組的防故障備用。此特性的預設值為 true。

Stop_signal 特性

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

Log_level 特性

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

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

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

建立與配置程序檔

如何啟動 SunPlex Agent Builder 與建立程序檔
  1. 成為超級使用者,或者假定一個對等身份。

  2. 啟動 SunPlex Agent Builder。


    # /usr/cluster/bin/scdsbuilder
    
  3. 將顯示 SunPlex Agent Builder [建立] 螢幕。

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

  5. 鍵入應用程式名稱。


    注意 –

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


  6. 移至工作目錄。

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

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

    不需要選取 [網路支援],因為在建立 GDS 時它是預設值。

  8. 選取 GDS。

  9. (選擇性的) 變更顯示的 RT 版本預設值。


    注意 –

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


  10. 按一下 [完成]。

    Agent Builder 便會建立程序檔。在 [輸出日誌] 視窗中,將顯示服務的建立結果。

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

    [建立] 將以灰色顯示。現在便可配置程序檔。

  11. 按一下 [下一步]。

    將顯示 [配置] 螢幕。

如何配置程序檔

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

  1. 鍵入 start 指令的位置,或按一下 [瀏覽] 尋找 start 指令。

    您可以指定特性變數。特性變數中描述了特性變數。

  2. (選擇性的) 鍵入 stop 指令,或按一下 [瀏覽] 尋找 stop 指令。

    您可以指定特性變數。特性變數中描述了特性變數。

  3. (選擇性的) 鍵入 probe 指令,或按一下 [瀏覽] 尋找 probe 指令。

    您可以指定特性變數。特性變數中描述了特性變數。

  4. (選擇性的) 指定 start、stop 和 probe 指令的逾時值。

  5. 按一下 [配置]。

    Agent Builder 開始配置程序檔。


    注意 –

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


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


    working-dir/vendor_nameapplication/pkg
    

    例如 /export/wdir/NETapp/pkg。

  6. 以超級使用者身份,在叢集所有節點上安裝完成的套裝軟體。


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

  7. 透過 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(1M) 線上說明手冊,請鍵入:


    # man -M /opt/NETapp/man startapp
    
  8. 在叢集的一個節點上,配置資源並啟動應用程式。


    # /opt/NETapp/util/startapp -h logicalhostname -p port_and_protocol_list
    

    依據資源類型的不同,startapp 程序檔的引數也會不同:故障轉移或可延伸。檢查自訂的線上說明手冊,或運行沒有引數的 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]

SunPlex Agent Builder 的輸出

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

程序檔為:

這些程序檔的介面及運作方式,與 SunPlex Agent Builder 為非 GDS 型代理程式產生的公用程式程序檔相同。這些程序檔被置於可在多個叢集中重複使用的 Solaris 套裝軟體中。

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

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

本節描述如何輸入 GDS 的參數。可使用現有的 Sun Cluster 管理指令 (如 scrgadm 與 scswitch) 來使用並管理 GDS。

如果程序檔提供了足夠的功能性,則無需輸入本節顯示的較低層級管理指令。不過,如果您需要更精細地控制基於 GDS 的資源,則可以輸入較低層級的管理指令。這些指令由程序檔執行。

如何使用 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
    
如何使用 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
    

SunPlex Agent Builder 的指令行介面

SunPlex Agent Builder 也包含一個指令行介面,此介面提供與圖形化使用者介面相同的功能性。此介面由指令 scdscreate 與 scdsconfig 組成。請參閱 scdscreate (1HA) 與 scdsconfig(1HA) 線上說明手冊。

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

本節描述如何透過指令行介面來執行使用 SunPlex 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. 在叢集所有節點上安裝完成的套件。


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

  5. 透過 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(1M) 線上說明手冊,請鍵入:


    # man -M /opt/NETapp/man startapp
    
  6. 在叢集的一個節點上,配置資源並啟動應用程式。


    # /opt/NETapp/util/startapp -h logicalhostname -p port_and_protocol_list
    

    依據資源類型的不同,startapp 程序檔的引數也會不同:故障轉移或可延伸。檢查自訂的線上說明手冊,或運行沒有引數的 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]