Clickhouse分布式示例

使用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中向分布式表插入数据,副本不会自动复制,数据会发送失败,暂时还没找到出现此问题的原因.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值