【发布时间】:2015-01-12 23:00:32
【问题描述】:
我创建一个 Curator 客户端如下:
RetryPolicy retryPolicy = new RetryNTimes(3, 1000);
CuratorFramework client = CuratorFrameworkFactory.newClient(zkConnectString,
15000, // sessionTimeoutMs
15000, // connectionTimeoutMs
retryPolicy);
在运行我的客户端程序时,我通过关闭 Curator 用来与 Zookeeper 通信的 NIC 来模拟网络分区。根据我看到的行为,我有几个问题:
- 我在 10 秒后看到
ConnectionStateManager - State change: SUSPENDED消息。直到 Curator 进入 SUSPENDED 状态的时间量是可配置的,基于其他超时值的百分比,还是始终为 10 秒? - 自上次成功的检测信号后配置的 15 秒会话超时后,我没有收到 任何 通知。我确实在日志中看到了一条
ZooKeeper - Session: 0x14adf3f01ef0001 closed消息,但是这似乎并没有作为我可以捕获或监听的事件来传播。我在这里遗漏了什么吗? - 我最终在连接丢失大约两分钟后收到
ConnectionStateManager - State change: LOST消息。为什么这么久? - 如果我的目标是在 HA 场景中使用 InterProcessMutex 作为防止脑裂的一种方法,似乎最安全的方法是让锁持有者在
SUSPENDED消息出现时假设它已丢失锁收到,因为 Zookeeper 完全有可能释放了锁 它在网络分区的另一端不知道。这是一种典型/理智的方法吗?
【问题讨论】:
-
您找到问题的答案了吗?我也遇到了同样的问题。
标签: apache-zookeeper apache-curator