Skip to main content

概述

ClickHouse 的 集群发现 功能可让节点自动发现并注册自身,无需在配置文件中逐一定义,从而简化集群配置。在必须手动定义每个节点时,这项功能尤其有用。
集群发现 是一项 Experimental 功能,未来版本中可能会发生变更或被移除。 要启用该功能,请在配置文件中加入 allow_experimental_cluster_discovery 设置:

远程服务器配置

传统的手动配置

以往,在 ClickHouse 中,集群中的每个分片和副本都需要在配置中手动指定:

使用集群发现

使用 Cluster Discovery 时,无需逐个显式定义节点,只需在 ZooKeeper 中指定一个 path。所有在 ZooKeeper 中注册到该 path 下的节点都会被自动发现并添加到 cluster 中。
如果你想为某个节点指定分片编号,可以在 <discovery> 部分内添加 <shard> 标签: 对于 node1node2
对于 node3node4

观察者模式

配置为观察者模式的节点不会将自己注册为副本。 它们只会观察并发现集群中其他处于活动状态的副本,而不会主动参与。 要启用观察者模式,请在 <discovery> 部分中添加 <observer/> 标签:

集群发现

有时,您可能不仅需要添加和移除集群中的主机,还需要添加和移除集群本身。您可以使用 <multicluster_root_path> 节点,为多个集群指定根路径:
在这种情况下,当其他主机通过路径 /clickhouse/discovery/some_new_cluster 注册自身时,就会添加一个名为 some_new_cluster 的集群。 你可以同时使用这两种功能:主机既可以在集群 my_cluster 中注册自身,也可以发现其他任意集群:
限制:
  • 不能在同一个 remote_servers 子树中同时使用 <path><multicluster_root_path>
  • <multicluster_root_path> 只能与 <observer/> 搭配使用。
  • 集群名称使用 Keeper 中路径的最后一部分;而在注册时,该名称取自 XML 标签。

用例和限制

当节点被添加到指定的 ZooKeeper 路径或从中移除时,无需更改配置或重启服务器,系统就会自动发现这些节点,或将其从集群中移除。 但是,这些变更只会影响集群配置,不会影响数据或现有的数据库和表。 请考虑以下一个包含 3 个节点的集群示例:
然后,我们向集群中添加一个新节点:在配置文件的 remote_servers 部分中为其使用相同的条目来启动该新节点:
第四个节点已加入集群,但表 event_table 仍然只存在于前三个节点上:
如果您需要在所有节点上复制表,可使用 Replicated 数据库引擎,作为集群发现的替代方案。
最后修改于 2026年7月3日