0

我有两个程序,fc(failoverController) 和 web(webServer)。我使用zookeeper来确保高可靠性。

fc会部署在两台服务器上,两台fc使用apache-curator LeaderSelector选举master,master会启动一个web进程,web进程提供服务。为了不放弃领导,我在函数 takeLeadership() 的末尾使用了 while(true)。

但是在某种情况下,我们自定义部署zookeeper在三个vmware esxi虚拟机上。他们每天都会对三个虚拟机(快照虚拟机内存)进行快照。

有一天,出现了一个奇怪的现象,fc1成为master,几毫秒,fc2成为master,前后的时间差很短。这在我们的程序中触发了一个错误,我们有两个 master。

为了解决这个问题,我们使用了一个 AtomBoolean var,声明 zk 状态是 LOST 还是 SUSPEND,并使用这个 var 标记是否退出 takeLeadership。

现在我想测试这两个master case,如何构建一个zookeeper jitter导致多次快速选举的场景。

我已经测试了以下操作,但无法重现:

  1. zk 服务频繁重启。
  2. 使用 tcpkill 杀死 fc 到 zk 端口之一。
4

0 回答 0