• CH单库数据迁移到读写分离模式


    1.安装两个clickhouse,两个clickhouse的配置如下(一般情况下只需要再新安装一个就行)

    /etc/clickhouse-server/config.xml配置文件中,在remote_servers节点增加配置如下图所示(两个clickhouse实例都是一样的)

    下面配置的为一个shard分片,第一个分片中有两个replica副本

    1. <remote_servers>
    2. <cluster1116>
    3. <shard>
    4. <internal_replication>trueinternal_replication>
    5. <replica>
    6. <host>192.168.0.11host>
    7. <port>9000port>
    8. <user>defaultuser>
    9. <password>111111password>
    10. replica>
    11. <replica>
    12. <host>192.168.0.16host>
    13. <port>9000port>
    14. <user>defaultuser>
    15. <password>111111password>
    16. replica>
    17. shard>
    18. cluster1116>
    19. remote_servers>

    配置zookeeper(两个clickhouse实例都是一样的)

    1. <zookeeper>
    2. <node index="1">
    3. <host>192.168.0.11host>
    4. <port>2181port>
    5. node>
    6. zookeeper>

    配置弘,每个实例上,都填写自己的机器名

    1. <macros>
    2. <layer>cluster86layer>
    3. <shard>01shard>
    4. <replica>aa-server11replica>
    5. macros>
    • layer 指定我们的集群标志,或者使用cluster关键字
    • shard 指定的是集群分片信息中的配置,在集群我配置的是01
    • replica 配置当前节点的备份同步节点信息

    2.创建数据库

    create database {new_database_name} ON CLUSTER {cluster_name};

    上面语句中{new_database_name} 替换成新的数据库名称,{cluster_name}替换成集群名称

    通过上面命令创建了数据库后,集群的两个节点就都有这个数据库了(执行命令的节点新建数据库后将命令写入ZK中,另外一个节点从ZK中获取信息创建数据库)

    目标

    1. ATTACH TABLE t_0addc621
    2. (
    3. `id` String,
    4. `reportName` String,
    5. `updateTime` Nullable(DateTime)
    6. )
    7. ENGINE = MergeTree()
    8. PARTITION BY toYYYYMM(date)
    9. ORDER BY id
    10. SETTINGS index_granularity = 8192

    改成

    1. CREATE TABLE IF NOT EXISTS aa_db.t_0addc621 on cluster chcluster
    2. (
    3. `id` String,
    4. `reportName` String,
    5. `updateTime` Nullable(DateTime)
    6. )
    7. ENGINE = ReplicatedMergeTree('/clickhouse/aa_db/01/t_0addc621','{replica}')
    8. PARTITION BY toYYYYMM(date)
    9. ORDER BY id
    10. SETTINGS index_granularity = 8192

    然后执行创建到数据库中

    3.迁移表

    单节点集群的建表语句用的表引擎为MergeTree,读写分离的表引擎要变成ReplicatedMergeTree:

    ENGINE = ReplicatedMergeTree('/clickhouse/aa_db/01/t_0addc621','{replica}')

    • '/clickhouse/aa_db/01/t_0addc621' shard_name 分片名称,集群所有同一个分片的节点的配置要一样,不同的表一定要不同。
    1. /clickhouse 默认的路径
    2. /aa_db库名
    3. /01 同一个分片内的所有机器应该保持相同 (share,如果在上面弘中配置了shard参数,也可以用{shard})
    4. /t_0addc621 表名
    • '{replica}' replica_name 副本名称,每一个节点都要不同,一般在上面弘中配置了replica参数,使用{replica}就行

    3.1获取单节点中全部的建表语句放入一个文件夹中

    可以从ch的metadata文件夹/data/clickhouse/metadata获取,也可以直接在DBeaver连接单节点库获取表sql

    3.2linux服务器(之前的单节点的那一台)新建一个文件夹,并上传文件

    [root@dc-server08 metadata]# mkdir -p /data/chtemp/metadata

    [root@dc-server08 metadata]# cd /data/chtemp/metadata

    上传文件到文件夹下面

     

    3.3 修改ch_table_change.sh,并执行,将全部的建表sql语句修改成带集群的、引擎为ReplicatedMergeTree的

     [root@dc-server08 metadata]# vi ch_table_change.sh

    保存后执行

     [root@dc-server08 metadata]# ./ch_table_change.sh

    3.4 跑sql建表

     [root@dc-server08 metadata]# for file in `ls | grep .sql`;do clickhouse-client --user default --password 1111111 -d aa_db --multiquery < $file;done

    4.迁移数据:修改ch_insert.sh,并执行

    [root@dc-server08 metadata]# vim ./ch_insert.sh

     

    保存后执行

    [root@dc-server08 metadata]# ./ch_insert.sh

    执行完成后集群的两个节点的表就都有数据了

    参考文档

    ClickHouse ReplicatedMergeTree家族引擎_七年·的博客-CSDN博客_clickhouse replicatedmergetree

    ClickHouse Replicated*MergeTree复制表原理、Distributed分布式表原理_我叫周利东的博客-CSDN博客_clickhouse复制表

    ClickHouse和他的朋友们(13)ReplicatedMergeTree表引擎及同步机制_老叶茶馆_的博客-CSDN博客

    ClickHouse实战-ReplicatedMergeTree分布式表 - 腾讯云开发者社区-腾讯云

    clickhouse-client命令行参数及常用案例_upupfeng的博客-CSDN博客_clickhouse-client

  • 相关阅读:
    关于CLR GC调优的一些问题
    Mysql 中令人稀里糊涂的Explain
    webpack 使用与配置
    浅谈面试Java中线程池解析
    《Android Gradle》权威指南笔记
    Delphi 开发过程中简单的版本管理与回退
    Springboot整合缓存
    C++ 宏定义+模板 实现 判断类名中是否存在某个函数名称
    Resilience4j结合微服务出现的异常
    2520. 统计能整除数字的位数 --力扣 --JAVA
  • 原文地址:https://blog.csdn.net/qq_16504067/article/details/125894977