一、什么是ClickHouse
Clickhouse是由俄国Yandex在2016年发布的一个分布式数据分析型数据库,其效率要比Veritca快约5倍,其不依赖于Hadoop生态软件和基础及高可用的特性适用于许多数据分析场景
特性:
1.数据压缩
在一些列式数据库管理系统中(例如:InfiniDB CE 和 MonetDB) 并没有使用数据压缩。但是, 若想达到比较优异的性能,数据压缩确实起到了至关重要的作用。
2.数据的磁盘存储
许多的列式数据库(如 SAP HANA, Google PowerDrill)只能在内存中工作,这种方式会造成比实际更多的设备预算。ClickHouse被设计用于工作在传统磁盘上的系统,它提供每GB更低的存储成本,但如果有可以使用SSD和内存,它也会合理的利用这些资源。
3.多核心并行处理
ClickHouse会使用服务器上一切可用的资源,从而以最自然的方式并行处理大型查询。
4.多服务器分布式处理
上面提到的列式数据库管理系统中,几乎没有一个支持分布式的查询处理。
在ClickHouse中,数据可以保存在不同的shard上,每一个shard都由一组用于容错的replica组成,查询可以并行地在所有shard上进行处理。这些对用户来说是透明的
5.支持SQL
ClickHouse支持基于SQL的声明式查询语言,该语言大部分情况下是与SQL标准兼容的。
支持的查询包括 GROUP BY,ORDER BY,IN,JOIN以及非相关子查询。
不支持窗口函数和相关子查询。
6.向量引擎
为了高效的使用CPU,数据不仅仅按列存储,同时还按向量(列的一部分)进行处理,这样可以更加高效地使用CPU。
7.实时的数据更新
ClickHouse支持在表中定义主键。为了使查询能够快速在主键中进行范围查找,数据总是以增量的方式有序的存储在MergeTree中。因此,数据可以持续不断地高效的写入到表中,并且写入的过程中不会存在任何加锁的行为。
8.索引
按照主键对数据进行排序,这将帮助ClickHouse在几十毫秒以内完成对数据特定值或范围的查找。
9.适合在线查询
在线查询意味着在没有对数据做任何预处理的情况下以极低的延迟处理查询并将结果加载到用户的页面中。
10.支持近似计算
ClickHouse提供各种各样在允许牺牲数据精度的情况下对查询进行加速的方法:
用于近似计算的各类聚合函数,如:distinct values, medians, quantiles
基于数据的部分样本进行近似查询。这时,仅会从磁盘检索少部分比例的数据。
不使用全部的聚合条件,通过随机选择有限个数据聚合条件进行聚合。这在数据聚合条件满足某些分布条件下,在提供相当准确的聚合结果的同时降低了计算资源的使用。
支持数据复制和数据完整性
ClickHouse使用异步的多主复制技术。当数据被写入任何一个可用副本后,系统会在后台将数据分发给其他副本,以保证系统在不同副本上保持相同的数据。在大多数情况下ClickHouse能在故障后自动恢复,在一些少数的复杂情况下需要手动恢复。
限制:
1.没有完整的事务支持。
2.缺少高频率,低延迟的修改或删除已存在数据的能力。仅能用于批量删除或修改数据,但这符合 GDPR。
3.稀疏索引使得ClickHouse不适合通过其键检索单行的点查询。
二、部署
1、安装前准备
- CK仅支持linux且必须支持SSE4.2指令集
#查看系统是否支持SSE4.2
[[email protected] ~]# grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
SSE 4.2 supported
- 关闭防火墙
#关闭防火墙和SELINUX
[[email protected] ~]# systemctl disable firewalld
[[email protected] ~]# systemctl stop firewalld
#设置selinux为disable
[[email protected] ~]#vi /etc/selinux/config
SELINUX=disabled
[[email protected] ~]#setenforce 0
2、下载安装包,并解压
ClickHouse官方RPM: http://repo.yandex.ru/clickhouse/rpm/stable/x86_64/
需下载以下三个类型的包:
clickhouse-client-xxx.noarch.rpm
clickhouse-common-static-xxx.x86_64.rpm
clickhouse-server-xxx.noarch.rpm
把文件都复制到一个目录下
3、安装rpm
[[email protected] clickhouse-21.3.9.83]# rpm -ivh clickhouse-client-21.3.9.83-2.noarch.rpm
[[email protected] clickhouse-21.3.9.83]# rpm -ivh clickhouse-common-static-21.3.9.83-2.x86_64.rpm
[[email protected] clickhouse-21.3.9.83]# rpm -ivh clickhouse-server-21.3.9.83-2.noarch.rpm
4、配置
修改配置文件/etc/clickhouse-server/config.xml
<yandex>
<logger>
<!-- clickhouse日志相关的配置 -->
<level>trace</level>
<log>/var/log/clickhouse-server/clickhouse-server.log</log> <!--日志路径-->
<errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
<size>1000M</size>
<count>10</count>
</logger>
<http_port>8123</http_port> <!--http 客户端连接ck的端口-->
<tcp_port>9000</tcp_port> <!--tcp 客户端连接ck的端口 -->
<mysql_port>9004</mysql_port>
<listen_host>::</listen_host> <!--ip地址,配置成::可以被任意ipv4和ipv6的客户端连接,配置成0.0.0.0可被任意ipv4(除localhost)的客户端连接-->
<path>/var/lib/clickhouse/</path> <!--ck存放数据库内容的路径-->
<user_files_path>/var/lib/clickhouse/user_files/</user_files_path> <!--File 引擎文件存放的路径,一般可设置为/,这样就可以指定绝对路径-->
<users_config>users.xml</users_config> <!--指定用户配置文件-->
<default_database>default</default_database> <!--指定默认数据库-->
<!--配置prometheus信息-->
<prometheus>
<endpoint>/metrics</endpoint>
<port>9363</port>
<metrics>true</metrics>
<events>true</events>
<asynchronous_metrics>true</asynchronous_metrics>
<status_info>true</status_info>
</prometheus>
<include_from>/etc/clickhouse-server/metrika.xml</include_from> <!--指定metrika.xml配置文件-->
</yandex>
修改配置文件/etc/clickhouse-server/user.xml
<users>
<!--用户名为ck-->
<ck>
<password>123456</password> <!--明文密码-->
<networks>
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
</ck>
</users>
修改配置文件/etc/clickhouse-server/metrika.xml
<yandex>
<!-- zookeeper 不一定要和ck的节点安装在同一台机器上,只要ck结点能够访问zk即可 -->
<zookeeper-servers>
<node index="1">
<host>192.168.101.68</host>
<port>2181</port>
</node>
<node index="2">
<host>192.168.101.67</host>
<port>2181</port>
</node>
</zookeeper-servers>
<clickhouse_remote_servers>
<ckcathl> <!--集群的名字-->
<shard> <!--shard分片的配置-->
<internal_replication>false</internal_replication> <!--是否只将数据写入其中一个副本,默认为false-->
<replica> <!--shard副本的配置-->
<host>192.168.101.67</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>false</internal_replication>
<replica>
<host>192.168.101.68</host>
<port>9000</port>
</replica>
</shard>
</ckcathl>
</clickhouse_remote_servers>
</yandex>
5、创建一个非root用户
#创建普通用户,默认会创建同名的组
useradd clickhouse
#修改用户密码(密码为clickhouse)
passwd clickhouse
#创建组
groupadd clickhouse
#把用户加入组
useradd -g clickhouse clickhouse
#进入普通用户模式
su - clickhouse
#切换到root用户
exit
#给普通用户访问文件夹权限
chown -R clickhouse:clickhouse /etc/clickhouse-server /var/log/clickhouse-server /data/ck
#查看用户信息
more /etc/passwd
#删除用户,不删除用户主目录
userdel kf
#删除用户,同时删除用户主目录
userdel -r kf
6、启动服务
#服务启动时需输入root账号的登录密码
[[email protected] ~]$ systemctl start clickhouse-server
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password:
==== AUTHENTICATION COMPLETE ===
7、检验部署是否成功
- 查看状态
[[email protected] ~]$ systemctl status clickhouse-server
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2021-08-03 14:13:28 CST; 2s ago
Main PID: 25021 (clckhouse-watch)
Tasks: 47
Memory: 80.3M
CGroup: /system.slice/clickhouse-server.service
├─25021 clickhouse-watchdog --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.pid
└─25022 /usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.pid
- 连接节点
[[email protected] ~]$ clickhouse-client --host 127.0.0.1 -u ck --password 123456 --port 9000 -m
ClickHouse client version 21.3.9.83 (official build).
Connecting to 127.0.0.1:9000 as user ck.
Connected to ClickHouse server version 21.3.9 revision 54447.
localhost :) select 1;
SELECT 1
Query id: 3f8c3dae-b726-41e5-a9c1-86e3bd5f9edb
┌─1─┐
│ 1 │
└───┘
1 rows in set. Elapsed: 0.007 sec.
8、查看集群配置是否成功
[[email protected] ~]$ clickhouse-client --host 127.0.0.1 -u ck --password 123456 --port 9000 -q "select * from system.clusters where cluster='redtest8'"
redtest8 1 1 1 192.168.101.68 192.168.101.68 9000 0 default 0 0
redtest8 2 1 1 192.168.101.67 192.168.101.67 9000 1 default 0 0
出现以上所以的结果,说明配置成功