一篇带给你ClickHouse集群搭建

运维 数据库运维
ClickHouse是一个列导向数据库,它的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持shard+replication这种解决方案。它还提供了一些SQL直接接口,有比较丰富的原生client。

[[395205]]

ClickHouse是一个列导向数据库,是原生的向量化执行引擎。它在大数据领域没有走Hadoop生态,而是采用Local attached storage作为存储,这样整个IO可能就没有Hadoop那一套的局限。它的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持shard+replication这种解决方案。它还提供了一些SQL直接接口,有比较丰富的原生client。

ClickHouse数据库的特点:

  • 速度快ClickHouse性能超过了市面上大部分的列式存储数据库,相比传统的数据ClickHouse要快100-1000倍,ClickHouse还是有非常大的优势。1亿数据集:ClickHouse比Vertica约快5倍,比Hive快279倍,比MySQL快801倍。10亿数据集:ClickHouse比Vertica约快5倍,MySQL和Hive已经无法完成任务了。
  • 功能多1.支持类SQL查询;2.支持繁多库函数(例如IP转化,URL分析等,预估计算/HyperLoglog等);3.支持数组(Array)和嵌套数据结构(Nested Data Structure);4.支持数据库异地复制部署。

要注意,由于ClickHouse的快速查询还是基于系统资源的,因此在使用的时候要注意每个节点上的存储量,以及节点机器的系统资源要充足。因为查询时是使用内存进行聚合,所以同时并发查询的数量不能太多,否则就会造成资源崩溃。

环境配置

初始化环境(所有节点)

  1. # 修改机器的hostname 
  2. vi /etc/hostname 
  3.  
  4. # 配置hosts 
  5. vi /etc/hosts 
  6.  
  7. 192.168.143.20 node1 
  8. 192.168.143.21 node2 
  9. 192.168.143.22 node3 

 修改完后,执行hostname node1...3,不用重启机器使其生效

下载并安装ClickHouse(所有节点)

主要下载四个文件:

  • Clickhouse-client
  • Clickhouse-common-static
  • Clickhouse-server
  • clickhouse-server-common
  1. rpm -ivh *.rpm 

安装 zookeeper(任意一个节点)

  1. # 我这里选择node1 
  2. docker run -d --net host --name zookeeper zookeeper 

 配置集群(所有节点)

修改/etc/clickhouse-server/config.xml

  1. <!-- 将下面行注释去掉 --> 
  2. <listen_host>::</listen_host> 
  3.  
  4. <!-- 修改默认数据存储目录,比如在/home下创建目录clickhouse --> 
  5. <path>/var/lib/clickhouse/</path> 
  6. <!-- 修改为如下 --> 
  7. <path>/home/clickhouse/</path> 

修改/etc/clickhouse-server/users.xml

  1. <!-- 配置查询使用的内存,根据机器资源进行配置 --> 
  2. <max_memory_usage>5000000000000</max_memory_usage> 
  3.  
  4. <!-- 在</users>前面增加用户配置 --> 
  5. <root> 
  6.   <!-- 通过Linux命令计算出密码的sha256加密值 --> 
  7.   <password_sha256_hex>xxxx...xxxx</password_sha256_hex> 
  8.   <networks> 
  9.     <ip>::/0</ip> 
  10.   </networks> 
  11.   <profile>default</profile> 
  12.   <quota>default</quota> 
  13. </root> 

增加配置文件/etc/metrika.xml

  1. <yandex> 
  2.   <!-- ck集群节点 --> 
  3.   <clickhouse_remote_servers> 
  4.     <test_cluster> 
  5.       <shard> 
  6.         <internal_replication>true</internal_replication> 
  7.         <replica> 
  8.           <host>node1</host> 
  9.           <port>9000</port> 
  10.           <user>root</user
  11.           <password>123456</password
  12.         </replica> 
  13.       </shard> 
  14.       <shard> 
  15.         <internal_replication>true</internal_replication> 
  16.         <replica> 
  17.           <host>node2</host> 
  18.           <port>9000</port> 
  19.           <user>root</user
  20.           <password>123456</password
  21.         </replica> 
  22.       </shard> 
  23.       <shard> 
  24.         <internal_replication>true</internal_replication> 
  25.         <replica> 
  26.           <host>node3</host> 
  27.           <port>9000</port> 
  28.           <user>root</user
  29.           <password>123456</password
  30.         </replica> 
  31.       </shard> 
  32.     </test_cluster> 
  33.      
  34.     <!-- zookeeper相关配置--> 
  35.     <zookeeper-servers> 
  36.       <node index="1"
  37.         <host>node1</host> 
  38.         <port>2181</port> 
  39.       </node> 
  40.     </zookeeper-servers> 
  41.      
  42.     <networks> 
  43.       <ip>::/0</ip> 
  44.     </networks> 
  45.      
  46.     <macros> 
  47.       <replica>node1</replica> 
  48.     </macros> 
  49.      
  50.     <!-- 压缩相关配置 --> 
  51.     <clickhouse_compression> 
  52.       <case
  53.         <min_part_size>10000000000</min_part_size> 
  54.         <min_part_size_ratio>0.01</min_part_size_ratio> 
  55.         <method>lz4</method> 
  56.       </case
  57.     </clickhouse_compression> 
  58.   </clickhouse_remote_servers> 
  59. </yandex> 

 重启clickhouse服务

  1. service clickhouse-server restart 
  2.  
  3. # 如果不成功,则使用以下命令 
  4. nohup /usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml $ 

 创建数据表(所有节点)

使用可视化工具连接每个节点,在上面创建MergeTree

  1. create database test; 
  2.  
  3. create table test.data 
  4.   country String, 
  5.   province String, 
  6.   value String 
  7. engine=MergeTree() 
  8. partition by (country, province) 
  9. order by value; 

 创建分布式表(node1节点)

  1. create table test.mo as test.data ENGINE = Distributed(test_cluster, test, data, rand()); 

使用Python连接clickhouse

安装clickhouse-driver

  1. pip install clickhouse-driver 

执行命令

  1. from clickhouse_driver import Client 
  2.  
  3. # 在哪个节点创建了分布式表,就连接哪个节点 
  4. client = Client('192.168.143.20'user='root'password='123456'database='test'
  5. print(client.execute('select count(*) from mo')) 

 【编辑推荐】

 

责任编辑:姜华 来源: 今日头条
相关推荐

2022-02-17 08:53:38

ElasticSea集群部署

2021-01-26 06:58:03

AnsibleCeph集群运维

2021-07-12 06:11:14

SkyWalking 仪表板UI篇

2021-04-08 11:00:56

CountDownLaJava进阶开发

2023-03-29 07:45:58

VS编辑区编程工具

2021-01-28 08:55:48

Elasticsear数据库数据存储

2021-06-21 14:36:46

Vite 前端工程化工具

2022-04-29 14:38:49

class文件结构分析

2021-04-01 10:51:55

MySQL锁机制数据库

2022-03-22 09:09:17

HookReact前端

2021-04-14 14:16:58

HttpHttp协议网络协议

2021-03-12 09:21:31

MySQL数据库逻辑架构

2021-07-21 09:48:20

etcd-wal模块解析数据库

2024-06-13 08:34:48

2023-03-13 09:31:04

2021-10-28 08:51:53

GPIO软件框架 Linux

2022-02-25 15:50:05

OpenHarmonToggle组件鸿蒙

2021-04-14 07:55:45

Swift 协议Protocol

2021-07-08 07:30:13

Webpack 前端Tree shakin

2021-05-08 08:36:40

ObjectString前端
点赞
收藏

51CTO技术栈公众号