Clickhouse副本及分片

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

配置副本

1. zookeeper集群准备

2. Clickhouse准备两个节点

Node1, Node2
在 Node1 的/etc/clickhouse-server/config.d 目录下创建一个名为 metrika.xml
的配置文件,内容如下:
注:也可以不创建外部文件,直接在 config.xml 中指定

vim /etc/clickhouse-server/config.d/metrika.xml
<?xml version="1.0"?>
<yandex>
    <zookeeper-servers>
        <node index="1">
            <host>node2</host>
            <port>2181</port>
        </node>
        <node index="2">
            <host>xxx</host>
            <port>2181</port>
        </node>
        <node index="3">
            <host>xxx</host>
            <port>2181</port>
        </node>
        </zookeeper-servers>
</yandex>

3. 同步到Node2

scp /etc/clickhouse-server/config.d/metrika.xml root@Node2:/etc/clickhouse-server/config.d/

4. 在 Node1 的/etc/clickhouse-server/config.xml 中增加

<zookeeper incl="zookeeper-servers" optional="true">
<include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from>
</zookeeper>

同步到node2

重启clickhouse:

sudo clickhouse restart

5. 在 Node1 和 Node2 上分别建表

create table t_order_rep7 (
id UInt32,
sku_id String,
total_amount Decimal(16,2),
create_time Datetime
) engine =ReplicatedMergeTree('/clickhouse/table/01/t_order_rep7','rep_fz_102')
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id,sku_id);
create table t_order_rep7 (
id UInt32,
sku_id String,
total_amount Decimal(16,2),
create_time Datetime
) engine =ReplicatedMergeTree('/clickhouse/table/01/t_order_rep7','rep_fz_103')
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id,sku_id);

参数解释:
ReplicatedMergeTree 中,
第一个参数是分片的 zk_path 一般按照:/clickhouse/table/{shard}/{table_name} 的格式写,如果只有一个分片就写 01 即可。
第二个参数是副本名称,相同的分片副本名称不能相同

7. 验证

node1上插入数据,然后在node2上执行select 验证,可以查询出结果,说明副本配置正确

副本虽然能够提高数据的可用性,降低丢失风险,但是每台服务器实际上必须容纳全量数据,对数据的横向扩容没有解决。
要解决数据水平切分的问题,需要引入分片的概念。通过分片把一份完整的数据进行切分,不同的分片分布到不同的节点上,再通过 Distributed 表引擎把数据拼接起来一同使用。

ClickHouse 的集群是表级别的,实际企业中,大部分做了高可用,但是没有用分
片,避免降低查询性能以及操作集群的复杂性。

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

在Node02和Node03上查看表是否创建成功

show tables;
create table st_fz_order_mt_all2 on cluster gmall_cluster
            (
            id UInt32,
            sku_id String,
            total_amount Decimal(16,2),
            create_time Datetime
            )engine = Distributed(gmall_cluster,default, st_fz_order_mt_01,hiveHash(sku_id));

参数含义:
Distributed(集群名称,库名,本地表名,分片键)
分片键必须是整型数字,所以用 hiveHash 函数转换,也可以 rand()

insert into st_order_mt_all2 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');
select * From st_fz_order_mt_all2;
SELECT *
FROM st_fz_order_mt_all2
Query id: d8b676e9-c119-4483-8ca2-f0b5cd150a61
&#x250C;&#x2500;&#x2500;id&#x2500;&#x252C;&#x2500;sku_id&#x2500;&#x2500;&#x252C;&#x2500;total_amount&#x2500;&#x252C;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;create_time&#x2500;&#x2510;
&#x2502; 202 &#x2502; sku_002 &#x2502;         2000 &#x2502; 2020-06-01 12:00:00 &#x2502;
&#x2502; 203 &#x2502; sku_004 &#x2502;         2500 &#x2502; 2020-06-01 12:00:00 &#x2502;
&#x2502; 204 &#x2502; sku_002 &#x2502;         2000 &#x2502; 2020-06-01 12:00:00 &#x2502;
&#x2514;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2518;
&#x250C;&#x2500;&#x2500;id&#x2500;&#x252C;&#x2500;sku_id&#x2500;&#x2500;&#x252C;&#x2500;total_amount&#x2500;&#x252C;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;create_time&#x2500;&#x2510;
&#x2502; 205 &#x2502; sku_003 &#x2502;          600 &#x2502; 2020-06-02 12:00:00 &#x2502;
&#x2514;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2518;
&#x250C;&#x2500;&#x2500;id&#x2500;&#x252C;&#x2500;sku_id&#x2500;&#x2500;&#x252C;&#x2500;total_amount&#x2500;&#x252C;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;create_time&#x2500;&#x2510;
&#x2502; 201 &#x2502; sku_001 &#x2502;         1000 &#x2502; 2020-06-01 12:00:00 &#x2502;
&#x2514;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2518;

(2)本地表

Node1:

 select * From st_fz_order_mt_01;
SELECT *
FROM st_fz_order_mt_01
Query id: ddcb5176-e443-4253-9877-57fec8f57311
&#x250C;&#x2500;&#x2500;id&#x2500;&#x252C;&#x2500;sku_id&#x2500;&#x2500;&#x252C;&#x2500;total_amount&#x2500;&#x252C;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;create_time&#x2500;&#x2510;
&#x2502; 202 &#x2502; sku_002 &#x2502;         2000 &#x2502; 2020-06-01 12:00:00 &#x2502;
&#x2502; 203 &#x2502; sku_004 &#x2502;         2500 &#x2502; 2020-06-01 12:00:00 &#x2502;
&#x2502; 204 &#x2502; sku_002 &#x2502;         2000 &#x2502; 2020-06-01 12:00:00 &#x2502;
&#x2514;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2518;
3 rows in set. Elapsed: 0.002 sec.

Node2:

Node3:

date1001 :) select * From st_fz_order_mt_01;
SELECT *
FROM st_fz_order_mt_01
Query id: 7a336004-7040-4098-948e-1e7c5d983edb
&#x250C;&#x2500;&#x2500;id&#x2500;&#x252C;&#x2500;sku_id&#x2500;&#x2500;&#x252C;&#x2500;total_amount&#x2500;&#x252C;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;create_time&#x2500;&#x2510;
&#x2502; 205 &#x2502; sku_003 &#x2502;          600 &#x2502; 2020-06-02 12:00:00 &#x2502;
&#x2514;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2518;
&#x250C;&#x2500;&#x2500;id&#x2500;&#x252C;&#x2500;sku_id&#x2500;&#x2500;&#x252C;&#x2500;total_amount&#x2500;&#x252C;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;create_time&#x2500;&#x2510;
&#x2502; 201 &#x2502; sku_001 &#x2502;         1000 &#x2502; 2020-06-01 12:00:00 &#x2502;
&#x2514;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2534;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2518;
2 rows in set. Elapsed: 0.002 sec.

数据分布在Node1和Node3两个节点上

Original: https://www.cnblogs.com/bigdata1024/p/16250691.html
Author: chaplinthink
Title: Clickhouse副本及分片

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/565327/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球