我有一个由 3 台机器组成的 Pulsar 集群。每台机器都运行 Pulsar 代理、Zookeeper 和 Bookkeeper。我的 broker.conf 中有以下内容:
managedLedgerDefaultEnsembleSize=2
managedLedgerDefaultWriteQuorum=2
managedLedgerDefaultAckQuorum=2
所以我应该能够暂时关闭 3 台机器中的任何一台而不会中断服务,对吗?当我启动它时,它会获得它错过的所有消息的副本吗?我只是想确保在对我们的实时集群执行此操作之前我理解正确。我不想度过一个糟糕的周末!
答案1
哦,抱歉,我错过了上一个答案中 (EnsembleSize、writeQuorum、AckQuorum) 仲裁值 (2,2,2) 的配置。如果只有 3 个 bookie,则在仲裁 (3,3,2) 下不支持一台机器。
但即使仲裁人数为 (2,2,2),在关闭一台机器之前,请务必使用命令关闭 Bookkeeper 自动恢复功能bin/bookkeeper shell autorecovery -disable
,并在机器恢复时使用 命令将其打开bin/bookkeeper shell autorecovery -enable
。
如果不设置,bookkeeper 会在某台机器离线后自动恢复,因为 bookkeeper 原本预计有 3 份数据副本,但现在只有 2 份,无法找到第三台可用的机器来放置恢复的副本,所以自动恢复会失败。
有关 Bookkeeper 自动恢复的更多信息,您可以查看此链接。以下为部分内容:
您可以随时禁用自动恢复功能,例如在维护期间。禁用自动恢复功能可确保在 Bookie 仅在短时间内关闭时(例如在更新 Bookie 或更改配置时),不会不必要地重新复制 Bookie 的数据。