对 ClickHouse 复制的 count() 查询

count() query on ClickHouse replication

你好 ClickHouse 期待,

我正在不使用 zookeeper 测试 ClickHouse 复制以了解其工作原理并有 2 个问题。

我是如何测试的:

(Q1) 插入后,我从所有 3 个服务器查询 log_local 的 count(),总数符合预期(即 200M)。但是,当我使用 log_all 查询时,服务器之间的结果不同(接近 200M,但不准确)。更奇怪的是,即使在同一台服务器内,计数也会发生变化。你能解释一下这种行为吗?会不会是配置问题?没有副本 (3shards_1replica) 测试,我看不到这个计数差异。

我看到这不是推荐的,所以最终,我会使用集群协调器——希望那时 clickhouse-keeper 已经投入生产。在那个阶段之前,我正在评估我是否可以将其用作具有可解释缺点的临时解决方案。

(Q2) 这是一个关于复制的更普遍的问题。 log_all 的计数是 200M,其中包括副本。在没有副本的情况下查询它的实用方法是什么?即,来自 log_all(或不同名称)的 select count() 产生 100M 而不是 200M。

Configs(为了不显示隐私信息,我修改了一些原来的名字):

    # remote_servers
    <log_3shards_2replicas>
     <shard>
         <replica>
             <host>CH1</host>
             <port>9000</port>
         </replica>
         <replica>
             <host>CH2</host>
             <port>9000</port>
         </replica>
     </shard>
     <shard>
         <replica>
             <host>CH2</host>
             <port>9000</port>
         </replica>
         <replica>
             <host>CH3</host>
             <port>9000</port>
         </replica>
     </shard>
     <shard>
         <replica>
             <host>CH3</host>
             <port>9000</port>
         </replica>
         <replica>
             <host>CH1</host>
             <port>9000</port>
         </replica>
     </shard>
    </log_3shards_2replicas>

    ENGINE = MergeTree
    PARTITION BY toYYYYMMDD(my_time)
    ORDER BY my_time
    SETTINGS index_granularity = 8192

    ENGINE = Distributed(‘log_3shards_2replicas', ‘my_db’, ‘log_local', rand()) 

部分参考资料:

类似问题讨论:

提前致谢。

您已经配置了一个“循环复制”。上帝保佑你。

此配置不受支持,并且未包含在 CI 中的测试中。

Circle-replication 很难配置,对新手来说很不明显。

循环复制提供了很多问题和调试难度。

很多查询产生不正确的结果。

过去使用循环复制的大多数用户现在转移到通常的设置 N 分片 * M 副本并且很高兴。

https://kb.altinity.com/engines/

https://youtu.be/4DlQ6sVKQaA

在您的配置中缺少 DEFAULT_DATABASE 属性,没有它循环复制将无法工作。