在部署 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());
这个表也可以集群同步,但是向这个表插入数据还是同步不了。
十分困惑,希望有大佬能指教一下。