ClickHouse 分布式集群的安装、使用

2020-12-13 15:32:07 浏览数 (2)

一、什么是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 分布式集群部署

  1. 安装前的准备: 3台CVM(CentOS 7.6 ),ZK 3.6.2
  2. 下载对应的安装包,如下:
CH安装包CH安装包

3. 安装部署,为了节省资源,每个节点既是ZK节点,又是CH节点。3个CVM对应为CH1、CH2、CH3

说明:这里仅以一台CVM为例进行操作,其它2台则复制同类操作即可。

4. 操作系统相关安全设置

  • CentOS 取消打开文件数限制,在/etc/security/limits.conf、/etc/security/limits.d/90-nproc.conf这2个文件的末尾加入内容:
代码语言:javascript复制
* soft nofile 655360
* hard nofile 655360
* soft nproc 131072 
* hard nproc 131072

重启服务器之后生效,用ulimit -n 或者ulimit -a查看设置结果;

  • CentOS取消SELINUX,并重启OS。
代码语言:javascript复制
vim /etc/selinux/config
SELINUX=disabled
  • 关闭防火墙
代码语言:javascript复制
iptables -F
iptables -X
iptables -Z
  • 安装依赖
代码语言:javascript复制
[root@CH1 ~]# yum install -y libtool
[root@CH1 ~]# yum install -y *unixODBC*

5. 上传并安装CH安装包,执行如下命令:

代码语言:javascript复制
rpm -ivh *.rpm

如下,就表示安装完毕:

CH安装成功CH安装成功

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,如下,报错:

client连接server报错client连接server报错

原因:节点未安装ZK组件

10,安装zk集群,这里附上截图:

zk配置文件zk配置文件

11,再次启动,连接成功:

使用client连接server成功使用client连接server成功

三、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

插入数据查询插入数据查询

默认插入的新数据会按照一定的规则插入到不同节点的单表上。如下:

CH1上承担该新数据CH1上承担该新数据

那么,至此,一个CH分布式集群的安装,部署,测试基本成功。

四、总结

在腾讯云,我们可以快速构建一个基于云端的安全、稳定的CH集群,欢迎大家来腾讯云购买使用。

0 人点赞