【问题标题】:Is there a way to delete an ephemeral node after a client is disconnected by some time?有没有办法在客户端断开一段时间后删除临时节点?
【发布时间】:2018-08-16 03:28:02
【问题描述】:

我们的集群节点对删除一些临时节点采取了措施,但我们在客户处遇到了网络问题,导致一些客户端的临时节点被删除,尽管这些客户端仍在运行中。

我同意应该解决网络问题,但目前看来我们不能这样做。

那么有没有办法配置 Zookeeper 以删除断开连接的客户端的临时节点,前提是它保持断开连接 X 时间?

我们使用 Apache Curator 作为 Zookeeper 客户端。 我们的 Zookeeper 版本是 3.4.6。

【问题讨论】:

    标签: apache-zookeeper apache-curator


    【解决方案1】:

    您可以使用 zookeeper 的会话超时配置来实现所需的行为。 Zookeeper 服务器在会话超时时间内没有收到客户端的任何心跳后,将删除会话的临时节点。

    【讨论】:

    • 我有默认值(2000ms tickTime,iniLimit = 10 和 syncLimit = 5),一旦客户端断开连接,临时节点就消失了。客户端在大约 1 秒后再次连接
    • Zookeeper 服务器在 zoo.cfg 中公开 minSessionTimeout 和 maxSessionTimeout 配置(以毫秒为单位)。在会话建立期间,客户端和服务器之间会协商超时。此超时的默认最小值为 2 * tickTime,最大值为 2 * tickTime。是 20 * 滴答时间。因此,使用所有默认服务器设置,您可以获得 4 到 40 秒之间的会话超时。
    • 根据您使用的客户端库,客户端可以指定它想要的会话超时(以毫秒为单位)。如果例如。协商的超时时间为 20 秒,您的临时节点将在客户端与服务器断开连接 20 秒后被删除。
    • 因此,您希望问题中的 X 是协商的会话超时。
    • 好的。不过要小心增加滴答时间。滴答时间是动物园管理员范围内的时间单位。从 zookeeper 服务器心跳到客户端超时,一切都由滴答时间控制。由于您增加了滴答时间,一个可能的副作用是zookeeper服务器心跳(集群中的服务器之间)将在更长的时间后发生。结果,集群中的死服务器会在稍后被识别出来,如果需要进行领导者选举(如果死服务器是主服务器),也会被延迟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2020-01-24
    • 2019-10-02
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多