根据https://zookeeper.apache.org/doc/r3.1.2/zookeeperAdmin.html#sc_zkMulitServerSetup
跨机器要求要使ZooKeeper服务处于活动状态, 必须有大多数可以通信的非故障机器 彼此。创建可以容忍失败的部署 对于F机器,你应该指望部署2xF + 1台机器。因此,一个 由三台机器组成的部署可以处理一个故障,并且 部署五台机器可以处理两次故障。注意一个 部署六台机器只能处理三次以来的两次故障 机器不是多数。出于这个原因,ZooKeeper部署是 通常由奇数机器组成。
为了达到容忍失败的最高概率,你应该这样做 尝试使机器故障独立。例如,如果大多数 机器共享同一个开关,该开关的故障可能导致 相关故障并降低服务。同样的道理也是如此 共享电源电路,冷却系统等。
我的问题是: 在我们发现Zookeeper集群中的节点故障再次使集群2F + 1后我们应该怎么做?我们需要重新启动所有zookeeper节点吗?客户端也连接到Zookeeper集群,假设我们使用DNS名称和使用相同DNS名称的已恢复节点。
例如: 10.51.22.89 zookeeper1 10.51.22.126 zookeeper2 10.51.23.216 zookeeper3
如果10.51.22.89死亡,我们将10.51.22.90作为zookeeper1,并且所有节点都可以识别此更改。
答案 0 :(得分:0)
如果您将10.51.22.90连接为zookeeper1(具有与之前10.51.22.89相同的myid
文件和配置)并且数据目录为空,则该进程将连接到当前的leader(zookeeper2或zookeeper3)并且复制数据的快照。成功初始化后,节点将通知其余的集群节点,并再次获得2F + 1。
在日志文件上使用tail -f
时自己尝试一下。它不会伤害集群,你会在zookeeper内部学到很多东西; - )