docker-compose 快速部署clickhouse集群

在本教程中,我们将学习如何使用 Docker Compose 部署一个带有三节点的 ClickHouse 集群,并使用 ZooKeeper 作为分布式协调服务。

前提条件

注意事项:

  1. 镜像版本号注意保持一致 [zookeeper:3.7, clickhouse/clickhouse-server:22.5.4]
  2. 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 节点(clickhouse01clickhouse02clickhouse03),它们通过不同的端口进行通信。
  • 密码:为了安全性,密码使用占位符 "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 配置了集群中的三个节点,分别对应 clickhouse01clickhouse02clickhouse03

第三步:编写 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. 1.运行以下命令查看容器状态:

    docker-compose ps
    

    确保所有容器都处于 “Up” 状态。

  2. 2.通过 HTTP 接口访问任意 ClickHouse 节点,查看是否可以成功连接:

    curl http://localhost:8123
    

    返回类似于 Ok. 的响应即表示成功。

  3. 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/880811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp微信小程序使用ucharts遮挡自定义tabbar的最佳解决方案

如图所示&#xff1a; 使用的ucharts遮挡住了我自定义的tabbar&#xff08;如果不是提需求的有病&#xff0c;我才不会去自定义tabbar&#xff09; 查阅了不少文档&#xff0c;说是开启 ucharts 的 canvas2d 即可&#xff1a; 官网文档地址&#xff1a; uCharts官网 - 秋云…

资源《Arduino 扩展板1-LED灯》说明。

资源链接&#xff1a;Arduino 扩展板1-LED灯 1.文件明细&#xff1a; 2.文件内容说明 包含&#xff1a;AD工程、原理图、PCB。 3.内容展示 4.简述 该文件为PCB工程&#xff0c;采用AD做的。 该文件打板后配合Arduino使用&#xff0c;属于Arduino的扩展板。 该文件主要有…

深度学习自编码器 - 分布式表示篇

序言 深度学习作为人工智能领域的重要分支&#xff0c;其核心在于表示学习&#xff08; Representation Learning \text{Representation Learning} Representation Learning&#xff09;&#xff0c;尤其是分布式表示&#xff08; Distributed Representation \text{Distribut…

netty之基础aio,bio,nio

前言 在Java中&#xff0c;提供了一些关于使用IO的API&#xff0c;可以供开发者来读写外部数据和文件&#xff0c;我们称这些API为Java IO。IO是Java中比较重要知识点&#xff0c;且比较难学习的知识点。并且随着Java的发展为提供更好的数据传输性能&#xff0c;目前有三种IO共…

Go基础学习06-Golang标准库container/list(双向链表)深入讲解;延迟初始化技术;Element;List;Ring

基础介绍 单向链表中的每个节点包含数据和指向下一个节点的指针。其特点是每个节点只知道下一个节点的位置&#xff0c;使得数据只能单向遍历。 示意图如下&#xff1a; 双向链表中的每个节点都包含指向前一个节点和后一个节点的指针。这使得在双向链表中可以从前向后或从后…

无人机之数据提取篇

一、无人机平台与传感器 无人机是进行数据采集的基础设施&#xff0c;其稳定性、可靠性、灵活性和负载能力直接影响到数据采集的效果。根据实际需求&#xff0c;需选择适合的无人机类型&#xff0c;如固定翼无人机适合大范围、长时间的数据采集&#xff0c;而多旋翼无人机则更适…

HTML基础用法介绍一

VS code 如何快速生成HTML骨架注释是什么&#xff1f;为什么要写注释&#xff1f;注释的标签是什么&#xff1f;标题标签段落标签换行标签与水平线标签 (都是单标签&#xff09;文本格式化标签图片标签超链接标签音频标签视频标签 &#x1f698;正片开始 VS code 如何快速生成…

基于Spring框架的分层解耦详解

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;Java Web关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Java Web 三层架构&#xff1a; Java Web可以大致被分为三层架构&#xff1a;…

成都睿明智科技有限公司抖音电商服务靠谱吗?

在这个电商风起云涌的时代&#xff0c;抖音作为短视频直播的超级流量池&#xff0c;正深刻改变着人们的购物习惯。无数商家蜂拥而至&#xff0c;渴望在这片蓝海中找到属于自己的岛屿。而提及抖音电商服务&#xff0c;成都睿明智科技有限公司无疑是一个备受瞩目的名字。那么&…

Linux 进程的基本概念及描述

目录 0.前言 1. 什么是进程 1.1 进程的定义与特性 1.2 进程与线程的区别 2.描述进程 2.1 PCB (进程控制块) 2.2 task_struct 3.查看进程 3.1 查看进程信息 3.1.1 /proc 文件系统 3.1.2 ps 命令 3.1.2 top 和 htop 命令 3.2 获取进程标识符 3.2.1使用命令获取PID 3.2.2 使用C语言…

加密与安全_HTOP 一次性密码生成算法

文章目录 HOTP 的基础原理HOTP 的工作流程HOTP 的应用场景HOTP 的安全性安全性增强措施Code生成HOTP可配置项校验HOTP可拓展功能计数器&#xff08;counter&#xff09;计数器在客户端和服务端的作用计数器的同步机制客户端和服务端中的计数器表现服务端如何处理计数器不同步计…

AIGC学习笔记—minimind详解+训练+推理

前言 这个开源项目是带我的一个导师&#xff0c;推荐我看的&#xff0c;记录一下整个过程&#xff0c;总结一下收获。这个项目的slogan是“大道至简”&#xff0c;确实很简。作者说是这个项目为了帮助初学者快速入门大语言模型&#xff08;LLM&#xff09;&#xff0c;通过从零…

vue3学习记录-computed

vue3学习记录-computed 1.为什么要用computed2.使用方法2.1 基本实例2.2 可写计算属性 1.为什么要用computed 写个购物车的案例 <script setup> import { ref, reactive,computed } from "vue" const tableData reactive([{ name: 商品1, price: 10, num: 1…

3. 轴指令(omron 机器自动化控制器)——>MC_MoveRelative

机器自动化控制器——第三章 轴指令 5 MC_MoveRelative变量▶输入变量▶输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶重启运动指令▶多重启动运动指令▶异常 MC_MoveRelative 指定自指令当前位置起的移动距离&#xff0c;进行定位。 指令名称FB/FUN图形表现ST表现MC…

JVM(HotSpot):字符串常量池(StringTable)

文章目录 一、内存结构图二、案例讲解三、总结 一、内存结构图 JDK1.6 JDK1.8 我们发现&#xff0c;StringTable移入了Heap里面。所以&#xff0c;应该想到&#xff0c;StringTable将受到GC管理。 其实&#xff0c;1.6中&#xff0c;在方法区中的时候&#xff0c;也是受GC管…

从底层理解为什么常量区中的代码不能被修改?

目录 前言&#xff1a;一、了解虚拟地址二、页表映射三、常量区不能被修改的原理四、常量区不可修改的意义 前言&#xff1a; 平时我们在编写代码时都会用到或遇到所谓的常量区或者不可修改的代码&#xff0c;比如说用双引号包起来字符串&#xff08;“Hello World”&#xff…

微服务SpringSession解析部署使用全流程

目录 1、SpringSession简介 2、实现session共享的三种方式 1、修改Tomcat配置文件 2、Nginx负载均衡策略 3、redis统一存储 0、准备工作 1、本地服务添加依赖 2、修改本地服务配置文件 3、添加application.properties文件 4、添加nacos - redis配置 5、修改本地项目…

Linux启动mysql报错

甲方公司意外停电&#xff0c;所有服务器重启后&#xff0c;发现部署在Linux上的mysql数据库启动失败.再加上老员工离职&#xff0c;新接手项目&#xff0c;对Linux系统了解不多&#xff0c;解决起来用时较多&#xff0c;特此记录。 1.启动及报错 1.1 启动语句1 启动语句1&a…

全站最详细的Python环境配置步骤

1、官网下载IDE JetBrains下载 2、IDE下载、安装步骤 这里展示的是如何在Windows上下载、安装Pycharm工具&#xff0c;Linux的步骤类似。 2.1、选择开发者工具 选择开发者工具 2.2、选择Pycharm 选择Pycharm 2.3、选择下载 选择下载 2.4、选择社区版 一般而言&#xff…

基于SpringBoot+Vue的留守儿童爱心网站系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…