Clickhouse扩容方案概览

本文详细介绍了ClickHouse集群在扩容过程中针对副本和分片的两种常见操作步骤。首先,针对副本扩容,描述了从新增副本节点、配置更新到数据同步的完整流程;其次,对于分片扩容,提出了历史数据重分布和不迁移历史数据的两种方案,并通过实际案例展示了具体实施过程。扩容操作确保了ClickHouse集群在扩展后能够保持数据一致性并提高服务可用性。

二、扩容

2.1 扩容副本

对于副本节点的扩容,当ck集群新增副本节点后,zk会自动将原副本中的数据同步至新增副本节点中。

1、扩容副本的大致步骤

  • 在扩容副本节点中修改配置,将集群配置中添加当前副本节点
  • 启动扩容副本节点节点,并创建相关复制表(此时该副本节点查询请求可正常路由选择所有的副本节点,但原副本节点配置文件未刷新,只能路由选择原有副本节点)
  • 原副本节点修改配置文件,将集群配置中添加新增副本节点信息

2、案例测试

1)扩容前配置

-- 配置文件
<clickhouse_remote_servers>
    <!-- Test only shard config for testing distributed storage -->
    <shard1_repl1>
        <shard>
            <!-- Optional. Shard weight when writing data. Default: 1. -->
            <weight>1</weight>
            <!-- Optional. Whether to write data to just one of the replicas. Default: false (write data to all replicas). -->
            <internal_replication>true</internal_replication>
            <replica>
                <host>sdw1</host>
                <port>9000</port>
            </replica>
        </shard>
    </shard1_repl1>
</clickhouse_remote_servers>


-- sdw1集群信息
sdw1 :) select * from system.clusters;

SELECT *
FROM system.clusters

┌─cluster──────┬─shard_num─┬─shard_weight─┬─replica_num─┬─host_name─┬─host_address──┬─port─┬─is_local─┬─user────┬─default_database─┬─errors_count─┬─estimated_recovery_time─┐
│ shard1_repl1 │         1 │            1 │           1 │ sdw1      │ 172.16.104.12 │ 9000 │        1 │ default │                  │            0 │                       0 │
└──────────────┴───────────┴──────────────┴─────────────┴───────────┴───────────────┴──────┴──────────┴─────────┴──────────────────┴──────────────┴─────────────────────────┘

1 rows in set. Elapsed: 0.005 sec.

-- sdw1上复制表信息
sdw1 :) show tables;

SHOW TABLES

┌─name─┐
│ tt1  │
└──────┘

1 rows in set. Elapsed: 0.007 sec.

sdw1 :) select * from tt1 order by id;

SELECT *
FROM tt1
ORDER BY id ASC

┌─id─┬─name─┬─create_date─┐
│  4 │ ww   │  2020-01-02 │
└────┴──────┴─────────────┘
┌─id─┬─name─┬─create_date─┐
│  6 │ dsk  │  2020-07-20 │
└────┴──────┴─────────────┘
┌─id─┬─name─┬─create_date─┐
│ 19 │ bw   │  2021-02-18 │
└────┴──────┴─────────────┘

3 rows in set. Elapsed: 0.012 sec.

2)修改配置文件

<clickhouse_remote_servers>
    <!-- Test only shard config for testing distributed storage -->
    <shard1_repl1>
        <shard>
            <!-- Optional. Shard weight when writing data. Default: 1. -->
            <weight>1</weight>
            <!-- Optional. Whether to write data to just one of the replicas. Default: false (write data to all replicas). -->
            <internal_replication>true</internal_replication>
            <replica>
                <host>sdw1</host>
                <port>9000</port>
            </replica>
<!-- 将新增的副本节点添加至集群配置中 -->
            <replica>
                <host>sdw2</host>
                <port>9000</port>
            </replica>

        </shard>
    </shard1_repl1>
</clickhouse_remote_servers>

<!-- 新增副本节点按照规律填写macros信息 -->
<macros>
    <layer>01</layer>
    <shard>01</shard>
    <replica>cluster01-01-2</replica>
</macros>

3)修改sdw2节点配置信息后,启动新增副本节点ck服务,并手动创建相关表结构。此时对于sdw2节点来讲,集群的副本信息是完整的,可正常路由到任意节点,当时对于sdw1节点来讲,由于配置文件还未刷新,集群副本仍然还是只有sdw1一个。

-- 启动sdw2节点
# systemctl  restart clickhouse-server


-- 在sdw2节点上手动创建表结构
sdw2 :) create table db1.tt1 (`id` Int32,`name` String,`create_date` Date) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/tt1', '{replica}') PARTITION BY toYYYYMM(create_date) ORDER BY id SETTINGS index_granularity = 8192;
sdw2 :) create table db1.tt2 on cluster shard1_repl1 (`id` Int32,`name` String) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/tt2', '{replica}'
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值