Я использую 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 КБ.