使用ReplicatedMergeTree本地表的Distributed分布式表的组合
vi /etc/clickhouse-server/config.xml
--配置zookeeper
<zookeeper>
<node>
<host>linux01</host>
<port>2181</port>
</node>
<node>
<host>linux02</host>
<port>2181</port>
</node>
<node>
<host>linux03</host>
<port>2181</port>
</node>
</zookeeper>
--配置macros 复制表可以从宏中获取shard与replica 替换参数中的占位符
--linux01机器
<macros>
<shard>01</shard>
<replica>linux01</replica>
</macros>
--linux02机器
<macros>
<shard>01</shard>
<replica>linux02</replica>
</macros>
--linux03机器
<macros>
<shard>02</shard>
<replica>linux03</replica>
</macros>
--集群配置
<!-- 配置集群2 , 集群中的表有两个分片 ,其中分片1 有两个副本 -->
<cluster2>
<shard>
<replica>
<host>linux01</host>
<port>9000</port>
</replica>
<replica>
<host>linux02</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<host>linux03</host>
<port>9000</port>
</replica>
</shard>
</cluster2>
创建本地表
--创建本地表
CREATE TABLE myck.demo_local on cluster cluster2(
id UInt32,
name String
)Engine = ReplicatedMergeTree('/clickhouse/tables/{shard}/demo_local', '{replica}')
order by id
;
创建分布式表
CREATE TABLE demo_all on cluster cluster2
Engine=Distributed('cluster2','myck','demo_local',id) as myck.demo_local;
--在linux01服务器上向分布式表中 插入数据
INSERT INTO demo_all values(1,'zs');
INSERT INTO demo_all values(2,'zs');
INSERT INTO demo_all values(3,'zs');
INSERT INTO demo_all values(4,'zs');
SELECT *
FROM demo_local
┌─id─┬─name─┐
│ 2 │ zs │
└────┴──────┘
┌─id─┬─name─┐
│ 4 │ zs │
└────┴──────┘
--在linux02服务器上向分布式表中 插入数据
INSERT INTO demo_all values(6,'zs');
INSERT INTO demo_all values(8,'zs');
SELECT *
FROM demo_local
┌─id─┬─name─┐
│ 2 │ zs │
└────┴──────┘
┌─id─┬─name─┐
│ 6 │ zs │
└────┴──────┘
┌─id─┬─name─┐
│ 4 │ zs │
└────┴──────┘
┌─id─┬─name─┐
│ 8 │ zs │
└────┴──────┘
--linux01与linux02中都是该数据 说明副本自动复制 由于没有设置internal_replication
<!-- Optional. Whether to write data to just one of the replicas. Default: false
(write data to all replicas). -->
<internal_replication>false</internal_replication>
--该复制操作是由分布式表进行的
--在linux01服务器上向本地表中 插入数据
INSERT into demo_local values(10,'zs');
INSERT into demo_local values(12,'zs');
select * from demo_local ;
┌─id─┬─name─┐
│ 12 │ zs │
└────┴──────┘
┌─id─┬─name─┐
│ 2 │ zs │
│ 4 │ zs │
│ 6 │ zs │
│ 8 │ zs │
│ 10 │ zs │
└────┴──────┘
--在linux02中向本地表中插入数据
INSERT into demo_local values(14,'zs');
INSERT into demo_local values(16,'zs');
select * from demo_local ;
┌─id─┬─name─┐
│ 2 │ zs │
│ 4 │ zs │
│ 6 │ zs │
│ 8 │ zs │
│ 10 │ zs │
└────┴──────┘
┌─id─┬─name─┐
│ 14 │ zs │
└────┴──────┘
┌─id─┬─name─┐
│ 12 │ zs │
└────┴──────┘
┌─id─┬─name─┐
│ 16 │ zs │
└────┴──────┘
MergeTree本地表和分布式表的组合
在linux01中向分布式表插入数据,副本会自动复制.而在linux02中向分布式表插入数据,副本不会自动复制,数据会发送失败,暂时还没找到出现此问题的原因.
|