集群发现
概述
ClickHouse 的集群发现功能通过允许节点自动发现并注册自己,简化了集群配置,而无需在配置文件中进行明确的定义。这在手动定义每个节点变得繁琐的情况下尤其有益。
集群发现是一个实验性功能,未来版本可能会更改或删除。
要启用此功能,请在配置文件中包含 allow_experimental_cluster_discovery
设置:
远程服务器配置
传统手动配置
在 ClickHouse 中,传统上需要手动在配置中指定每个分片和副本:
使用集群发现
使用集群发现,而不是明确地定义每个节点,您只需在 ZooKeeper 中指定一个路径。在该路径下注册的所有节点将会被自动发现并添加到集群中。
如果您想为特定节点指定一个分片编号,可以在 <discovery>
部分中包含 <shard>
标签:
对于 node1
和 node2
:
对于 node3
和 node4
:
观察者模式
配置为观察者模式的节点不会将自己注册为副本。
它们仅会观察并发现集群中其他活动的副本,而不会主动参与。
要启用观察者模式,请在 <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 数据库引擎作为集群发现的替代方案。