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

伺服器如何將事件發送給用戶端

由於事件在叢集中產生,因此 CRNP 伺服器將事件傳送至請求事件類型的每個用戶端。發送過程包括將 SC_EVENT 訊息發送給用戶端的回呼位址。每個事件的發送均發生在新的 TCP 連接中。

用戶端註冊事件類型之後,伺服器會立即透過包含 ADD_CLIENT 訊息或 ADD_EVENT 訊息的 SC_CALLBACK_REG 訊息將該類型的最新事件發送給該用戶端。該用戶端可以確定系統的目前狀態 (其後事件來源於該系統)。

當伺服器開始與用戶端的 TCP 連接後,會透過此連接準確發送一條 SC_EVENT 訊息。伺服器將發佈全雙工結束。

例如,該用戶端執行下列動作:

  1. 等待伺服器開始 TCP 連接

  2. 接受從伺服器進來的連接

  3. 等待伺服器的 SC_EVENT 訊息

  4. 讀取伺服器的 SC_EVENT 訊息

  5. 接收表明該伺服器已關閉連接 (從套接字讀取 0 位元組) 的指示器

  6. 關閉連接

所有用戶端均已註冊時,必須一直為進來的事件發送連接偵聽其回呼位址 (IP 位址與通訊埠編號)。

如果伺服器無法聯絡到用戶端,以致不能發送事件,則該伺服器會以您所定義的時間間隔與次數再次嘗試發送該事件。如果所有嘗試均失敗,則會從伺服器的用戶端清單中移除該用戶端。該用戶端還需要在其可以接收更多事件之前,透過傳送另一個包含 ADD_CLIENT 訊息的 SC_CALLBACK_REG 訊息來重新註冊。

如何保證事件的發送

叢集中事件產生的總排序按傳送至每一個用戶端的順序保存。換言之,如果事件 A 先於事件 B 在叢集中產生,則用戶端 X 在接收到事件 B 之前接收到事件 A。然而,傳送至所有用戶端的事件總順序不會被保存。即,在用戶端 X 接收到事件 A 之前用戶端 Y 可以接收事件 A 與事件 B。以此方式,那些速度慢的用戶端不會阻礙向所有用戶端發送事件。

除了當伺服器遇到導致遺失叢集產生的事件之錯誤以外,該伺服器發送的所有事件 (除了子類別的第 一個事件與包含伺服器錯誤的事件) 均是回應叢集產生的實際事件。在此情況下,伺服器為每個事件類型產生一個事件,表示該事件類型的系統之目前狀態。每個事件發送給表明對該事件類型感興趣的已註冊用戶端。

事件發送遵循「至少一次」的語義進行。即,伺服器可以多次將相同事件傳送給用戶端。在伺服器暫時出現故障,且重新置於線上時無法確定用戶端是否接收到最新資訊時,此許可性是必需的。

SC_EVENT 訊息的內容

SC_EVENT 訊息包含在叢集中產生,並轉譯以符合 SC_EVENT XML 訊息格式的實際訊息。下表說明 CRNP 發送的事件類型,包括名稱、值對、出版商及供應商。


備註 –

state_list 的陣列元素位置與 node_list 的那些陣列元素位置是同步的。即,首先列示在 node_list 陣列中的節點的狀態會首先列示在 state_list 陣列中。

ev_ 開始的其他名稱及其關聯的值可能出現,但不是供用戶端使用的。


類別與子類別 

出版商與供應商 

名稱與值對 

EC_Cluster

ESC_cluster_membership

出版商:rgm 

供應商:SUNW 

名稱:node_list

值類型:字串陣列 

名稱:state_list

state_list 僅包含以 ASCII 表示的編號。每個編號表示叢集中該節點的目前典型編號。如果該編號與先前所接收到訊息中的編號相同,則該節點尚未變更其與叢集的關係 (分離、連結或者重新連結)。如果典型編號為 –1,則該節點不是叢集的成員。如果典型編號是非負數的編號,則該節點是叢集的成員。

值類型:字串陣列 

EC_Cluster

ESC_cluster_rg_state

出版商:rgm 

供應商:SUNW 

名稱:rg_name

值類型:字串 

名稱:node_list

值類型:字串陣列 

名稱:state_list

state_list 包含資源群組狀態的字串表示法。有效值就是您可以使用 scha_cmds(1HA) 指令擷取的值。

值類型:字串陣列 

EC_Cluster

ESC_cluster_r_state

出版商:rgm 

供應商:SUNW 

名稱:r_name

值類型:字串 

名稱:node_list

值類型:字串陣列 

名稱:state_list

state_list 包含資源狀態的字串表示法。有效值就是您可以使用 scha_cmds(1HA) 指令擷取的值。

值類型:字串陣列