docker-compose 快速部署clickhouse集群

news2024/12/23 10:38:02

在本教程中,我们将学习如何使用 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.7
    container_name: zookeeper
    restart: always
    ports:
      - "2181:2181"
    environment:
      ZOO_MY_ID: 1
    volumes:
      - ./zkdata:/data
      - ./zkdatalog:/datalog      

  clickhouse01:
    image: clickhouse/clickhouse-server:22.5.4
    container_name: clickhouse01
    restart: always
    ports:
      - "8123:8123"   # HTTP 接口
      - "9000:9000"   # TCP 接口
      - "9009:9009"   # Internode 通信接口
    volumes:
      - ./data/clickhouse01:/var/lib/clickhouse
      - ./config/clickhouse01:/etc/clickhouse-server
    environment:
      CLICKHOUSE_DB: default
      CLICKHOUSE_PASSWORD: "your_secure_password"
    depends_on:
      - zookeeper

  clickhouse02:
    image: clickhouse/clickhouse-server:22.5.4
    container_name: clickhouse02
    restart: always
    ports:
      - "8124:8123"   # HTTP 接口
      - "9001:9000"   # TCP 接口
      - "9010:9009"   # Internode 通信接口
    volumes:
      - ./data/clickhouse02:/var/lib/clickhouse
      - ./config/clickhouse02:/etc/clickhouse-server
    environment:
      CLICKHOUSE_DB: default
      CLICKHOUSE_PASSWORD: "your_secure_password"
    depends_on:
      - zookeeper

  clickhouse03:
    image: clickhouse/clickhouse-server:22.5.4
    container_name: clickhouse03
    restart: always
    ports:
      - "8125:8123"   # HTTP 接口
      - "9002:9000"   # TCP 接口
      - "9011:9009"   # Internode 通信接口
    volumes:
      - ./data/clickhouse03:/var/lib/clickhouse
      - ./config/clickhouse03:/etc/clickhouse-server
    environment:
      CLICKHOUSE_DB: default
      CLICKHOUSE_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-client
    
    select * 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.coloradmin.cn/o/2182174.html

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

相关文章

清华大学、腾讯联合推全开源多模态架构Oryx 支持超长视频输入

在人工智能快速发展的今天&#xff0c;一个名为ORYX的多模态大型语言模型正在悄然改变我们对AI理解视觉世界能力的认知。这个由清华大学、腾讯和南洋理工大学研究人员联合开发的AI系统&#xff0c;堪称视觉处理领域的"变形金刚"。 ORYX&#xff0c;全称Oryx Multi-M…

Kotlin:2.0.20 的新特性

一、概述 Kotlin 2.0.20英文版官方文档 Kotlin 2.0.20发布了!这个版本包括对Kotlin 2.0.0的性能改进和bug修复&#xff0c;我们在其中宣布Kotlin K2编译器为Stable。以下是本次发布的一些亮点: 数据类复制函数将具有与构造函数相同的可见性来自默认目标层次结构的源集的静态访…

Windows下载安装Minio超详细

1.下载地址 服务端文件:minio.exe 用于接收文件信息。 客户端文件:mac.exe 用于上传文件 &#xff0c;如果用程序代码操作文件存储&#xff0c;只启动服务端即可。 #企业版 https://min.io/download?licenseenterprise&platformkubernetes#/windows #社区版&#xff08;…

TiDB 性能测试的几个优化点

作者&#xff1a; 数据源的TiDB学习之路 原文来源&#xff1a; https://tidb.net/blog/513a4eef 背景 前段时间参与了一个 TiDB 的性能测试&#xff0c;具体是在三台海光服务器&#xff08;512G内存、128 core 分8个NUMA、4块3.5T SSD&#xff09;搭建一个混合部署的 TiDB …

嵌入式中C语言小项目的具体实现

大家好&#xff0c;今天主要给大家分享一下&#xff0c;如何使用C语言来实现对应的小项目。 第一&#xff1a;C语言计算器实现 第二&#xff1a;C项目中猜字游戏实现 第三&#xff1a;C语言简单的日历实现 第四&#xff1a;C语言中每日定投债券基金一年能赚多少

浮动与网格系统

控制页面布局的工具有浮动、Flexbox 和定位等&#xff0c;这些工具本身没有优劣支付&#xff0c;只不过实现布局的方式略有不同。 1 浮动 浮动元素会脱离正常的文档流&#xff0c;并向左或向右移动&#xff0c;直到它的边缘碰到包含框或另一个浮动元素的边框为止。 文本和内联…

损失函数篇 | YOLOv5 引入Unified-IoU 高质量目标检测IoU损失

论文地址:https://arxiv.org/pdf/2408.06636 开源代码地址:https://github.com/lxj-drifter/UIOU_files 目标检测是计算机视觉领域的重要组成部分,其效果直接由预测框的回归精度决定。作为模型训练的关键,IoU(交并比)很好地展示了当前预测框与真实框(Ground Truth)之间…

数据结构——队列的基本操作

前言 介绍 &#x1f343;数据结构专区&#xff1a;数据结构 参考 该部分知识参考于《数据结构&#xff08;C语言版 第2版&#xff09;》24~28页 &#x1f308;每一个清晨&#xff0c;都是世界对你说的最温柔的早安&#xff1a;ૢ(≧▽≦)و✨ 目录 前言 1、队列的基本概念…

Flutter 3.24 AAPT: error: resource android:attr/lStar not found.

在Android build,gradle下面&#xff0c;添加右边红框的代码&#xff1a; subprojects {afterEvaluate { project ->if (project.plugins.hasPlugin("com.android.application") ||project.plugins.hasPlugin("com.android.library")) {project.androi…

复写零——双指针算法

题目链接 复写零https://leetcode.cn/problems/duplicate-zeros/description/ 题目要求 样例 题目分析 先看示例1&#xff0c;题目要求将数组中所有的0&#xff0c;均复写一遍&#xff0c;且要在原数组上进行更改&#xff0c;多余的元素消失 但我们发现&#xff0c;如果双指针…

04DSP学习-利用syscfg配置EPWM

打开syscfg文件&#xff0c;左侧control栏中找到EPWM&#xff0c;点击&#xff0c;发现TI提供了一些帮助文档&#xff0c;帮助了解如何使用syscfg以及如何了解EPWM。我们结合配置过程去理解如何使用。 设计目标 使用EPWM1&#xff1b;增减计数&#xff1b;PWM频率为10kHz&…

ios内购支付-支付宝APP支付提现

文章目录 前言一、IOS内购支付&#xff08;ios订单生成自己写逻辑即可&#xff09;1.支付回调票据校验controller1.支付回调票据校验server 二、安卓APP支付宝支付1.生成订单返回支付宝字符串&#xff08;用于app拉起支付宝&#xff0c;这里用的是证书模式&#xff09;2.生成订…

相机基础概念

景深&#xff1a; 景深的定义 DOF:depth of filed 是指在摄影机镜头或其他成像器前沿能够取得清晰图像的成像所测定的被摄物体前后距离范围。光圈、镜头、及焦平面到拍摄物的距离是影响景深的重要因素。定义3&#xff1a;在镜头前方&#xff08;焦点的前、后&#xff09;有一…

PCL 投影滤波器

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 投影滤波 2.1.2 可视化 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xff09; 一、…

Java的栈帧和动态链接是什么?

在 Java 的面试过程中&#xff0c;不可避免的一个面试题那就是 JVM&#xff0c;而 JVM 的面试题中&#xff0c;有各种&#xff0c;比如在堆中会被问到的关于垃圾回收机制的相关问题&#xff0c;在栈中会被问到入栈以及出栈的过程&#xff0c;来聊一下关于栈的相关问题&#xff…

【EchoMimic整合包及教程】蚂蚁集团支付宝开源了数字人技术EchoMimic,可用于虚拟主播、视频编辑等

蚂蚁集团支付宝开源了数字人技术EchoMimic&#xff0c;可用于虚拟主播和视频编辑。EchoMimic是一个音频驱动的肖像动画生成工具&#xff0c;具有丰富的表情和流畅的动作。它支持音频驱动、姿势驱动和音频与姿势混合驱动动画&#xff0c;并提供了易于使用的WebUI和GradioUI界面。…

三品PLM系统如何提升企业产品研发效率?

三品PLM系统如何提升企业研发效率 在竞争日益激烈的市场环境中&#xff0c;企业研发效率的高低直接决定了其产品的上市速度、质量以及市场竞争力。为了应对这一挑战&#xff0c;越来越多的企业开始引入PLM系统&#xff0c;而三品PLM系统凭借其强大的功能和全面的解决方案&…

移动技术开发:音乐播放器

1 实验名称 音乐播放器 2 实验目的 掌握使用Service启动服务的方法&#xff0c;掌握BroadcastReceiver广播传递机制的实现&#xff0c;利用Activity、Service和BroadcastReceiver实现一个音乐播放器APP。 3 实验源代码 布局文件代码&#xff1a; <?xml version"1.…

yum无法使用解决办法

yum无法使用解决方法&#xff08;比较全&#xff0c;以后如果遇到别的问题还会添加&#xff09;yum无法使用解决方法&#xff08;比较全&#xff0c;以后如果遇到别的问题还会添加&#xff09; 如下&#xff0c;新装的linux虚拟机&#xff0c;yum安装wget报错 Cannot find a …

内存占用估算方法

优质博文&#xff1a;IT-BLOG-CN 通过掌握每种数据类型的大小&#xff0c;就可以更准确地预测对象和数据的内存消耗。 一、基础数据类型 Java基础数据类型结构&#xff0c;在64位系统开启指针压缩情况下的内存占用字节数&#xff1a; booleanbytecharshortintlongfloatdoub…