一、什么是ClickHouse
ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。适合巨量数据环境下用户数据查询、数据分析等工作。ClickHouse 简称为 CH,是近2年日益火起来的一款类数据库分析工具。
CH官网:https://clickhouse.yandex/
CH下载地址:
Cent6 访问链接: http://repo.red-soft.biz/repos/clickhouse/stable/el6/
Cent7 访问链接: http://repo.red-soft.biz/repos/clickhouse/stable/el7/
二、ClickHouse 分布式集群部署
- 安装前的准备: 3台CVM(CentOS 7.6 ),ZK 3.6.2
- 下载对应的安装包,如下:
3. 安装部署,为了节省资源,每个节点既是ZK节点,又是CH节点。3个CVM对应为CH1、CH2、CH3
说明:这里仅以一台CVM为例进行操作,其它2台则复制同类操作即可。
4. 操作系统相关安全设置
- CentOS 取消打开文件数限制,在/etc/security/limits.conf、/etc/security/limits.d/90-nproc.conf这2个文件的末尾加入内容:
* soft nofile 655360
* hard nofile 655360
* soft nproc 131072
* hard nproc 131072
重启服务器之后生效,用ulimit -n 或者ulimit -a查看设置结果;
- CentOS取消SELINUX,并重启OS。
vim /etc/selinux/config
SELINUX=disabled
- 关闭防火墙
iptables -F
iptables -X
iptables -Z
- 安装依赖
[root@CH1 ~]# yum install -y libtool
[root@CH1 ~]# yum install -y *unixODBC*
5. 上传并安装CH安装包,执行如下命令:
代码语言:javascript复制rpm -ivh *.rpm
如下,就表示安装完毕:
6. 修改配置文件config.xml,添加如下配置
代码语言:javascript复制vim /etc/clickhouse-server/config.xml //开启节点间远程通信的功能,每个节点都要操作
<listen_host>::</listen_host>
<!-- <listen_host>::1</listen_host> -->
<!-- <listen_host>127.0.0.1</listen_host> -->
7. 在三台机器的etc目录下新建metrika.xml文件,这个名称不能变!配置文件内容如下:
代码语言:javascript复制添加如下内容:
<yandex>
<clickhouse_remote_servers>
<perftest_3shards_1replicas> //cluser_name 可以自定义
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>CH1</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<internal_replication>true</internal_replication>
<host>CH2</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>CH3</host>
<port>9000</port>
</replica>
</shard>
</perftest_3shards_1replicas>
</clickhouse_remote_servers>
<zookeeper-servers>
<node index="1">
<host>hadoop102</host>
<port>2181</port>
</node>
<node index="2">
<host>hadoop103</host>
<port>2181</port>
</node>
<node index="3">
<host>hadoop104</host>
<port>2181</port>
</node>
</zookeeper-servers>
<macros>
<replica>CH1</replica> //这里需要自定义,跟本机Hostname相同
</macros>
<networks>
<ip>::/0</ip>
</networks>
<clickhouse_compression>
<case>
<min_part_size>10000000000</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<method>lz4</method>
</case>
</clickhouse_compression>
</yandex>
8,机器启动 ClickServer,如下:
代码语言:javascript复制clickhouse-server --config-file=/etc/clickhouse-server/config.xml
9,使用client连接server,如下,报错:
原因:节点未安装ZK组件
10,安装zk集群,这里附上截图:
11,再次启动,连接成功:
三、ClickHouse 实践
上面我们经过配置,一个3节点的分布式CH集群安装成功,既然是分布式集群,那我们就创建分布式表来体验一把:
我们使用 Distributed 引擎来试验:
1)在CH1,CH2,CH3上分别创建一个单表t;
代码语言:javascript复制create table t(id UInt16, name String) ENGINE=TinyLog;
2)在三台机器的t表中插入一些数据
代码语言:javascript复制insert into t(id, name) values (1, 'zhangsan');
insert into t(id, name) values (2, 'lisi');
3)在CH1上创建分布式表
代码语言:javascript复制create table dis_table(id UInt16, name String) ENGINE=Distributed(perftest_3shards_1replicas, default, t, id);
4) 然后我们 select * from dis_table,看看有什么效果??
结果:通过创建分布式表,将3个节点上的单表进行了统一的集合规整展示。
5) 往该分布式表里插入一些数据,默认会在哪个表上呢?
代码语言:javascript复制insert into dis_table values(3,"lihua")
6) 接着,查一下该分布式表: select *from dis_table
默认插入的新数据会按照一定的规则插入到不同节点的单表上。如下:
那么,至此,一个CH分布式集群的安装,部署,测试基本成功。
四、总结
在腾讯云,我们可以快速构建一个基于云端的安全、稳定的CH集群,欢迎大家来腾讯云购买使用。