跳到主要内容
跳到主要内容

集群发现

概述

ClickHouse 的集群发现功能通过允许节点自动发现并注册自己,简化了集群配置,而无需在配置文件中进行明确的定义。这在手动定义每个节点变得繁琐的情况下尤其有益。

备注

集群发现是一个实验性功能,未来版本可能会更改或删除。 要启用此功能,请在配置文件中包含 allow_experimental_cluster_discovery 设置:

远程服务器配置

传统手动配置

在 ClickHouse 中,传统上需要手动在配置中指定每个分片和副本:

使用集群发现

使用集群发现,而不是明确地定义每个节点,您只需在 ZooKeeper 中指定一个路径。在该路径下注册的所有节点将会被自动发现并添加到集群中。

如果您想为特定节点指定一个分片编号,可以在 <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 路径添加或移除时,它们会自动被发现或从集群中移除,而无需进行配置更改或服务器重启。

然而,变化仅影响集群配置,不影响数据或现有的数据库和表。

考虑以下三个节点的集群示例:

然后,我们通过在配置文件的 remote_servers 部分中使用相同的条目,向集群添加一个新节点,启动一个新节点:

第四个节点参与集群,但表 event_table 仍然只存在于前三个节点上:

如果您需要在所有节点上复制表,可以使用 Replicated 数据库引擎作为集群发现的替代方案。