zl程序教程

您现在的位置是:首页 >  其他

当前栏目

ClickHouse系列--分布式查询多副本的路由规则

2023-04-18 12:42:28 时间

简介:在集群情况下,数据写入可以有写本地表和写分布式表2种方案,但是面向集群查询时,只能通过Distributed表引擎实现。本文主要介绍分布式查询多副本的路由规则。

该配置项为:load_balance=random/nearest_hostname/in_order/first_or_random

1.多副本的路由规则

查询数据时,如果一个分片shard有多个副本repIica,那么Distributed表引擎就需要面对副本选择的问题,选择查询究竟在哪个副本上执行。ck的负载均衡算法有以下四种:

  • random
  • nearest_hostname
  • in_order
  • first_or_random

1.1 random

这是默认的负载均衡算法。在ck的服务节点中,有一个errors_count全局计数器,当服务发生任何异常时,技术器加1。randdom算法会选择errors_count最小的那个repIica,如果多个repIica的errors_count相同,则在这几个里随机选择一个。

1.2 nearest_hostname

选择errors_count最小的那个,如果多个errors_count相同,则选择集群配置中host名称和当前host名称最相似的那个。相似比较的规则是与当前host的名称,按字节进行逐位对比,找到不同字节最少的那个。 例如当前host是a.bc.de,那么,a.bc.df就比a.bf.hh要更加相似。 a.bc.de a.bc.df a.bf.hh

1.3 in_order

选择errors_count最小的那个,如果多个errors_count相同,则按照集群配置顺序选择。

1.4 first_or_random

选择errors_count最小的那个,如果多个errors_count相同,则按照集群配置顺序选择第一个,如果第一个不可用,则随意选择一个其他的。

总结起来,其实这4个负载算法中,都是优先选择errors_count最小的那个,如果多个errors_count相同时,再根据不同的负载算法来选择。