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]---------------------------

  1. 绝大多数请求都是用于读访问的
  2. 数据需要以大批次(大于1000行)进行更新,不是单行更新;或者根本没有更新操作
  3. 数据只是添加到数据库,没有必要修改
  4. 读取数据时,会从数据库中提取出大量的行,但只用到一小部分列
  5. 表很“宽”,即表中包含大量的列
  6. 查询频率相对较低(通常每台服务器每秒查询数百次或更少)
  7. 对于简单查询,允许大约50毫秒的延迟
  8. 列的值是比较小的数值和短字符串(例如,每个>URL只有60个字节)
  9. 在处理单个查询时需要高吞吐量(每台服务器每秒>高达数十亿行)
  10. 不需要事务
  11. 数据一致性要求较低
  12. 每次查询中只会查询一个大表。除了一个大表,其>余都是小表
  13. 查询结果显著小于数据源。即数据有过滤或聚合。返回结果不超过单个服务器内存大小

 

#-------------clickhouse的限制[1]------------------------------

  1. 支持真正的删除/更新支持 不支持事务(期待后续版本支>持)
  2. 不支持二级索引
  3. 有限的SQL支持,join实现与众不同
  4. 不支持窗口功能
  5. 元数据管理需要人工干预维护

#------------------------------------------------------

简单分布式方案[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如下-----------------------

这里分片不打算备份(节省资源)

<yandex>
    <!--ck集群节点-->
    <clickhouse_remote_servers>
    <clickhouse_cluster_name>



    <!--分片1:一个节点的两次:原件和复印件-->
    <shard>
    <weight>1</weight>
    <internal_replication>true</internal_replication>
    <replica>
        <host>Desktop</host>
        <port>9500</port>
        <user>appleyuchi</user>
        <password>appleyuchi</password>
        <compression>true</compression>
    </replica>
    <!--复制集1:复印件,资源有限,所以这里注释掉-->
<!--     <replica>
    <host>192.68.1.2</host>
    <port>9000</port>
    <user>default</user>
    <password>password</password>
    </replica> -->

    </shard>

<!-- 一个节点对应一个分片以及分片备份 -->

    <!--分片2-->
    <shard>
    <weight>1</weight>
    <internal_replication>true</internal_replication>
    <replica>
        <host>Laptop</host>
        <port>9500</port>
        <user>appleyuchi</user>
        <password>appleyuchi</password>
    <compression>true</compression>
    </replica>
    <!--复制集2:复印件,资源有限,所以这里注释掉-->
<!--     <replica>
    <host>192.68.1.4</host>
    <port>9000</port>
    <user>default</user>
    <password>password</password>
    </replica>
     -->
    </shard>
    </clickhouse_cluster_name>
    </clickhouse_remote_servers>
    <!--zookeeper相关配置-->



    <zookeeper-servers>
    <node index="1">
    <host>Desktop</host>
    <port>2181</port>
    </node>
    <node index="2">
    <host>Laptop</host>
    <port>2182</port>
    </node>
    <node index="3">
    <host>Laptop</host>
    <port>2183</port>
    </node>
    </zookeeper-servers>


<!-- 两级分片,下面这个东西就是上面shard的一个身份ID,只是做个标记-->
    <macros>
    <layer>01</layer>
    <shard>01</shard> <!--分片号-->
    <replica>Desktop</replica> <!--当前节点IP-->
    </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> <!--压缩算法lz4压缩比zstd快, 更占磁盘-->
    </case>
    </clickhouse_compression>

    </yandex>

 上述配置文件的内容主要就是集群的各个分片(shard)所保存的节点数据(replica).

在Laptop节点,上述内容需要修改以下部分:

    <macros>
    <layer>01</layer>
    <shard>01</shard> <!--分片号-->
    <replica>Desktop</replica> <!--当前节点IP-->
    </macros>

#------------------------------------------------------

/etc/clickhouse-server/config.xml中加入

<yandex>

.....  

  <include_from>/etc/clickhouse-server/metrika.xml</include_from>
</yandex>

#------------------------------------------------------

在集群中各个节点,分别执行

service clickhouse-server start

#------------------------------------------------------

启动时集群中各个节点必须有的进程:

域名jps
Desktop6576 NameNode
7601 ResourceManager
6757 DataNode
7847 NodeManager
72826 Jps
7324 QuorumPeerMain
Laptop2243 NodeManager
2133 QuorumPeerMain
2038 DataNode
9550 Jps
2287 QuorumPeerMain

 

#-----------启动时集群中各个节点的服务状态-----------------------

root@Desktop:/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

集群信息如下:

表中每一行表示一个节点的信息,

第一列表示,如果两行的第一列名字相同,那么这两行所代表的节点属于同一个集群

 

最后,关于上述配置的很多解释性的信息可以[9]中找到

############################################################################################

来自钉钉群的一些答疑解惑:

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我们采用[10]中的以下命令对我们刚搭建好的集群进行测试

CREATE TABLE IF NOT EXISTS all_hits ON CLUSTER clickhouse_cluster_name(p Date, i Int32) ENGINE = Distributed(clickhouse_cluster_name, default, hits)

 

由于我们是两个节点构成的集群,我们上面在 Desktop这个节点创建了表格,

我们现在故意去Laptop这个节点查询,看看是否可以查询到.

上述操作一定要注意,一定要打开Zookeeper

 

Reference:

[1]Clickhouse快速搭建高可用集群

[2]ClickHouse 分布式高可用集群搭建(转载)

[3]hbase的HA模式配置和维护

[4]ClickHouse分布式高可用集群搭建

[5]ClickHouse 高可用集群安装测试

[6]深入理解ClickHouse之5-ClickHouse集群的replica实现方式

[7]Clickhouse 入门教程(一)—— 安装与启动

[8]ClickHouse深度揭秘

[9]Data Replication

[10]Distributed DDL Queries (ON CLUSTER Clause)

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值