clickhouse кластеризовать несколько записей при вставке в данные - PullRequest
0 голосов
/ 03 ноября 2018

Я использую ReplicatedMergeTree и Distributed table в clickhouse для создания кластера высокой доступности. И я думаю, что он должен хранить две реплики в кластере, все будет хорошо, когда один из узлов имеет такие проблемы. Вот некоторые из моих настроек (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_all, я обнаружил, что это должно быть что-то не так. Поскольку я вставляю одну запись в таблицу game_all, но результат равен 3, который должен быть равен единице, и я запрашиваю каждую игровую таблицу, только у одной таблицы есть 1 запись. , Поскольку только один узел использует диск более 4 КБ, другие не используют диск только 4 КБ.

...