副本

副本的目的主要是保障数据的高可用性,即使一台 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>

同步到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 的集群是表级别的,实际企业中,大部分做了高可用,但是没有用分

片,避免降低查询性能以及操作集群的复杂性。

  1. 查看集群
show clusters;
  1. 在 Node01 上执行建表语句

    会自动同步到 Node02 和 Node03 上

    集群名字要和配置文件中的一致

    分片和副本名称从配置文件的宏定义中获取
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;
  1. 在 Node02 上创建 Distribute 分布式表
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()

  1. 在 Node01 上插入测试数据
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');
  1. 通过查询分布式表和本地表观察输出结果

    1)分布式表
select * From st_fz_order_mt_all2;
SELECT *
FROM st_fz_order_mt_all2
Query id: d8b676e9-c119-4483-8ca2-f0b5cd150a61
┌──id─┬─sku_id──┬─total_amount─┬─────────create_time─┐
│ 202 │ sku_002 │ 2000 │ 2020-06-01 12:00:00 │
│ 203 │ sku_004 │ 2500 │ 2020-06-01 12:00:00 │
│ 204 │ sku_002 │ 2000 │ 2020-06-01 12:00:00 │
└─────┴─────────┴──────────────┴─────────────────────┘
┌──id─┬─sku_id──┬─total_amount─┬─────────create_time─┐
│ 205 │ sku_003 │ 600 │ 2020-06-02 12:00:00 │
└─────┴─────────┴──────────────┴─────────────────────┘
┌──id─┬─sku_id──┬─total_amount─┬─────────create_time─┐
│ 201 │ sku_001 │ 1000 │ 2020-06-01 12:00:00 │
└─────┴─────────┴──────────────┴─────────────────────┘

(2)本地表

Node1:

 select * From st_fz_order_mt_01;
SELECT *
FROM st_fz_order_mt_01
Query id: ddcb5176-e443-4253-9877-57fec8f57311
┌──id─┬─sku_id──┬─total_amount─┬─────────create_time─┐
│ 202 │ sku_002 │ 2000 │ 2020-06-01 12:00:00 │
│ 203 │ sku_004 │ 2500 │ 2020-06-01 12:00:00 │
│ 204 │ sku_002 │ 2000 │ 2020-06-01 12:00:00 │
└─────┴─────────┴──────────────┴─────────────────────┘
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
┌──id─┬─sku_id──┬─total_amount─┬─────────create_time─┐
│ 205 │ sku_003 │ 600 │ 2020-06-02 12:00:00 │
└─────┴─────────┴──────────────┴─────────────────────┘
┌──id─┬─sku_id──┬─total_amount─┬─────────create_time─┐
│ 201 │ sku_001 │ 1000 │ 2020-06-01 12:00:00 │
└─────┴─────────┴──────────────┴─────────────────────┘
2 rows in set. Elapsed: 0.002 sec.

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

Clickhouse副本及分片的更多相关文章

  1. 列式数据库~clickhouse 副本集架构的搭建

    clickhouse 搭建副本集 一 原理:  1 依赖ZK,ZK的基础上,ZK存储数据库元数据 2  使用复制表引擎创建复制表,包括ZK路径和副本名,相同ZK路径的表可以相互复制 3  复制表本身拥 ...

  2. Mongodb3.0.6副本集+分片学习笔记

    一.使用问题记录 1. mongodb3.0.6使用mongostat参数 >./mongostat -h 127.0.0.1:27017 -u root -p 123456 /authenti ...

  3. 搭建mongodb集群(副本集+分片)

    搭建mongodb集群(副本集+分片) 转载自:http://blog.csdn.net/bluejoe2000/article/details/41323051 完整的搭建mongodb集群(副本集 ...

  4. mongoDB副本集+分片集群

    首先搭建一个副本集(三台机器) 主,从,仲裁 然后搭建分片shard1,在每台机子上启用shard1(这里就写一个分片吧!!如果写多了怕初学者会混乱,先写一个.然后可以按照同样的方法写第二个,第三个) ...

  5. MongoDB 副本集+分片 认证方式搭建

    MongoDB 副本集+分片 认证方式搭建 参考资料: https://www.cnblogs.com/ityouknow/p/7344005.htmlhttps://jorwen-fang.itey ...

  6. Mongodb分布式集群副本集+分片

    目录 简介 1. 副本集 1.1 MongoDB选举的原理 1.2 复制过程 2. 分片技术 2.1 角色 2.2 分片的片键 2.3 片键分类 环境介绍 1.获取软件包 2.创建路由.配置.分片等的 ...

  7. 【大数据面试】ClickHouse:介绍、特点、数据类型、引擎、操作、副本、分片

    1.介绍 开源的列式存储数据库(DBMS),由C++编写,用于在线分析处理查询(OLAP) 可以通过SQL查询实时生成分析数据报告 解释: DBMS:数据库管理系统 常见的列式存储数据库:Hbase. ...

  8. 【实时数仓】Day05-ClickHouse:入门、安装、数据类型、表引擎、SQL操作、副本、分片集群

    一.ClickHouse入门 1.介绍 是一个开源的列式存储数据库(DBMS) 使用C++编写 用于在线分析查询(OLAP) 能够使用SQL查询实时生成分析数据报告 2.特点 (1)列式存储 比较: ...

  9. MongoDB 高可用集群副本集+分片搭建

    MongoDB 高可用集群搭建 一.架构概况 192.168.150.129192.168.150.130192.168.150.131 参考文档:https://www.cnblogs.com/va ...

  10. Mongodb 副本集+分片

    mongodb的分片功能是建立在副本集之上的,所以首先我们尝试着配置副本集. docker启动3个已经安装好mongo的镜像 # docker run -idt --name mongodb_01 m ...

随机推荐

  1. MySQL数据库基本操作以及使用

    MySQL数据库 操纵数据库 查看数据库 show databases; 创建数据库 create database <database_name>; 删除数据库 drop databas ...

  2. 使用 setResponseStatus 函数设置响应状态码

    title: 使用 setResponseStatus 函数设置响应状态码 date: 2024/8/25 updated: 2024/8/25 author: cmdragon excerpt: 通 ...

  3. TwinCAT3 - 实现自己的Dictionary

    目录 1,前言 2,C#的字典 3,TwinCAT3的字典 定义功能块 添加方法 4,用起来 1,前言 C#有字典,TwinCAT没字典,咋办,自己写一个咯 2,C#的字典 C#的字典使用很简单,下面 ...

  4. C# 全局异常捕获(转载)

    C# 全局异常捕获 原文地址:https://www.cnblogs.com/tomahawk/articles/5993874.html 开发界有那么一个笑话,说是"「我爱你」三个字,讲出 ...

  5. Python wheel

    在 Python 的生态系统中,wheel 是一种打包格式,用于分发和安装 Python 项目.它是 Python 包的标准格式之一,旨在提高安装速度和可靠性. Wheel 的优势 快速安装:因为 w ...

  6. Docker网络下-自定义网络实战

    通过前面两篇的学习,我们对docker网络及四大网络类型都了解了.本文,咱们就来学习docker的自定义网络.我们为什么需要自定义网络呢?是为了让各个主机分门别类,井井有条.方便关联,使得网络之间可以 ...

  7. 部署在阿里云上的项目收到了阿里云发送的shiro漏洞

    编辑 ​ 还记得在十月份凯哥发布过一篇修改若依系统编辑器的文章,然后为了方便大家浏览,凯哥就部署在服务器上了,结果,没想到最近收到了阿里云漏洞扫描通知: 编辑 ​ 如果不修改的话:对于长期存在安全隐患 ...

  8. 小程序云开发 Collection.watch 监听器构建和销毁

    小程序云开发 Collection.watch 监听器构建和销毁 构建和销毁代码示例 // release/chatroom/index.js const db = wx.cloud.database ...

  9. C# 调用WebService 笔记

    最近开发工作涉及到一些关于webService调用的问题,因为太久没有做过这部分,踩了一点坑,做个笔记记录一下,避免下次踩坑. 说明 C#调用webService基本有两种方法,一种是静态调用,也就是 ...

  10. svg之viewbox缩放

    先看个示例 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> & ...