跳转到主要内容
ClickHouse Cloud 在执行集群升级和集群扩缩容时,采用 Make Before Break (MBB) 方法。 在这种方法中,会先向集群添加新副本,再移除旧副本。 这与先破后建的方法相反,后者会先移除旧副本,再添加新副本。 MBB 方法有几个好处:
  • 由于在移除之前会先为集群增加容量,整个集群的容量不会下降,这与先破后建的方法不同。当然,在云环境中,节点故障、磁盘故障等计划外事件仍然可能发生。
  • 当集群处于高负载状态时,这种方法尤其有用,因为它能够避免现有副本过载,而先破后建的方法则可能导致这种情况。
  • 由于可以快速添加副本,而不必先等待旧副本移除,因此这种方法能够带来更快、响应更灵敏的扩缩容体验。
下图展示了对于一个包含 3 个副本、服务进行垂直扩缩容的集群,这一过程可能会如何发生: 总体而言,与此前使用的先破后建方法相比,MBB 能提供更平滑、干扰更小的扩缩容和升级体验。 使用 MBB 时,有一些你需要注意的关键行为:
  1. MBB 操作会等待当前副本上的现有工作负载执行完成后,才终止这些副本。 目前这段等待时间设置为 1 小时,这意味着在移除某个副本之前,扩缩容或升级最多可能会等待该副本上的长时间运行查询一小时。 此外,如果某个副本上正在运行备份进程,也会等其完成后再终止该副本。
  2. 由于副本在终止前存在等待时间,因此在某些情况下,集群中的副本数可能会超过为该集群设置的最大副本数。 例如,你的服务可能总共有 6 个副本,但在 MBB 操作进行期间,集群中可能会额外增加 3 个副本,使总数达到 9 个,而旧副本仍在继续处理查询。 这意味着在一段时间内,集群中的副本数会超过期望值。 此外,多个 MBB 操作本身也可能重叠,从而导致副本不断累积。例如,在通过 API 向集群发送多个垂直扩缩容请求的场景中,就可能发生这种情况。 ClickHouse Cloud 已设置相应检查机制,以限制集群中可能累积的副本数量。
  3. 在 MBB 操作中,系统表数据会保留 30 天。这意味着每次集群发生 MBB 操作时,都会将过去 30 天的系统表数据从旧副本复制到新副本。
如果你有兴趣进一步了解 MBB 操作的实现机制,请参阅 ClickHouse 工程团队发布的这篇博文
最后修改于 2026年6月10日