我在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。