一、概述
clickhouse是一个数据库管理系统,对于数据的读写、存储、查询、修改、复制、事务、效率等有其独特的方法架构论;另外它是列式存储的,将一列数据作为最小的存储单元,需要多少列读多少列,减少了IO的数据量,提升了效率;最后它适合分析结构化的、干净的、不可变的流式数据,作为olap是很好的选择。
二、安装部署
clickhouse的分布式是由分片(shard)+副本(replica)来实现的,数据的一致性、高可用及容错是结合zookeeper来控制的。所以生产环境上决定采用4台机器来搭建clickhouse集群(2shard * 2 replica)。详细部署步骤如下:
1、查看机器是否支持SSE 4.2
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
2、通过yum安装clickhouse-server、clickhouse-client(每台机器都要),安装过程中可能需要升级glibc,解决办法https://cloud.tencent.com/developer/article/1463094。
yum install yum-utils
rpm --import https://repo.yandex.ru/clickhouse/CLICKHOUSE-KEY.GPG
yum-config-manager --add-repo https://repo.yandex.ru/clickhouse/rpm/stable/x86_64search
yum install clickhouse-server clickhouse-client
3、修改默认配置文件config.xml
trace
/home/hadoop/logs/clickhouse-server/clickhouse-server.log
/home/hadoop/logs/clickhouse-server/clickhouse-server.err.log
1000M
10
8123
9000
9009
192.168.16.1
0.0.0.0
/home/hadoop/data/clickhouse/
/home/hadoop/data/clickhouse/tmp/
/home/hadoop/data/clickhouse/user_files/
users.xml
default
4、添加集群配置文件metrika.xml
true
192.168.16.1
9000
true
192.168.16.2
9010
192.168.16.1
2281
192.168.16.2
2281
192.168.16.24
2281
hadooptest_clusters
01
192.168.16.1
::/0
10000000000
0.01
lz4
5、添加数据盘配置,冷热数据分离
1024
/home/hadoop/data/clickhouse/
/home/hadoop/data/clickhouse/
10485760
fast
1073741824
normal
0.2
6、配置用户权限
101310968832 50655484416
101310968832 1
0
random
1
3600
0
0
0
0
0
MVZqc4ne
::/0
default
default
a = 1
a + b < 1 or c - d > 5
c = 1
645cb15583a65c5b7d89f02b37a97fe162e79dafdacb7450de2a679ff602c9ea
::/0
default
default
7、由于需要用到zookeeper来管理,这里选择单独安装zookeeper。
7.1、将线上腾讯云的kafka安装包copy到新机器。
7.2、配置zoo.cfg文件
# The number of milliseconds of each tick
tickTime=2000
initLimit=10
dataDir=/home/hadoop2/zookeeper
clientPort=2181
minSessionTimeout=6000
maxSessionTimeout=180000
autopurge.snapRetainCount=10
autopurge.purgeInterval=1
server.21=hadoop1:2888:3888
server.22=hadoop2:2888:3888
server.23=hadoophadoop3:2888:3888
maxClientCnxns=500
7.3、启动zookeeper
bin/zkServer.sh start
8、启动clickhouse server
service clickhouse-server start
9、查看日志是否异常,连接clickhouse-client测试建表,导数,查询等。
clickhouse-client -h 192.168.16.1 --port 9000 -u bi_test --password Ny3jTUoTQUlQAb4i
hadoop2 :) select count(*) from dws_sb_olap_user_basic_1d;
SELECT count(*)
FROM dws_sb_olap_user_basic_1d
┌─count()─┐
│ 475835 │
└─────────┘
1 rows in set. Elapsed: 0.005 sec. Processed 475.83 thousand rows, 475.83 KB (92.74 million rows/s., 92.74 MB/s.)
三、clickhouse表引擎使用介绍
clickhouse的表引擎决定了数据的存放和读取方式,从而也就决定了IO效率。不同的表引擎主要决定以下几点:
数据存储和读取的位置
支持哪些查询方式
能否并发式访问数据
能不能使用索引
是否可以执行多线程请求
数据复制使用的参数
这里主要介绍三种表引擎:MergeTree、ReplicatedMergeTree、Distributed。
- MergeTree
四、监控及后期维护
1、监控
此次监控采取clickhouse exporter + prometheus + grafana方式。
1.1、在centos 7的机器上安装docker
#安装
yum -y install docker
#启动
service docker start
#验证
docker version
docker run hello-world
1.2、重新制作clickhouse exporter的镜像(因为需要更改相关环境变量)
#编写dockerfile,将参数传递进去
#Dockerfile
FROM docker.io/f1yegor/clickhouse-exporter
ADD clickhouse_exporter_start.sh /opt/clickhouse_exporter_start.sh
ENTRYPOINT ["/opt/clickhouse_exporter_start.sh"]
#clickhouse_exporter_start.sh
#!/bin/sh
export CLICKHOUSE_USER=default
export CLICKHOUSE_PASSWORD=**********
/usr/local/bin/clickhouse_exporter $*
#制作镜像
docker build -t ck_clickhouse_exporter .
#查看镜像
╰─># docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ck_clickhouse_exporter latest 3384e729d116 23 hours ago 19.6 MB
docker.io/f1yegor/clickhouse-exporter latest 9d9bfc1c7cb2 9 months ago 19.6 MB
docker.io/hello-world latest fce289e99eb9 11 months ago 1.84 kB
docker run -d -p 9116:9116 ck_clickhouse_exporter -scrape_uri=http://ip1:8123/
docker run -d -p 9117:9116 ck_clickhouse_exporter -scrape_uri=http://ip2:8123/
docker run -d -p 9118:9116 ck_clickhouse_exporter -scrape_uri=http://ip3:8123/
docker run -d -p 9119:9116 ck_clickhouse_exporter -scrape_uri=http://ip4:8123/
1.4、编辑prometheus配置文件,加入刚才启动的exporter。
- job_name : 'clickhouse'
scrape_interval: 30s
static_configs:
- targets: ['ck1:9116','ck1:9117','ck1:9118','ck1:9119']
labels:
env: 'tx_clickhouse'
1.5、导入dashboard到grafana
先将开源的dashboard导入grafana然后再根据具体需要做调整。
1.6、利用prometheus的alter manager设置报警。
配置rules
groups:
- name: Clickhouse监控规则
rules:
- alert: "clickhouse实例状态告警"
expr: clickhouse_version_integer != 19016003
for: 3m
labels:
severity: critical
annotations:
summary: "Clickhouse实例异常"
description: "Clickhouse {{$labels.instance}}实例状态异常 当前状态:{{ $value }}"
- alert: "Clickhouse查询告警"
expr: clickhouse_memory_tracking > 32212254720
for: 3m
labels:
severity: critical
annotations:
summary: "Clickhouse查询内存异常"
description: "Clickhouse {{$labels.exported_instance}}实例查询内存大于30G 当前状态:{{ $value }}"
后续再补充相关报警。
1.7、编写alertmanager_webhook相关邮件或者短信接口服务。
2、扩容
2.1、机器cpu内存扩容,因为是云主机可直接申请升配。
2.2、机器磁盘扩容,添加磁盘后可参考冷热数据分离配置不同的数据分布方式,也可以手动更改表数据分区的磁盘分布。
ALTER TABLE table_name MOVE PARTITION|PART partition_expr TO DISK|VOLUME 'disk_name'