我创建一个Curator客户端,如下所示:
RetryPolicy retryPolicy = new RetryNTimes(3, 1000);
CuratorFramework client = CuratorFrameworkFactory.newClient(zkConnectString,
15000, // sessionTimeoutMs
15000, // connectionTimeoutMs
retryPolicy);
运行客户端程序时,我通过关闭Curator用于与Zookeeper通信的NIC来模拟网络分区。根据我看到的行为,我有几个问题:
ConnectionStateManager - State change: SUSPENDED
消息。是否可以根据其他超时值的百分比(或始终为10秒)来配置Curator进入SUSPENDED状态的时间量? ZooKeeper - Session: 0x14adf3f01ef0001 closed
消息,但是这似乎并没有引起我可以捕获或监听的事件。我在这里想念什么吗? ConnectionStateManager - State change: LOST
消息。为什么这么久? SUSPENDED
消息时它已经失去了锁,因为它Zookeeper完全释放了锁它在网络分区的另一端是未知的。这是典型/理智的方法吗?
最佳答案
正确。假设在SUSPEND和LOST上失去了领导地位。
这就是Apache Curator配方的工作方式。
您可能要使用Apache Curator,而不是实现自己的算法。
https://curator.apache.org/curator-recipes/index.html