本章概述了構成資料服務開發程式庫 (DSDL) 的應用程式設計介面。 DSDL 於 libdsdev.so 程式庫中實施,並包含於 Sun Cluster 套件中。
DSDL API 位於 RMAPI 的頂層。 就其本身而論,它不會取代 RMAPI,而是將封裝並延伸 RMAPI 功能性。 DSDL 透過對特定 Sun Cluster 整合問題提供預先決定的解決方案,簡化資料服務開發。 因此,您可以將大部分開發時間用於應用程式固有的高可用性與高可延伸性問題,避免花費大量的時間來將應用程式啟動、關閉以及監視程序與 Sun Cluster 整合。
所有回呼方法均需要存取配置屬性。 DSDL 透過以下方式支援對屬性的存取:
初始化環境
提供用來擷取屬性值的簡易函式集
scds_initialize 函式 (必須在每個回呼方法開始時呼叫該函式) 執行以下作業:
檢查並處理 RGM 傳送至回呼方法的指令行引數 (argc 與 argv[]),讓您無需寫入指令行剖析函式。
設定供其他 DSDL 函式使用的內部資料結構。 例如,從 RGM 擷取屬性值的簡易函式會將值儲存於這些結構中。 同樣,指令行的值 (優先於從 RGM 擷取的值) 也將儲存於這些資料結構中。
對於 Validate 方法,scds_initialize 剖析在指令上傳送的屬性值,讓您無需為 Validate 寫入剖析函式。
scds_initialize 函式也會初始化記錄環境並驗證故障監視器探測設定。
DSDL 提供用來擷取資源、資源類型、資源類型群組屬性以及常用延伸屬性的函式集。 這些函式透過使用以下慣例標準化對屬性的存取。
每個函式僅使用一個控點引數 (由 scds_initialize 傳回)。
每個函式都對應一個特定的屬性。 函式的傳回值類型符合函式擷取的屬性值類型。
函式不會傳回錯誤,因為這些值已經由 scds_initialize 預先運算。 除非在指令行傳送新的值,否則函式會從 RGM 擷取值。
Start 方法預期會執行在叢集節點上啟動資料服務所需要執行的動作。 通常這些動作包含:擷取資源屬性、尋找應用程式特定的可執行檔案與配置檔案以及使用適當的指令行引數啟動應用程式。
scds_initialize 函式擷取資源配置。 Start 方法可以使用屬性簡易函式擷取特定屬性 (如 Confdir_list) 的值,這些屬性可識別用於啟動應用程式的配置目錄與配置檔案。
Start 方法可以呼叫 scds_pmf_start,以在程序監視器工具 (PMF) 控制下啟動應用程式。 PMF 可讓您指定要套用至程序的監視層次,並且提供在發生故障時重新啟動程序的功能。 請參閱xfnts_start 方法,以取得透過 DSDL 實施的 Start 方法之範例。
即使在應用程式未執行時於某節點上呼叫 Stop 方法,此方法也必須等冪,以便其以成功狀態退出。 如果 Stop 方法失敗,則正被停止的資源會被設定為 STOP_FAILED 狀態,這樣將導致叢集強制重新啟動。
若要避免將資源置於 STOP_FAILED 狀態,Stop 方法必須盡力停止資源。 scds_pmf_stop 函式會嘗試分階段停止資源。 它將首先嘗試使用 SIGTERM 訊號來停止資源,如果失敗,則使用 SIGKILL 訊號。 請參閱 scds_pmf_stop(3HA),以取得詳細資訊。
DSDL 透過提供預先決定的模型來瞭解實施故障監視器的大部分複雜性。 當資源在某節點上啟動時,Monitor_start 方法將在 PMF 的控制下啟動故障監視器。 只要資源正在該節點上執行,故障監視器就會在迴圈中執行。 DSDL 故障監視器的高階邏輯如下所示。
scds_fm_sleep 函式使用 Thorough_probe_interval 屬性決定探測之間的間隔時間。 在此間隔期間由 PMF 決定的任何應用程式程式故障都將導致重新啟動資源。
探測本身將傳回一個值,指示從 0 (無故障) 到 100 (完全故障) 的故障程度。
探測傳回值被傳送給 scds_action 函式,該函式維護在 Retry_interval 屬性的間隔時間內的累計故障歷史。
scds_action 函式決定在發生故障情況下應執行的作業,如下所示。
如果累計的故障低於 100,則不執行任何作業。
如果累計的故障達到 100 (完全故障),則重新啟動資料服務。 如果超過 Retry_interval,則重設歷史。
如果在 Retry_interval 指定的時間內,重新啟動的次數超過 Retry_count 屬性值,則對資料服務進行故障轉移。
DSDL 提供了方便的函式,以為資源與資源群組傳回網路位址資訊。 例如,scds_get_netaddr_list 擷取資源使用的網路位址資源,啟用故障監視器探測應用程式。
DSDL 還提供用於基於 TCP 的監視的函式集。 這些函式通常會建立與服務的簡單套接字連線,在該服務中讀取和寫入資料,然後結束與該服務的連線。 探測的結果可發送至 DSDL scds_fm_action 函式,以決定要採取的動作。
請參閱xfnts_validate 方法,以取得基於 TCP 的故障監視的範例。
DSDL 公用程式 scds_syslog_debug() 提供一個基本框架,用於將除錯敘述加入至資源類型實作。 每個叢集節點的每個資源類型實作都可以動態設定除錯層次 (1-9 之間的數字)。 所有資源類型回呼方法均讀取名為 /var/cluster/rgm/rt/rtname/loglevel 的檔案 (僅包含 1 至 9 之間的一個整數)。 DSDL 常式 scds_initialize() 將讀取此檔案並將除錯層次內部設定為指定的層次。 預設除錯層次 0 指定資料服務不記錄任何除錯訊息。
scds_syslog_debug() 函式使用 scha_cluster_getlogfacility() 函式以 LOG_DEBUG 優先順序傳回的工具。 您可以在 /etc/syslog.conf 中配置這些除錯訊息。
您可以將某些除錯訊息轉換為資訊訊息,用於使用 scds_syslog 公用程式的資源類型 (也許以 LOG_INFO 優先順序) 之正規作業。 如果您查看第 8章, DSDL 資源類型實施範例中的 DSDL 應用程式範例,將會注意到它充分利用 scds_syslog_debug 函式與 scds_syslog 函式。
您可以使用 HAStoragePlus 資源類型來使本機檔案系統在 Sun Cluster 環境內高度可用。 本機檔案系統分割區必須位於全域磁碟群組上。 必須啟用相互關係切換,並且 Sun Cluster 環境必須配置故障轉移。 該設定可讓使用者從任何直接連接至多重主機磁碟的主機上,存取這些多重主機磁碟上的任何檔案系統。 對於某些 I/O 密集的資料服務,強烈建議使用高度可用的本機檔案系統。 Sun Cluster Data Services Planning and Administration Guide for Solaris OS中的「Enabling Highly Available Local File Systems」包含有關配置 HAStoragePlus 資源類型的資訊。