详解 ClickHouse 的副本机制

一、简介

副本功能只支持 MergeTree Family 的表引擎,参考文档:https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/

ClickHouse 副本的目的主要是保障数据的高可用性,即使一台 ClickHouse 节点宕机,那么也可以从其他服务器获得相同的数据。

二、原理

主要依赖 Zookeeper 来进行多个 ClickHouse 节点间数据的同步,各节点间没有主从关系

三、配置

以 3 台虚拟机节点集群为例

  • 在集群的一台节点 hadoop102 上修改配置文件

    shell 复制代码
    #1. 使用外部文件进行配置
    su root
    cd /etc/clickhouse-server/config.d
    vim metrika.xml
    
    #添加zookeeper信息
    <?xml version="1.0"?>
    <yandex>
        <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>
    </yandex>
    
    #修改metrika.xml文件的所属用户及组
    chown clickhouse:clickhouse metrika.xml
    
    cd /etc/clickhouse-server
    vim config.xml
    
    #查找zookeeper位置,添加配置
    <zookeeper incl="zookeeper-servers" optional="true" />
    <include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from>
    
    
    #2. 直接在 config.xml 中进行配置
    su root
    cd /etc/clickhouse-server
    vim config.xml
    
    #查找zookeeper位置,去掉<zookeeper></zookeeper>的注释并修改
    <zookeeper>
        <node>
            <host>hadoop102</host>
            <port>2181</port>
        </node>
        <node>
            <host>hadoop103</host>
            <port>2181</port>
        </node>
        <node>
            <host>hadoop104</host>
            <port>2181</port>
        </node>
    </zookeeper>
  • 同步配置文件到其他节点

    shell 复制代码
    /etc/clickhouse-server/config.d/metrika.xml
    /etc/clickhouse-server/config.xml
  • 启动 zookeeper 集群服务

  • 分别在 clickhouse 对应的节点启动服务

    shell 复制代码
    sudo clickhouse start

四、使用

  • 在集群一台节点 hadoop102 上进入 clickhouse 客户端并创建表

    sql 复制代码
    create table t_order_rep2 
    (
    	id UInt32,
    	sku_id String,
    	total_amount Decimal(16,2),
    	create_time Datetime
    ) 
    engine=ReplicatedMergeTree('/clickhouse/table/01/t_order_rep','rep_102')
    partition by toYYYYMMDD(create_time)
    primary key (id)
    order by (id,sku_id);
    
    --ReplicatedMergeTree中的参数说明:
    --1. '/clickhouse/table/01/t_order_rep':指定表的分片在 zookeeper 中的地址,一般按照 /clickhouse/table/{shard}/{table_name} 的格式,只有一个分片就写 01
    
    --2. 'rep_102':指定副本名称,相同的分片副本名称不能相同
  • 在集群另一台节点 hadoop103 上进入 clickhouse 客户端并创建表

    sql 复制代码
    create table t_order_rep2 
    (
    	id UInt32,
    	sku_id String,
    	total_amount Decimal(16,2),
    	create_time Datetime
    ) 
    engine=ReplicatedMergeTree('/clickhouse/table/01/t_order_rep','rep_103')
    partition by toYYYYMMDD(create_time)
    primary key (id)
    order by (id,sku_id);
  • 在 hadoop102 上向表中插入数据

    sql 复制代码
    insert into t_order_rep2 values
    (101,'sku_001',1000.00,'2020-06-01 12:00:00'),
    (102,'sku_002',2000.00,'2020-06-01 12:00:00'),
    (103,'sku_004',2500.00,'2020-06-01 12:00:00'),
    (104,'sku_002',2000.00,'2020-06-01 12:00:00'),
    (105,'sku_003',600.00,'2020-06-02 12:00:00');
  • 在 hadoop103 上查询表中数据,能正确返回则表示副本配置成功

    sql 复制代码
    select * from t_order_rep2;
相关推荐
廿一夏2 小时前
MySql存储引擎与索引
数据库·sql·mysql
商业模式源码开发2 小时前
实体门店低获客成本增长案例:3 人转介绍模型 + 消费返还机制落地分析
大数据·商业模式·私域流量
元拓数智3 小时前
智能分析落地卡壳?先补好「数据关系+语义治理」这层技术基建
大数据·分布式·ai·spark·数据关系·语义治理
lzhdim4 小时前
SQL 入门 15:SQL 事务:从 ACID 到四种常见的并发问题
数据库·sql
瀚高PG实验室4 小时前
瀚高企业版V9.1.1在pg_restore还原备份文件时提示extract函数语法问题
数据库·瀚高数据库
TDengine (老段)4 小时前
TDengine Tag 设计哲学与 Schema 变更机制
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
sxgzzn5 小时前
新能源场站数智化转型:基于数字孪生与AI的智慧运维管理平台解析
大数据·运维·人工智能
YOU OU5 小时前
Spring IoC&DI
java·数据库·spring
Muscleheng6 小时前
Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错
数据库·postgresql
清平乐的技术专栏6 小时前
【Flink学习】(二)Flink 本地环境搭建,运行第一个入门程序
大数据·flink