Clickhouse数据库八:搭建分片集群(高并发)

本文详细介绍了如何使用Clickhouse搭建一个包含分片和复本的高并发数据库集群。通过配置Distributed表引擎实现数据水平切分,确保数据分布在不同节点上,提高数据可用性和系统扩展性。在hadoop102、hadoop103和hadoop104上配置集群,创建分片和复本,并创建本地表和分布式表进行数据读写。通过这种方式,实现了数据的高效管理和查询。
摘要由CSDN通过智能技术生成

Clickhouse数据库八:搭建分片集群(高并发)

复本虽然能够提高数据的可用性,降低丢失风险,但是对数据的横向扩容没有解决。每台机子实际上必须容纳全量数据。

要解决数据水平切分的问题,需要引入分片的概念。

通过分片把一份完整的数据进行切分,不同的分片分布到不同的节点上。再通过Distributed表引擎把数据拼接起来一同使用。

Distributed表引擎本身不存储数据,有点类似于MyCat之于MySql,成为一种中间件,通过分布式逻辑表来写入、分发、路由来操作多台节点不同分片的分布式数据。

8.1 读写原理

在这里插入图片描述
在这里插入图片描述

8.2 分片集群规划

规划一个即分片, 有复本的集群.
在这里插入图片描述
在这里插入图片描述

说明:

  1. shard1 一共两个复本(hadoop102, hadoop103)
  2. shard2 只有一个复本(hadoop104)

8.3配置分片集群

  • 在hadoop102, 打开配置文件:
sudo vim /etc/clickhouse-server/config.d/metrika.xml
<?xml version="1.0"?>
<yandex>
    <clickhouse_remote_servers>
    <gmall_cluster> <!-- 集群名称--> 
    <shard>         <!--集群的第一个分片-->
        <internal_replication>true</internal_replication>
        <replica>    <!-- 该分片的第一个副本 -->
            <host>hadoop102</host>
            <port>9000</port>
        </replica>
        <replica>    <!-- 该分片的第二个副本-->
            <host>hadoop103</host>
            <port>9000</port>
        </replica>
    </shard>

    <shard>  <!--集群的第二个分片-->
        <internal_replication>true</internal_replication>
        <replica>    <!-- 该分片的第一个副本-->
            <host>hadoop104</host>
            <port>9000</port>
        </replica>
    </shard>
     
    </gmall_cluster>
     
    </clickhouse_remote_servers>
     
    <zookeeper-servers>
        <node index="1">
            <host>hadoop102</host>
            <port>2181</port>
        </node>

        <node index="2">
            <host>hadoop103</host>
            <port>2181</port>
        </node>
        <node index="3">
            <host>hadoop104</host>
            <port>2181</port>
        </node>
    </zookeeper-servers>
     
	<!-- 宏: 将来建表的时候, 可以从这里自动读取, 每个机器上的建表语句就可以一样了 相当于变量 -->
    <macros>
        <shard>01</shard>   <!-- 不同机器放的分片索引不一样,  hadoop103,hadoop104需要更改 -->
        <replica>hadoop102</replica>  <!-- 不同机器放的副本数不一样, hadoop103,hadoop104需要更改, 以主机命名比较方便-->
    </macros>
</yandex>

分发metrika.xml到hadoop103,hadoop104

  1. 不要忘记先在hadoop104安装clickhouse
  2. 分发/etc/clickhouse-server/config.xml
  3. 分发/etc/clickhouse-server/config.d/metrika.xml

hadoop103 的宏

	<!-- 宏: 将来建表的时候, 可以从这里自动读取, 每个机器上的建表语句就可以一样了 相当于变量 -->
    <macros>
        <shard>01</shard>   <!-- 不同机器放的分片索引不一样,  hadoop103,hadoop104需要更改 -->
        <replica>hadoop103</replica>  <!-- 不同机器放的副本数不一样, hadoop103,hadoop104需要更改, 以主机命名比较方便-->
    </macros>
</yandex>

hadoop104的宏

	<!-- 宏: 将来建表的时候, 可以从这里自动读取, 每个机器上的建表语句就可以一样了 相当于变量 -->
    <macros>
        <shard>02</shard>   <!-- 不同机器放的分片索引不一样,  hadoop103,hadoop104需要更改 -->
        <replica>hadoop104</replica>  <!-- 不同机器放的副本数不一样, hadoop103,hadoop104需要更改, 以主机命名比较方便-->
    </macros>
</yandex>

8.4 3个节点创建数据库

分别在hadoop102,hadoop103,hadoop104上创建数据库gmall

create database gmall;

8.5 任意节点创建本地表

选择任意一节点创建本地表, 会自动同步到其他节点
本地表只负责存储自己的切片数据!

create table st_order_mt_gmall on cluster gmall_cluster (
    id UInt32,
    sku_id String,
    total_amount Decimal(16,2),
    create_time  Datetime
) engine =ReplicatedMergeTree('/clickhouse/tables/gmall/{shard}/st_order_mt_gmall','{replica}')
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id,sku_id);

8.6 创建分布式表st_order_mt_gmall_all

在hadoop102创建分布式表

create table st_order_mt_gmall_all on cluster gmall_cluster
(
    id UInt32,
    sku_id String,
    total_amount Decimal(16,2),
    create_time  Datetime
)engine = Distributed(gmall_cluster,gmall, st_order_mt_gmall,hiveHash(sku_id));

8.7 通过分布式表添加数据

insert into  st_order_mt_gmall_all 
values(201,'sku_001',1000.00,'2020-06-01 12:00:00') ,
(202,'sku_002',2000.00,'2020-06-01 12:00:00'),
(203,'sku_004',2500.00,'2020-06-01 12:00:00'),
(204,'sku_002',2000.00,'2020-06-01 12:00:00')
(205,'sku_003',600.00,'2020-06-02 12:00:00')

8.8 查询数据

  • 通过分布式表查询
select * from st_order_mt_gmall_all;

可以查询到所有数据!
在这里插入图片描述

  • 通过本地表查询
select * from st_order_mt_gmall;

只能查到当前节点的分片数据
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值