为什么 nearest_hostname 负载均衡配置在 ClickHouse 中不起作用?

Why does nearest_hostname loadbalancing configuration not work in ClickHouse?

我在配置文件里写了这样的东西

<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 上创建了一个 table 并在其上创建了一个分布式 table。

我在s00-r00机器上提交了这个分布式table的全局查询,预计本地查询应该在s00-r00和s01-r00机器上执行。

但是通过监控几个查询测试,除了 s00-r00 机器,我还能够看到它在不同时间在 s01-r00 和 s01-r01 中执行。

如果我的理解是正确的,我配置中的主机名应该符合nearest_hostnamedocument description。 为什么它不起作用?

或者这个nearest_hostname配置标识的主机名不是<remote_servers><clickhouse><shard><replica>中配置的主机名,而是别的?

需要在 s01-r01 执行少量请求 (<1%) 以检查其可用性并收集其他分片中所有副本的错误统计信息。

另一个原因:在某个时间点,远端副本的错误数量可能会低于近端副本。

https://clickhouse.tech/docs/en/operations/settings/settings/#load_balancing-nearest_hostname

为每个副本计算错误数。每5分钟,将错误数除以2。这样,通过指数平滑计算最近一次的错误数。如果有一个副本的错误数量最少(即最近在其他副本上发生错误),则将查询发送给它。如果有多个副本具有相同的最小错误数,则将查询发送到主机名与配置文件中服务器主机名最相似的副本(对于相同位置的不同字符数,最多两个主机名的最小长度)。

我使用 nearest_hostname 并且它按预期工作,除了距离公式本身很棘手并且将距离计算为许多不同的字母。

s00-r00 -> s01-r00(距离 1)

s00-r00 -> s01-r01(距离 2)

dcx01 --> dcx12 (距离2)

dcx01 --> dcy01 (距离1)