栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Clickhouse副本分片、分布式表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Clickhouse副本分片、分布式表

Clickhouse副本分片以及分布式表机制
  • 一、clickhouse实现二分片双备份案例如下
    • 1、配置metrika.xml
    • 2、数据测试

一、clickhouse实现二分片双备份案例如下 1、配置metrika.xml

    
    
       
            true
            
                node1
                9000
                default
                123456
                true
            
            
                node2
                9000
                default
                123456
                true
            
        
        
            true
            
                node3
                9000
                default
                123456
                true
            
            
                node4
                9000
                default
                123456
                true
            
        
    




    
        node1
        2181
    
    
        node2
        2181
    
    
        node3
        2181
    
	30000
    10000 



        01   
        rep_1_1  

以上宏变量四台机器配置分别为:
node1


        01   
        rep_1_1  

node2


        01   
        rep_1_2  

node3


        02   
        rep_2_1  

node4


        02   
        rep_2_2  

参数解读

  • 通过分布式表的方式实现数据副本时,写入我们配置的分布式表时,分布式表会往shard下的所有replica都写入一份数据.如果我们这里的replicaTest表改成ReplicatedMergeTree引擎,那么我们就只需要分布式表选择一个replica写入即可,由ReplicatedMergeTree完成数据同步,而不需要每个replica都要写入,这项配置需要添加 true

      
                 true
                 ......
      
    
  • 权重配置

   
                 2     
 

weight默认为1,既node1 node2 node3 都为1,那么总的权重为3,每个分片通过分布式表第四个参数sharding_key分配到数据的概率是一样.
至此,最适合生产的分片与副本机制就配置好了

2、数据测试
--创建本地ReplicatedMergeTree表(shard、replica为宏变量中的相应值),单台机器创建后回同步至其它机器
CREATE TABLE default.replicaTest2 on cluster test_ck_cluster(`id` Int32,`name` String) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard_name}/replicaTest', '{replica_name}') ORDER BY id

--创建分布式表
create table dis_replicaTest2 on cluster test_ck_cluster(`id` Int32,`name` String) engine = Distributed(test_ck_cluster, default, replicaTest2,  rand());

--分布式表插入数据
insert into dis_replicaTest2 values(1,'zhangsan'),(2,'lisi'),(3,'wangwu');

--分别查询分布式表以及本地表
分布式表中包含所有数据
node1:
SELECt *
FROM dis_replicaTest2
┌─id─┬─name─────┐
│  1 │ zhangsan │
└────┴──────────┘
┌─id─┬─name───┐
│  2 │ lisi   │
│  3 │ wangwu │

SELECt *
FROM replicaTest2
┌─id─┬─name─────┐
│  1 │ zhangsan │
└────┴──────────┘

node2:
SELECt *
FROM dis_replicaTest2
┌─id─┬─name─────┐
│  1 │ zhangsan │
└────┴──────────┘
┌─id─┬─name───┐
│  2 │ lisi   │
│  3 │ wangwu │

SELECt *
FROM replicaTest2
┌─id─┬─name─────┐
│  1 │ zhangsan │
└────┴──────────┘

node3:
SELECt *
FROM dis_replicaTest2
┌─id─┬─name─────┐
│  1 │ zhangsan │
└────┴──────────┘
┌─id─┬─name───┐
│  2 │ lisi   │
│  3 │ wangwu │

SELECt *
FROM replicaTest2
┌─id─┬─name───┐
│  2 │ lisi   │
│  3 │ wangwu │
└────┴────────┘

node4:
SELECt *
FROM dis_replicaTest2
┌─id─┬─name─────┐
│  1 │ zhangsan │
└────┴──────────┘
┌─id─┬─name───┐
│  2 │ lisi   │
│  3 │ wangwu │

SELECt *
FROM replicaTest2
┌─id─┬─name───┐
│  2 │ lisi   │
│  3 │ wangwu │
└────┴────────┘

以上可以看出,三条数据分为了两个分片
node1、node2为1分片互为副本存储

┌─id─┬─name─────┐
│  1 │ zhangsan │
└────┴──────────┘

node3、node4为2分片互为副本存储

┌─id─┬─name───┐
│  2 │ lisi   │
│  3 │ wangwu │
└────┴────────┘

停止node1、node3服务访问数据能够正常访问分布式表中的所有数据:
SELECt *
FROM dis_replicaTest2

┌─id─┬─name─────┐
│  1 │ zhangsan │
└────┴──────────┘
┌─id─┬─name───┐
│  2 │ lisi   │
│  3 │ wangwu │
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677365.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号