安全地替换 Zookeeper Quorum 中的坏节点

Replacing Bad Node in Zookeeper Quorum Safely

我们有 5 个节点 zookeeper quorum ( A,B,C,D,E ) 运行 在生产中,上周有 1 个节点宕机 ( E ) 。法定人数是健康的,但我们需要用新的健康节点 ( F )

替换 ( E )

我在两个选项之间徘徊

1. add ( F ) to the quorum and then remove  ( E )
2. replace ( F ) with ( E ) restart followers and then restart leader

我测试了选项 #2,我可以看到 ( F ) 在强制领导后(通过重新启动领导者)在法定人数中被接受

法定人数是健康的,但我只是想确定这是否是标准程序

我找不到任何有关此版本节点替换的 Apache 文档

ZK Version : 3.4.6

是的,对于 3.5.* 之前的版本,ZK 集群的重新配置需要协调重启确保更新配置以用新节点替换旧节点,所以新节点可以加入法定人数并且旧节点被删除。我发现这个 gist 很有帮助。

一般来说,对于升级,建议采用滚动重启 - 参考 apache link

如果可能,我建议您考虑升级到 3.5* 版本,其中 dynamic reconfiguration 无需重启即可。

如果在您的示例中,节点 F 可以恢复为与故障节点 E 具有相同的 IP * 和 ID(写入 zookeeper 数据中作为 myid 文件),则无需进一步操作。新节点 F 最初没有数据,但它会从其他可用节点接收最新数据。我已经用 Zookeeper 版本 3.4.10 进行了验证。

*这种情况例如在 AWS 上是可能的,您可以通过 ENI 为 Zookeeper 节点保留 IP 地址。因此,可以为新节点 F 提供与故障节点 E 相同的 IP 地址。