docker-compose 快速部署clickhouse集群
在本教程中,我们将学习如何使用 Docker Compose 部署一个带有三节点的 ClickHouse 集群,并使用 ZooKeeper 作为分布式协调服务。
前提条件
注意事项:
- 镜像版本号注意保持一致 [zookeeper:3.7, clickhouse/clickhouse-server:22.5.4]
- config里面的参数有些是必须的,日志报错缺少参数去官方文档里找 config.xm参数官网
在开始之前,请确保您的系统已经安装了以下工具:
- Docker
- Docker Compose
目录结构
首先,我们需要为 ClickHouse 集群创建目录结构来存放数据和配置文件。执行以下命令来创建目录:
mkdir -p clickhouse_cluster/{zkdata,zkdatalog,data/clickhouse01,data/clickhouse02,data/clickhouse03,config/clickhouse01,config/clickhouse02,config/clickhouse03}
第一步:编写 docker-compose.yml
文件
在 clickhouse_cluster
目录下创建 docker-compose.yml
文件,这个文件定义了 ZooKeeper 和三个 ClickHouse 节点。为了安全性,我们会替换敏感数据如密码。
version: '3.8'services:zookeeper:image: zookeeper:3.7container_name: zookeeperrestart: alwaysports:- "2181:2181"environment:ZOO_MY_ID: 1volumes:- ./zkdata:/data- ./zkdatalog:/datalog clickhouse01:image: clickhouse/clickhouse-server:22.5.4container_name: clickhouse01restart: alwaysports:- "8123:8123" # HTTP 接口- "9000:9000" # TCP 接口- "9009:9009" # Internode 通信接口volumes:- ./data/clickhouse01:/var/lib/clickhouse- ./config/clickhouse01:/etc/clickhouse-serverenvironment:CLICKHOUSE_DB: defaultCLICKHOUSE_PASSWORD: "your_secure_password"depends_on:- zookeeperclickhouse02:image: clickhouse/clickhouse-server:22.5.4container_name: clickhouse02restart: alwaysports:- "8124:8123" # HTTP 接口- "9001:9000" # TCP 接口- "9010:9009" # Internode 通信接口volumes:- ./data/clickhouse02:/var/lib/clickhouse- ./config/clickhouse02:/etc/clickhouse-serverenvironment:CLICKHOUSE_DB: defaultCLICKHOUSE_PASSWORD: "your_secure_password"depends_on:- zookeeperclickhouse03:image: clickhouse/clickhouse-server:22.5.4container_name: clickhouse03restart: alwaysports:- "8125:8123" # HTTP 接口- "9002:9000" # TCP 接口- "9011:9009" # Internode 通信接口volumes:- ./data/clickhouse03:/var/lib/clickhouse- ./config/clickhouse03:/etc/clickhouse-serverenvironment:CLICKHOUSE_DB: defaultCLICKHOUSE_PASSWORD: "your_secure_password"depends_on:- zookeeper
关键点说明:
- Zookeeper:Zookeeper 用于协调 ClickHouse 集群中的分布式事务。
- ClickHouse 节点:我们设置了三个 ClickHouse 节点(
clickhouse01
、clickhouse02
和clickhouse03
),它们通过不同的端口进行通信。 - 密码:为了安全性,密码使用占位符
"your_secure_password"
,请确保使用强密码替换。
第二步:编写 ClickHouse 配置文件
接下来,创建每个 ClickHouse 节点的配置文件。以 config/clickhouse01/config.xml
为例,其他节点的配置类似。我们将替换原始文件中的敏感信息。
在 clickhouse_cluster/config/clickhouse01
目录下创建 config.xml
文件:
<yandex><profiles><default><max_memory_usage>10000000000</max_memory_usage><readonly>0</readonly></default></profiles><path>/var/lib/clickhouse/</path><tmp_path>/var/lib/clickhouse/tmp/</tmp_path><user_files_path>/var/lib/clickhouse/user_files/</user_files_path> <http_port>8123</http_port> <logger><log>/var/log/clickhouse-server/clickhouse.log</log><errorlog>/var/log/clickhouse-server/clickhouse_error.log</errorlog></logger><format_schema_path>/var/lib/clickhouse/format_schemas/</format_schema_path><default_profile>default</default_profile><users_config>users.xml</users_config><mark_cache_size>5368709120</mark_cache_size><zookeeper><node><host>zookeeper</host><port>2181</port></node></zookeeper><tcp_port>9000</tcp_port><remote_servers><my_clickhouse_cluster><shard><replica><host>clickhouse01</host><port>9000</port></replica><replica><host>clickhouse02</host><port>9000</port></replica></shard><shard><replica><host>clickhouse03</host><port>9000</port></replica></shard></my_clickhouse_cluster></remote_servers><listen_host>::</listen_host><listen_host>0.0.0.0</listen_host>
</yandex>
关键配置说明:
- ZooKeeper:配置了 ClickHouse 连接 Zookeeper,使用
zookeeper:2181
地址。 - 集群配置:
remote_servers
配置了集群中的三个节点,分别对应clickhouse01
、clickhouse02
和clickhouse03
。
第三步:编写 users.xml
文件
在 config/clickhouse01/
目录下创建 users.xml
文件,用于定义用户及其权限。为了安全起见,密码将以占位符形式存在。
<?xml version="1.0"?>
<yandex><profiles><default><max_memory_usage>10000000000</max_memory_usage><use_uncompressed_cache>0</use_uncompressed_cache><load_balancing>random</load_balancing></default></profiles><users><default><password>your_secure_password</password><!-- Password could be specified in plaintext or in SHA256 (in hex format).If you want to specify password in plaintext (not recommended), place it in 'password' element.Example: <password>qwerty</password>.Password could be empty.If you want to specify SHA256, place it in 'password_sha256_hex' element.Example: <password_sha256_hex>65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5</password_sha256_hex>How to generate decent password:Execute: PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'In first line will be password and in second - corresponding SHA256.也可以使用加密的密码,用上面的shell命令就可以生成--><!-- <password_double_sha1_hex></password_double_sha1_hex> --><networks incl="networks" replace="replace"><ip>::1</ip><ip>127.0.0.1</ip></networks><profile>default</profile><quota>default</quota></default><readonly_user><password>your_readonly_password</password><networks incl="networks" replace="replace"><ip>::/0</ip></networks><profile>readonly</profile><quota>default</quota></readonly_user></users>
</yandex>
用户权限说明:
default
用户具有默认的读写权限。readonly_user
用户具有只读权限,并且可以从任意 IP 访问。
第四步:启动 ClickHouse 集群
在 clickhouse_cluster
目录下,运行以下命令来启动整个集群:
docker-compose up -d
docker-compose up -d
将启动所有服务,包括 ZooKeeper 和三个 ClickHouse 节点。
第五步:验证集群部署
-
1.运行以下命令查看容器状态:
docker-compose ps
确保所有容器都处于 “Up” 状态。
-
2.通过 HTTP 接口访问任意 ClickHouse 节点,查看是否可以成功连接:
curl http://localhost:8123
返回类似于
Ok.
的响应即表示成功。 -
3.从单节点查询集群状态
docker exec -it clickhouse01 bash clickhouse-clientselect * from system.clusters; select * from system.zookeeper where path='/clickhouse';
六:文件夹结构
参考链接:
https://www.cnblogs.com/yoyo1216/p/13731225.html
https://www.cnblogs.com/syw20170419/p/16250500.html
https://clickhouse.com/docs/en/operations/server-configuration-parameters/settings
相关文章:

docker-compose 快速部署clickhouse集群
在本教程中,我们将学习如何使用 Docker Compose 部署一个带有三节点的 ClickHouse 集群,并使用 ZooKeeper 作为分布式协调服务。 前提条件 注意事项: 镜像版本号注意保持一致 [zookeeper:3.7, clickhouse/clickhouse-server:22.5.4]config…...

闯关训练三:Git 基础知识
任务1: 破冰活动:自我介绍 点击Fork目标项目,创建一个新的Fork 获取仓库链接 在连接好开发机的vscode终端中逐行执行以下代码: git clone https://github.com/KelvinIII/Tutorial.git # 修改为自己frok的仓库 cd Tutorial/ git branch -a g…...

Java--IO基本流
IO流 概述 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrls ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘…...
结合大语言模型的机械臂抓取操作简单介绍
一、大语言模型与机械臂抓取的基本操作 1. 大语言模型简介 大语言模型是基于深度学习技术构建的自然语言处理模型,能够生成、理解和处理文本信息。这些模型通过训练大量的文本数据,学习语法、上下文和常识,能够执行多种任务,如文…...

Vivado - BD(差分时钟、简单分频、RESET、KEY)
目录 1. 简介 1.1 要点 1.2 buffer 介绍 2. vivado 工程 2.1 Block Design 2.2 IBUFDS 2.3 BUFGCE_DIV 2.4 Processor System Reset 2.5 key_mod 2.6 led_drv 3. 编译与调试 3.1 XDC 3.2 Debug 4. 总结 1. 简介 1.1 要点 了解 Utility Buffer v2.2 中的 Buffer…...

7--苍穹外卖-SpringBoot项目中套餐管理 详解(一)
前言 目录 新增套餐 需求分析和设计 代码开发 根据分类id查询菜品 Controller层 Service层 ServiceImpl层 Mapper层 DishMapper.xml 新增套餐 实体类 mapper层 Service层 ServiceImpl层 Mapper层 SetmealMapper.xml setmealDishMapper.xml 套餐分页查询 需求分…...
【尚硅谷】RocketMQ 消息队列学习笔记
RocketMQ 和 Kafka 消息队列概念比较? 好的!RocketMQ 和 Kafka 都是分布式消息队列系统,它们的核心概念有很多相似之处,但在具体实现和命名上有所不同。下面我通过一个表格来对比 RocketMQ 和 Kafka 中的五个概念:消息…...

C题(三)芝麻开门 --- strcmp函数应用
场景一:“芝麻开门 ”是通往C语言的大门的暗号,现在你需要说对暗号,大门才会打开。 【分解目标1】字符串的输入 char arr[20] { 0 }; //字符的集合---字符串(数组表示)//20为预定的数组的大小scanf("%s", a…...

C++函数模板、选择排序实现(从大到小)
template <class T> void mysw (T &a , T &b) {T temp b;b a;a temp; }template <class T> void muSort( T &arr ,int len) {//该实现为选择排序(高到低)for (int i 0; i < len; i) {int max i ; //首先默认本次循环首位元素为最大for (int j …...

EasyExcel使用介绍
EasyExcel使用 1、EasyExcel介绍 1.1 官网介绍 传统操作Excel大多都是利用Apach POI进行操作的,但是POI框架并不完善,使用过程非常繁琐且有较多的缺陷: 动态操作Excel非常繁琐,对于新手来说,很难在短时间内上手;读写时需要占用…...
字段临时缓存包装器
前言 在实际开发中,我们有时候存在一种需求,例如对于某个字段,我们希望在某个明确的保存节点前对字段的修改都仅作为缓存保留,最终是否应用这些修改取决于某些条件,比如玩家对游戏设置的修改可能需要玩家明确确认应用修…...

Python(三)——列表
文章目录 创建列表访问下标遍历列表元素新增元素查找元素删除元素连接列表切片操作 创建列表 创建列表主要有两种方式 [ ]表示一个空的列表 a [] print(type(a)) # <class list> print(a) # []通过list()的方式来创建一个空列表 a list() print(type(a)) # …...

MySQL--三大范式(超详解)
目录 一、前言二、三大范式2.1概念2.2第一范式(1NF)2.3第二范式(2NF)2.3第三范式(3NF) 一、前言 欢迎大家来到权权的博客~欢迎大家对我的博客进行指导,有什么不对的地方,我会及时改进…...
追梦无Bug的软件世界
追梦无Bug的软件世界:测试人员的视角与探索 我有一个梦想,今天我们共同承载着一个愿景:创造一个没有Bug的软件世界。 我梦想有一天,用户将享受到完全无Bug的软件体验,用户不再因为软件中的Bug而感到困扰和沮丧。 我梦…...
在C#中使用Redis实现高效消息队列
使用Redis实现C#中的消息队列 Redis是一种开源的内存数据结构存储系统,因其高性能和灵活性被广泛用于缓存、数据库和消息队列等场景。本文将详细介绍如何在C#中使用Redis实现一个简单的消息队列,涵盖环境准备、代码实现和使用示例。 1. 环境准备 1.1 安装Redis 首先,确保…...

微服务JMeter解析部署使用全流程
目录 1、介绍 2、下载 3、运行 4、设置简体中文版 5、开始测试 1、添加线程组 2、添加监听器 3、添加请求 先.测试userController里的查询方法 6、查看结果 1、查看结果树 2、汇总报告 3、聚合报告 7、JMeter报错 1、介绍 Apache JMeter 是 Apache 组织基于 Java…...

Python 从入门到实战32(数据库MySQL)
我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库编程接口操作的相关知识。今天我们将学习…...
hrnet训练的pt模型结合目标检测进行关键点识别的更准确前向推理
本篇在将图像输入hrnet识别之前先进行目标检测来确定识别的位置,让识别更加精准。 本段代码设置了一个区域框BOX,让人走入区域内才开始检测,适用于考核等场景,也可以直接去掉BOX也是一样的效果。若画面背景中有多个行人࿰…...
Leetcode 3306. Count of Substrings Containing Every Vowel and K Consonants II
Leetcode 3306. Count of Substrings Containing Every Vowel and K Consonants II 1. 解题思路2. 代码实现 题目链接:3306. Count of Substrings Containing Every Vowel and K Consonants II 1. 解题思路 这一题的话思路上就是一个滑动窗口,考察没一…...

算法笔记(五)——分治
文章目录 算法笔记(五)——分治快排颜色分类排序数组数组中的第K个最大元素库存管理 III 归并排序数组交易逆序对的总数计算右侧小于当前元素的个数翻转对 算法笔记(五)——分治 分治算法字面上的解释是“分而治之”,就…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...