ClickHouse
的集群由分片( Shard
)组成,而每个分片又通过副本( Replica
)组成。这种分层的概念,在一些流行的分布式系统中十分普遍。例如,在 Elasticsearch
的概念中,一个索引由分片和副本组成,副本可以看做一种特殊的分片。如果一个索引由 5
个分片组成,副本的基数是 1
,那么这个索引一共会拥有 10
个分片(每 1
个分片对应 1
个副本)。
但是 ClickHouse
的设计与其完全不同,这里有几个与众不同的特性:
ClickHouse
的1
个节点只能拥有1
个分片,也就是说如果要实现1
分片、1
副本,则至少需要部署2
个服务节点。- 分片只是一个逻辑概念,其物理承载还是由副本承担的。
如下所示是一份 ClickHouse
的集群配置示例:
<ch_cluster> <shard> <replica> <host>10.37.129.6</host> <port>9000</port> </replica> </shard> </ch_cluster>点击复制复制失败已复制
从字面含义理解这份配置的语言,可以理解为自定义集群 ch_cluster
拥有 1
个 shard
(分片)和 1
个 replica
(副本),且该副本由 10.37.129.6
服务节点承载。
从本质上看,这组 1
分片、 1
副本的配置在 ClickHouse
中只有 1
个物理副本,所以它正确的语义应该是 1
分片、 0
副本。分片更像是逻辑层的分组,在物理存储层则统一使用副本代表分片和副本。所以真正的 1
分片、 1
副本语义的配置,应该改为 1
分片和 2
副本,如下所示:
<ch_cluster> <shard> <replica> <host>10.37.129.6</host> <port>9000</port> </replica> <replica> <host>10.37.129.7</host> <port>9000</port> </replica> </shard> </ch_cluster>