> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 介绍 ClickHouse Cloud 中先建后断（MBB）操作的页面

# ClickHouse Cloud 中的先建后断（MBB）操作

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

ClickHouse Cloud 在执行集群升级和集群扩缩容时，采用 **Make Before Break** (MBB) 方法。
在这种方法中，会先向集群添加新副本，再移除旧副本。
这与先破后建的方法相反，后者会先移除旧副本，再添加新副本。

MBB 方法有几个好处：

* 由于在移除之前会先为集群增加容量，**整个集群的容量不会下降**，这与先破后建的方法不同。当然，在云环境中，节点故障、磁盘故障等计划外事件仍然可能发生。
* 当集群处于高负载状态时，这种方法尤其有用，因为它能够**避免现有副本过载**，而先破后建的方法则可能导致这种情况。
* 由于可以快速添加副本，而不必先等待旧副本移除，因此这种方法能够带来**更快、响应更灵敏的**扩缩容体验。

下图展示了对于一个包含 3 个副本、服务进行垂直扩缩容的集群，这一过程可能会如何发生：

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/TCLsdkFwl4CgDiNY/images/cloud/features/mbb/vertical_scaling.png?fit=max&auto=format&n=TCLsdkFwl4CgDiNY&q=85&s=8ff1c8db8ff92b03e328874c0859b4e9" size="lg" alt="一个包含 3 个副本并进行垂直扩缩容的集群示意图" width="2714" height="566" data-path="images/cloud/features/mbb/vertical_scaling.png" />

总体而言，与此前使用的先破后建方法相比，MBB 能提供更平滑、干扰更小的扩缩容和升级体验。

使用 MBB 时，有一些你需要注意的关键行为：

1. MBB 操作会等待当前副本上的现有工作负载执行完成后，才终止这些副本。
   目前这段等待时间设置为 1 小时，这意味着在移除某个副本之前，扩缩容或升级最多可能会等待该副本上的长时间运行查询一小时。
   此外，如果某个副本上正在运行备份进程，也会等其完成后再终止该副本。
2. 由于副本在终止前存在等待时间，因此在某些情况下，集群中的副本数可能会超过为该集群设置的最大副本数。
   例如，你的服务可能总共有 6 个副本，但在 MBB 操作进行期间，集群中可能会额外增加 3 个副本，使总数达到 9 个，而旧副本仍在继续处理查询。
   这意味着在一段时间内，集群中的副本数会超过期望值。
   此外，多个 MBB 操作本身也可能重叠，从而导致副本不断累积。例如，在通过 API 向集群发送多个垂直扩缩容请求的场景中，就可能发生这种情况。
   ClickHouse Cloud 已设置相应检查机制，以限制集群中可能累积的副本数量。
3. 在 MBB 操作中，系统表数据会保留 30 天。这意味着每次集群发生 MBB 操作时，都会将过去 30 天的系统表数据从旧副本复制到新副本。

如果你有兴趣进一步了解 MBB 操作的实现机制，请参阅 ClickHouse 工程团队发布的这篇[博文](https://clickhouse.com/blog/make-before-break-faster-scaling-mechanics-for-clickhouse-cloud)。
