由於事件在叢集中產生,因此 CRNP 伺服器將事件傳送至請求事件類型的每個用戶端。發送過程包括將 SC_EVENT 訊息發送給用戶端的回呼位址。每個事件的發送均發生在新的 TCP 連接中。
用戶端註冊事件類型之後,伺服器會立即透過包含 ADD_CLIENT 訊息或 ADD_EVENT 訊息的 SC_CALLBACK_REG 訊息將該類型的最新事件發送給該用戶端。該用戶端可以確定系統的目前狀態 (其後事件來源於該系統)。
當伺服器開始與用戶端的 TCP 連接後,會透過此連接準確發送一條 SC_EVENT 訊息。伺服器將發佈全雙工結束。
例如,該用戶端執行下列動作:
等待伺服器開始 TCP 連接
接受從伺服器進來的連接
等待伺服器的 SC_EVENT 訊息
讀取伺服器的 SC_EVENT 訊息
接收表明該伺服器已關閉連接 (從套接字讀取 0 位元組) 的指示器
關閉連接
所有用戶端均已註冊時,必須一直為進來的事件發送連接偵聽其回呼位址 (IP 位址與通訊埠編號)。
如果伺服器無法聯絡到用戶端,以致不能發送事件,則該伺服器會以您所定義的時間間隔與次數再次嘗試發送該事件。如果所有嘗試均失敗,則會從伺服器的用戶端清單中移除該用戶端。該用戶端還需要在其可以接收更多事件之前,透過傳送另一個包含 ADD_CLIENT 訊息的 SC_CALLBACK_REG 訊息來重新註冊。
叢集中事件產生的總排序按傳送至每一個用戶端的順序保存。換言之,如果事件 A 先於事件 B 在叢集中產生,則用戶端 X 在接收到事件 B 之前接收到事件 A。然而,傳送至所有用戶端的事件總順序不會被保存。即,在用戶端 X 接收到事件 A 之前用戶端 Y 可以接收事件 A 與事件 B。以此方式,那些速度慢的用戶端不會阻礙向所有用戶端發送事件。
除了當伺服器遇到導致遺失叢集產生的事件之錯誤以外,該伺服器發送的所有事件 (除了子類別的第 一個事件與包含伺服器錯誤的事件) 均是回應叢集產生的實際事件。在此情況下,伺服器為每個事件類型產生一個事件,表示該事件類型的系統之目前狀態。每個事件發送給表明對該事件類型感興趣的已註冊用戶端。
事件發送遵循「至少一次」的語義進行。即,伺服器可以多次將相同事件傳送給用戶端。在伺服器暫時出現故障,且重新置於線上時無法確定用戶端是否接收到最新資訊時,此許可性是必需的。
該 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) 指令擷取的值。 值類型:字串陣列 |