事件在群集内生成时,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 将先收到事件 A,然后再收到事件 B。但是,不保留传送给所有客户机的事件的总排序。也就是说,客户机 Y 可以在客户机 X 接收到事件 A 之前接收事件 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) 命令检索到的值。 值类型:字符串数组 |