为啥最近的主机名负载平衡配置在 ClickHouse 中不起作用?
Posted
技术标签:
【中文标题】为啥最近的主机名负载平衡配置在 ClickHouse 中不起作用?【英文标题】:Why does nearest_hostname loadbalancing configuration not work in ClickHouse?为什么最近的主机名负载平衡配置在 ClickHouse 中不起作用? 【发布时间】:2020-03-15 20:20:21 【问题描述】:我在配置文件中写了这样的东西
<yandex>
<remote_servers>
<clickhouse>
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>s00-r00.clickhouse.xxx.net</host>
<port>9000</port>
</replica>
<replica>
<host>s00-r01.clickhouse.xxx.net</host>
<port>9000</port>
</replica>
</shard>
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>s01-r00.clickhouse.xxx.net</host>
<port>9000</port>
</replica>
<replica>
<host>s01-r01.clickhouse.xxx.net</host>
<port>9000</port>
</replica>
</shard>
</clickhouse>
</remote_servers>
</yandex>
而我的 load_balancing 配置是 nearest_hostname
。
我在集群 clickhouse 上创建了一个表,并在其上创建了一个分布式表。
我在s00-r00机器上提交了对这个分布式表的全局查询,预计本地查询应该在s00-r00和s01-r00机器上执行。
但是通过监控几个查询测试,除了 s00-r00 机器之外,我能够看到它在不同时间在 s01-r00 和 s01-r01 中执行。
如果我的理解是正确的,我的配置中的主机名应该符合nearest_hostname
的document description。
为什么它不起作用?
或者这个nearest_hostname
配置标识的主机名不是<remote_servers><clickhouse><shard><replica>
配置的主机名,而是别的什么?
【问题讨论】:
【参考方案1】:需要在 s01-r01 执行少量请求 (
另一个原因:在某个时间点,远副本的错误数量可能会低于近副本。
https://clickhouse.tech/docs/en/operations/settings/settings/#load_balancing-nearest_hostname
计算每个副本的错误数。每 5 分钟,错误数除以 2。因此,使用指数平滑计算最近时间的错误数。如果有一个副本的错误数量最少(即最近在其他副本上发生了错误),则将查询发送给它。如果有多个副本具有相同的最小错误数,则将查询发送到主机名与配置文件中服务器的主机名最相似的副本(对于相同位置的不同字符数,最多两个主机名的最小长度)。
我使用最近的主机名,它按预期工作,只是距离公式本身很棘手,并将距离计算为许多不同的字母。
s00-r00 -> s01-r00(距离 1)
s00-r00 -> s01-r01(距离 2)
dcx01 --> dcx12(距离2)
dcx01 --> dcy01(距离 1)
【讨论】:
谢谢!我想我需要做更多的测试。 你能帮我解决另一个问题吗? ***.com/questions/60698597/…它让我无法发布服务 嗨!您能说出负载平衡时error
的确切含义吗? error
是否指查询抛出的异常?还是别的什么?以上是关于为啥最近的主机名负载平衡配置在 ClickHouse 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章