【问题标题】:Curator/Zookeeper lock cleanup策展人/动物园管理员锁清理
【发布时间】:2015-06-05 03:04:46
【问题描述】:

我将 InterProcessSemaphoreMutex 用于分布式锁定配方。

锁的典型路径可能是

/lock/日历/uuid

其中 uuid 当然是一个 uuid,因此可能会生成许多锁定路径。

我认为这些路径最终需要清理,所以我在解锁后尝试使用 childreaper 和 reaper 来清理。

ChildReaper 类型的作品。如果我添加 /lock/calendar/uuid 它会愉快地删除孩子。日志显示它删除了租约和锁,并且节点本身显示在 zkClient 中消失了但是突然它开始在看似无休止的循环中抱怨路径消失了。尽管尝试了 Mode.Delete 和 Mode.Until Gone。

Reaper 什么都不做,可能是因为 /lock/calendar/uuid 有孩子。

我错过了什么吗?我不需要清理这些锁吗?我需要担心并发方面的问题。

【问题讨论】:

    标签: apache-zookeeper apache-curator


    【解决方案1】:

    如果您使用最新的 ZooKeeper 3.5.x 和最新的 Curator,Curator 会为其所有配方使用“容器”节点,并且这些节点会根据需要自动清理。 Curator's Reaper 已被弃用。

    【讨论】:

      【解决方案2】:

      InterProcessSemaphoreMutex 创建额外的子节点,例如租约、锁等。我针对这种特定类型的锁的解决方法是在获取锁时向 Reaper 添加额外的路径 /lock/path/leases/lock/path/locks 等。

      【讨论】:

        【解决方案3】:

        Reaper 不会为 InterprocessSemaphoreMutex 工作,因为它会有孩子(锁、收据 IIRC)。 ChildReaper 确实部分工作,但随后开始抱怨失去父母。这是目前在 2.7.1 后修复的已知错误(尚未发布)。如果重入是可以接受的,一种解决方法是使用 ChildReaper 和 InterprocessLock。

        【讨论】:

          【解决方案4】:

          收割者的步骤如下。

          1. 创建收割机(指定阈值时间。默认为 5 分钟)
          2. 开始收割机
          3. 添加路径
          4. Thread.wait(//time more than the threshold)
          5. 收割者

          如果现在检查zookeeper,该节点将被删除。

          注意:这仅适用于路径为空时的叶节点。

          P.S:儿童收割者对我不起作用。如果您可以在评论或问题中提出您用于儿童收割者的步骤,这将有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-09-14
            • 2015-09-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-10-01
            • 1970-01-01
            相关资源
            最近更新 更多