如何构建zookeeper抖动导致多次快速选举的场景

问题描述

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

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

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

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

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

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

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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...