将Clickhouse群集插入数据时的多个记录

时间:2018-11-03 06:47:35

标签: clickhouse yandex

我在Clickhouse中使用ReplicatedMergeTree和Distributed表制作了HA群集。 而且我认为它应该在集群中存储两个副本,当一个节点出现问题时就可以了。 这是我的一些配置(config.xml): ...

        <logs>
        <shard>
            <weight>1</weight>
            <internal_replication>true</internal_replication>
            <replica>
                <host>node1</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>node2</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <weight>1</weight>
            <internal_replication>true</internal_replication>
            <replica>
                <host>node2</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>node3</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <weight>1</weight>
            <internal_replication>true</internal_replication>
            <replica>
                <host>node3</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>node1</host>
                <port>9000</port>
            </replica>
        </shard>
        </logs>
...
<!-- each node is different -->
<macros>
    <layer>01</layer>
    <shard>01</shard>
    <replica>node1</replica>
</macros>
<!-- below is node2 and node3 configuration 

<macros>
    <layer>02</layer>
    <shard>02</shard>
    <replica>node2</replica>
</macros>

<macros>
    <layer>03</layer>
    <shard>03</shard>
    <replica>node3</replica>
</macros>
-->
...

然后我通过clickhouse-client --host cmd在每个节点中创建表:

create table if not exists game(uid Int32,kid Int32,level Int8,datetime Date) 
ENGINE = ReplicatedMergeTree('/clickhouse/data/{shard}/game','{replica}') 
PARTITION BY  toYYYYMMDD(datetime)  
ORDER BY (uid,datetime);

创建ReplicatedMergeTree表之后,然后在每个节点中创建分发表(仅对于每个节点都有此表,实际上它仅在一个节点上创建)

CREATE TABLE game_all AS game  
ENGINE = Distributed(logs, default, game ,rand())

这现在还可以,我也认为当我向game_all中插入数据时还可以,但是当我从game表和game_all表中查询数据时,我发现肯定有问题。 因为我在game_all表中插入了一条记录,但是结果是3,所以它必须是1,然后我查询每个游戏表,只有一个表有1条记录。最后,我检查了每个节点的磁盘,并且该表中似乎没有副本。 ,因为只有一个节点的磁盘使用量超过4KB,其他节点的磁盘使用量仅为4KB。

0 个答案:

没有答案