Sun Cluster 数据服务开发者指南(适用于 Solaris OS)

服务器如何向客户机传送事件

事件在群集内生成时,CRNP 服务器会将其发送给已请求这些类型的事件的每个客户机。发送过程包括向客户机的回调地址发送一条 SC_EVENT 消息。每个事件都是通过一个新的 TCP 连接传送的。

客户机注册事件类型后,服务器立即通过一条包含 ADD_CLIENTADD_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 将先收到事件 A,然后再收到事件 B。但是,保留传送给所有客户机的事件的总排序。也就是说,客户机 Y 可以在客户机 X 接收到事件 A 之前接收事件 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) 命令检索到的值。

值类型:字符串数组