在部署 clickhouse 的集群模式时,想加几个副本。
但是根据教程配置完成后,数据不会同步到副本节点上,看了好多教程,文章都是这样的配置,所以想请教一下在哪里出了问题。
环境:本地 docker 起了两个 clickhouse 实例,1 个 zookeeper 实例。
主要配置文件为:
<clickhouse_remote_servers> <ckcluster_1_2> <!--分片 1--> <shard> <internal_replication>true</internal_replication> <!--副本 1--> <replica> <host>172.17.0.3</host> <port>9000</port> </replica> <!--副本 2--> <replica> <host>172.17.0.4</host> <port>9000</port> </replica> </shard> </ckcluster_1_2> </clickhouse_remote_servers> <zookeeper-servers> <node index="1"> <host>172.17.0.2</host> <port>2181</port> </node> </zookeeper-servers> <macros> <shard>01</shard> <replica>172.17.0.3</replica> ##另一个为 172.17.0.4 </macros>
这个配置可以执行分布式 DDL 命令,例如下面这个语句,执行后在两个节点都能查到这张表。
CREATE DATABASE cluster_test ON CLUSTER ckcluster_1_2; CREATE TABLE cluster_test.user_local ON CLUSTER ckcluster_1_2 ( name String, address Nullable(String), age UInt8 ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/ckcluster_1_2/user_local', '{replica}') PARTITION BY age ORDER BY tuple() SETTINGS index_granularity = 8192;
但是向这个表插入数据,数据并不会同步到另一个节点上,这个问题困扰了我好久,如果集群之间不能同步,为什么创表能同步。
然后又创建了一个分布式表
CREATE TABLE IF NOT EXISTS cluster_test.user_all ON CLUSTER ckcluster_1_2 AS cluster_test.user_local ENGINE = Distributed(ckcluster_1_2, cluster_test, user_local, rand());
这个表也可以集群同步,但是向这个表插入数据还是同步不了。
十分困惑,希望有大佬能指教一下。