问题描述
我有两个程序,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抖动导致多次快速选举的场景。
我已经测试了以下操作,但无法重现:
- 频繁重启 zk 服务。
- 使用 tcpkill 杀死 fc 到 zk 端口之一。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)