clickhouse扩缩容

一、背景

我们之前已经学会了搭建clickhouse集群,我们搭建的是一套单分片两副本的集群,接下来我们来测试下clickhouse的扩缩容情况

二、扩容

扩容相对来说比较简单,我们原来的架构如下

host shard replica
192.169.1.1 1 1
192.169.1.2 1 2

现在我们要在这个基础上在加个shard,那么该怎么弄呢,其实很简单,准备一台机器192.168.1.3,然后将配置与之前的配置改成一致,这是基础配置,接下来是改动的部分

192.168.1.1和192.168.1.2,192.168.1.3的配置文件改动相同部分如下

文件原来的配置

xml 复制代码
<remote_servers>
        <cluster_2S_1R>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>192.168.1.1</host>
                    <port>9000</port>
                </replica>
                <replica>
                    <host>192.168.1.2</host>
                    <port>9000</port>
                </replica>
            </shard>
        </cluster_2S_1R>
    </remote_servers>

改动后的配置

xml 复制代码
<remote_servers>
        <cluster_2S_1R>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>192.168.1.1</host>
                    <port>9000</port>
                </replica>
                <replica>
                    <host>192.168.1.2</host>
                    <port>9000</port>
                </replica>
            </shard>
             <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>192.168.1.3</host>
                    <port>9000</port>
                </replica>
            </shard>
        </cluster_2S_1R>
    </remote_servers>

192.168.1.3的单独改动的配置,macros配置如下

xml 复制代码
    <macros>
        <shard>02</shard>
        <replica>192.168.1.3</replica>
    </macros>

接下来就可以查看集群信息了,发现我们新增的分片已经出现在上面了

sql 复制代码
select * from system.clusters;

扩容后的架构

host shard replica
192.169.1.1 1 1
192.169.1.2 1 2
192.169.1.3 2 1
sql 复制代码
# MergeTree的复制引擎是ReplicatedMergeTree,所以这里并不会复制数据
CREATE DATABASE db1 ON CLUSTER cluster_2S_1R;

CREATE TABLE db1.table1 ON CLUSTER cluster_2S_1R
(
    `id` UInt64,
    `column1` String
)
ENGINE = MergeTree
ORDER BY id;
# 分片1插入
INSERT INTO db1.table1 (id, column1) VALUES (1, 'abc');
# 分片2插入
INSERT INTO db1.table1 (id, column1) VALUES (2, 'def');
# 在不同节点查询可以看到不同节点的数据不一致
SELECT * FROM db1.table1;

# 创建设置分片键的表
CREATE TABLE db1.table1_dist ON CLUSTER cluster_2S_1R
(
    `id` UInt64,
    `column1` String
)
ENGINE = Distributed('cluster_2S_1R', 'db1', 'table1', rand())

# 查看表
SELECT * FROM db1.table1_dist;

三、缩容

缩容与扩容的操作反向即可,但是这里要注意,clickhouse并不具备自动调动分片的能力,所以需要手动复制分片的数据导入到还存活的分片,不然数据会丢失

相关推荐
其实防守也摸鱼几秒前
每天一个知识点——RCE漏洞
运维·服务器·数据库·windows·安全·github·漏洞
TDengine (老段)2 分钟前
TDengine 常见问题 TOP2
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
笃行3506 分钟前
数据迁移工具 KDMS 帮我把一本糊涂账算清了
数据库
笃行3501 小时前
SQLServer数据库迁移实录:十年老系统搬上 KingbaseES,T-SQL 基本没重写
数据库
落魄大学生之流水线上谋生计2 小时前
Java并发核心机制详解:线程池、CAS、AQS、锁升级
java·开发语言·数据库
Wang's Blog3 小时前
Java框架快速入门: Spring Security+OAuth2之邮件验证码发送(SMTP与API方式)
java·数据库·spring
砚底藏山河4 小时前
容错重试与指数退避:网络抖动手抖不再丢数据(魔码量化实战 #04)
java·数据库·python·金融
蓝速科技4 小时前
会议室门牌触控预约选型与落地实战指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
蓝速科技4 小时前
企业展厅数字人导览效果提升与选型实战指南丨蓝速科技
大数据·运维·数据库·人工智能·科技·microsoft
奔跑吧树袋熊4 小时前
多租户隔离该做到哪一层:从连接池到 ORM 的取舍
开发语言·数据库·oracle·系统架构