clickhouse分布式集群搭建(还没弄完)
clickhouse属于OLAP数据库,读远远多于写[]
根据[1]
Clickhouse 仅支持 Linux 操作系统,且机器 CPU 必须支持 SSE 4.2 指令集。
引擎 | 介绍 |
MergeTree | 是CK里最Advanced的引擎,性能超高,单机写入可以达到50w峰值,查询性能非常快 |
ReplicatedMergeTree | 基于MergeTree,同时引入ZK,做了复制 |
Distributed | 分布式引擎,本身不存储数据,可认为就是一张View,如果写入,会把请求丢到集群里的节点(有算法控制),如果查询,会帮你做查询转发再聚合返回 |
一些常用技巧归纳:
技巧 | 方法 |
clickhouse试用(官方提供了一个节点) | https://play.clickhouse.tech/ |
集群clickhouse报错信息地址(必须使用root权限才能看到log信息,否则空白一片) | /var/log/clickhouse-server/* |
查看进程 |
service clickhouse-server status |
#-----------------clickhouse应用场景[1]---------------------------
- 绝大多数请求都是用于读访问的
- 数据需要以大批次(大于1000行)进行更新,不是单行更新;或者根本没有更新操作
- 数据只是添加到数据库,没有必要修改
- 读取数据时,会从数据库中提取出大量的行,但只用到一小部分列
- 表很“宽”,即表中包含大量的列
- 查询频率相对较低(通常每台服务器每秒查询数百次或更少)
- 对于简单查询,允许大约50毫秒的延迟
- 列的值是比较小的数值和短字符串(例如,每个>URL只有60个字节)
- 在处理单个查询时需要高吞吐量(每台服务器每秒>高达数十亿行)
- 不需要事务
- 数据一致性要求较低
- 每次查询中只会查询一个大表。除了一个大表,其>余都是小表
- 查询结果显著小于数据源。即数据有过滤或聚合。返回结果不超过单个服务器内存大小
#-------------clickhouse的限制[1]------------------------------
- 支持真正的删除/更新支持 不支持事务(期待后续版本支>持)
- 不支持二级索引
- 有限的SQL支持,join实现与众不同
- 不支持窗口功能
- 元数据管理需要人工干预维护
#------------------------------------------------------
简单分布式方案[1]
MergeTree + Distributed
CREATE TABLE db.tb (date Date, ……) ENGINE = MergeTree(date, (date, hour, datetime), 8192)
CREATE TABLE db.tb_all (date Date, ……) ENGINE = Distributed(bip_ck_cluster, 'ck_test', 'dagger', rand())"
建表语句 | 备注 |
CREATE TABLE db.tb (date Date, ……) ENGINE = MergeTree(date, (date, hour, datetime), 8192) | db.tb为本地表,数据只是在本地 |
CREATE TABLE db.tb_all (date Date, ……) ENGINE = Distributed(bip_ck_cluster, 'ck_test', 'dagger', rand())" | db.tb_all为分布式表,查询这个表,引擎自动把整个集群数据计算后返回 |
#------------------------------------------------------
[2]clickhouse的集群涉及到三个文件,如果是自己一个人负责,
那么config.xml和users.xml是不需要修改的,因为都是性能参数,而不是架构部署相关的参数.
配置文件 | 作用 |
config.xml | 全局信息配置文件(可选) |
users.xml | 用户信息配置文件(可选) |
metrika.xml | 集群信息配置文件(必须配置) |
zookeeper按照[3]先搭建好,
一个简易的clickhouse分布式架构如下:
role |
shard1 |
shard2 |
集群 |
---|---|---|---|
replica |
192.168.1.1(Desktop) |
192.168.1.3(Laptop) |
集群1 |
replica |
192.168.1.2 |
192.168.1.4 |
集群2 |
上述图和表格是互相对应的(务必看懂),我的手上是一台台式机(Desktop)和一台笔记本(Laptop),
所以两个节点就可以搭建分布式clickhouse集群了.
配置时注意,不要无脑拷贝配置文件,配置文件中每一句话都要看懂
#-------------------配置文件中一个不太好理解的地方-------------------
metrika.xml中有个不太好理解的地方[5]:
<macros>
<layer>01</layer>
<shard>03</shard> <!--表示cluster01集群的03分片下的1号副本-->
<replica>cluster01-03-1</replica>
</macros>
上面的配置什么意思?
01集群的03号分片,
这个分片名字叫做cluster01-03-1
本节点保存这个分片.
同一个{layer}-{shard}下面的表互为备份,会自动同步[6]
replica是备份序号的识别符,必须互不相同,可以设置为与该节点hostname相同[6]
#--------------------完整metrika.xml如下-----------------------
#------------------------------------------------------
/etc/clickhouse-server/config.xml中加入
<yandex>
.....
<include_from>/etc/clickhouse-server/metrika.xml</include_from>
</yandex>
#------------------------------------------------------
在集群中各个节点,分别执行
service clickhouse-server start
#------------------------------------------------------
启动时集群中各个节点必须有的进程:
域名 | jps |
Desktop | 6576 NameNode 7601 ResourceManager 6757 DataNode 7847 NodeManager 72826 Jps 7324 QuorumPeerMain |
Laptop | 2243 NodeManager 2133 QuorumPeerMain 2038 DataNode 9550 Jps 2287 QuorumPeerMain |
#-----------启动时集群中各个节点的服务状态-----------------------
aaa@qq.com:/home/appleyuchi# service clickhouse-server status
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-06-19 17:08:13 CST; 4min 11s ago
Main PID: 70583 (clickhouse-serv)
Tasks: 68 (limit: 4915)
Memory: 1.9G
CGroup: /system.slice/clickhouse-server.service
└─70583 /usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.
6月 19 17:08:13 Desktop clickhouse-server[70583]: Including configuration file '/etc/clickhouse-server/metrika.xml'.
6月 19 17:08:13 Desktop clickhouse-server[70583]: Logging trace to /var/log/clickhouse-server/clickhouse-server.log
6月 19 17:08:13 Desktop clickhouse-server[70583]: Logging errors to /var/log/clickhouse-server/clickhouse-server.err.log
6月 19 17:08:13 Desktop clickhouse-server[70583]: Processing configuration file '/etc/clickhouse-server/users.xml'.
6月 19 17:08:13 Desktop clickhouse-server[70583]: Merging configuration file '/etc/clickhouse-server/users.d/default-password.xml'.
6月 19 17:08:13 Desktop clickhouse-server[70583]: Include not found: networks
6月 19 17:08:13 Desktop clickhouse-server[70583]: Saved preprocessed configuration to '/var/lib/clickhouse//preprocessed_configs/users.xml'.
6月 19 17:08:16 Desktop clickhouse-server[70583]: Processing configuration file '/etc/clickhouse-server/config.xml'.
6月 19 17:08:16 Desktop clickhouse-server[70583]: Including configuration file '/etc/clickhouse-server/metrika.xml'.
6月 19 17:08:16 Desktop clickhouse-server[70583]: Saved preprocessed configuration to '/var/lib/clickhouse//preprocessed_configs/config.xml'.
#------------------------------------------------------
连接命令:
clickhouse-client --host localhost -u default --password
查看集群信息命令:
SELECT * FROM system.clusters
集群信息如下:
表中每一行表示一个节点的信息,
第一列表示,如果两行的第一列名字相同,那么这两行所代表的节点属于同一个集群
Reference: