企业级 ClickHouse Docker 离线部署实践指南20250407

news2025/4/8 7:16:30

企业级 ClickHouse Docker 离线部署实践指南

引言

在数据分析与日志处理日益重要的今天,ClickHouse 凭借其高性能、列式存储架构,成为企业在大数据分析中的首选引擎之一。本文基于一位金融行业从业者在离线网络环境中部署 ClickHouse 的真实实践过程,全面介绍其 Docker 化部署、验证流程与企业级结构优化方法,兼顾初学者理解与专家思考。

在这里插入图片描述


核心观点提炼

  • ClickHouse 是列式数据库的典范,适合高吞吐、低延迟查询场景。
  • 在无公网环境中,离线部署成为企业常态。
  • 标准化目录结构、可执行部署脚本、清晰的验证流程 是高效部署的关键。

一、ClickHouse 简介与企业适配特性

1. 高性能特性

特性描述
列式存储只读取需要的列,降低 IO,提升查询速度
实时写入支持亚秒级写入,大幅提升数据采集效率
高压缩率默认支持 LZ4、ZSTD 等压缩,降低存储成本
多线程执行查询自动并行化,充分利用 CPU 资源

2. 应用场景

  • 日志分析平台(可替代 ELK 的大规模日志查询与分析)
  • 指标监控系统(如 Prometheus 后端存储)
  • 用户行为分析、漏斗分析等 OLAP 场景
  • BI 数据仓库,与 Superset、Grafana 等工具集成

二、实践前提与技术准备

1. 操作环境

  • 系统:Ubuntu 22.04
  • 已安装:Docker + Docker Compose
  • 特殊限制:目标服务器无法联网访问 Docker Hub

2. 目录规划标准(企业推荐)

/opt/docker/
├── config/
│   └── clickhouse
│       ├── data       # 数据持久化目录
│       ├── logs       # 日志输出目录
│       └── config     # 自定义配置(如需扩展)
├── backups/
│   └── clickhouse     # 备份数据存放目录
└── compose/
    └── clickhouse
        ├── docker-compose.yml
        ├── clickhouse_deploy.sh
        └── clickhouse_stop.sh

建议:将生产环境相关文件放在 /opt/docker 下统一管理,便于后续维护和归档。


三、Docker 镜像离线获取与加载

1. 联网服务器操作:下载镜像并打包

# 在有网络的机器上
docker pull clickhouse/clickhouse-server:latest

# 导出镜像为 tar 文件
docker save clickhouse/clickhouse-server:latest -o clickhouse-server.tar

# 传输到无网络服务器
scp clickhouse-server.tar user@offline-host:/path

2. 离线服务器操作:加载镜像

# 在目标服务器上
docker load -i clickhouse-server.tar

这一步完成后,在离线服务器上就拥有了 clickhouse/clickhouse-server:latest 镜像,可直接使用 docker rundocker compose


四、一键部署与验证脚本

1. docker-compose.yml 配置

以下示例仅挂载 ClickHouse 的 数据目录日志目录,使用镜像自带默认配置文件(省去自定义 config.xml 可能带来的问题),并开放 8123、9000、9009 端口:

version: "3.8"  # 或直接删除 version 字段

services:
  clickhouse:
    image: clickhouse/clickhouse-server:latest
    container_name: clickhouse
    restart: always
    ulimits:
      nofile:
        soft: 262144
        hard: 262144
    ports:
      - "8123:8123"
      - "9000:9000"
      - "9009:9009"
    volumes:
      - /opt/docker/config/clickhouse/data:/var/lib/clickhouse
      - /opt/docker/config/clickhouse/logs:/var/log/clickhouse-server
      - /opt/docker/backups/clickhouse:/backups

2. 部署脚本 clickhouse_deploy.sh

示例如下,自动执行 容器启动HTTP 测试SQL 测试 等步骤:

#!/bin/bash
set -e

echo "🚀 初始化 ClickHouse 部署目录..."
mkdir -p /opt/docker/config/clickhouse/{data,logs,config}
mkdir -p /opt/docker/backups/clickhouse

echo "🧱 启动 ClickHouse 容器..."
cd /opt/docker/compose/clickhouse
docker compose up -d

sleep 5

echo "🧪 进行 HTTP 查询测试..."
# 若使用默认用户 default 无密码,可直接:
HTTP_RES=$(curl -s "http://localhost:8123/?query=SELECT%20123")
if [[ "$HTTP_RES" == "123" ]]; then
  echo "✅ ClickHouse HTTP 接口正常!"
else
  echo "❌ HTTP 接口失败,请检查容器状态或用户名密码"
  exit 1
fi

echo "🧪 执行 SQL 测试..."
docker exec clickhouse clickhouse-client --query="CREATE TABLE IF NOT EXISTS test (id UInt32, name String) ENGINE = MergeTree() ORDER BY id;"
docker exec clickhouse clickhouse-client --query="INSERT INTO test VALUES (1, 'docker'), (2, 'clickhouse');"

echo "🔍 查询数据:"
docker exec clickhouse clickhouse-client --query="SELECT * FROM test;"

echo "🎉 部署完成"

如果你需要给 default 用户设置密码,脚本里的 curlclickhouse-client 命令就要带上正确的用户名与密码参数,如:

curl -s "http://localhost:8123/?user=default&password=David@123&query=SELECT%20123"
docker exec clickhouse clickhouse-client \
  --user=default \
  --password=David@123 \
  --query="CREATE TABLE ..."

3. 验证测试点

  1. HTTP 查询

    curl "http://localhost:8123/?query=SELECT%20123"
    
    • 如果 default 用户没有密码,这里直接返回 123
    • 若出现 “Authentication failed” 报错,表示 default 用户已设置了密码,需要改为:
      curl "http://localhost:8123/?user=default&password=David@123&query=SELECT%20123"
      
  2. 客户端 SQL

    docker exec -it clickhouse clickhouse-client
    # 进入客户端后可做 CREATE TABLE, INSERT, SELECT 等操作
    # 如果有密码,请带上 --user=default --password=xxx
    
  3. 成功标志

    • 容器处于 Up 状态
    • 日志无异常报错
    • 能正常执行查询并返回结果

五、常见问题排查

问题可能原因解决方案
HTTP 接口无响应未暴露 8123 端口 / 网络策略限制检查 docker-compose.yml 端口映射;若需远程访问需开放防火墙或安全组
无法连接 TCP 接口Docker 网络设置问题 / 未开放 9000 端口确认 9000:9000;若网络隔离可加 network_mode: host 或指定静态 IP
数据目录权限报错宿主机用户无写权限、或宿主机 SELinux 等chown -R 10001:10001 /opt/docker/config/clickhouse;或调整 SELinux
找不到 metrika.xml手动挂载配置文件但缺少依赖 / 有错误引用可注释 metrika.xml 相关 <include>,或挂载该文件并路径一致
default 用户认证失败(如 Code:194已为 default 用户配置密码,但请求中未带认证信息使用 ?user=default&password=xxxclickhouse-client --user=default --password=xxx 访问

六、延伸建议

  1. 加入备份能力
    推荐使用 clickhouse-backup,可将备份定期产出到 /opt/docker/backups/clickhouse

  2. 与可视化工具集成

    • Grafana ClickHouse Plugin:监控与可视化
    • Apache Superset:BI 与数据可视化
    • Tabix:轻量管理界面
  3. 安全增强

    • 添加用户权限控制:default 用户在生产环境权限过高
    • 配置 HTTPS 反向代理:使用 Nginx/OpenResty
    • 接入企业认证体系:如 LDAP

七、总结清单

步骤操作要点
镜像下载使用 联网主机 拉取后 docker save + scp 到离线环境
文件布局标准化目录规划 /opt/docker/...,便于后期维护
启动部署docker-compose.yml + clickhouse_deploy.sh 一键脚本部署
验证测试curl + HTTP 接口 / docker exec + clickhouse-client / 查询返回结果正常
故障排查结合容器 docker logs/var/log/clickhouse-server 日志快速定位
高可用增强后续可加备份与权限安全、监控等,逐步完善企业级部署

八、实践复盘

在实际部署中,我们也碰到了一些典型“踩坑”场景,包括 挂载错配默认用户加密码导致的 HTTP 401脚本交互阻塞 等等。最终通过以下方式解决:

  1. 只挂载数据和日志目录 而不挂载 config.xml,直接使用官方默认配置文件,避免 metrika.xml 丢失报错。
  2. 给脚本里的 curlclickhouse-client 命令附加 --user=... --password=... 或在 URL 中加 ?user=...&password=...,解决“默认用户有密码却无法访问”的问题。
  3. 去掉 -i 参数的 docker exec 调用,避免脚本等待输入卡住。

通过这些复盘经验,你能看出离线部署并不仅是单纯的 docker compose up -d,还需要灵活处理网络、权限、配置等多方面问题。但只要掌握了以上关键思路,就能在企业内网环境高效部署并稳定运行 ClickHouse。


结语:从部署走向运维

ClickHouse 的价值不仅在于部署成功,更在于后续稳定运行与多场景扩展。通过标准化 Docker 化部署、完善的验证机制、企业级结构规划,你可以快速将 ClickHouse 应用于日志系统、监控平台、BI 数据仓库等多个场景,为企业大数据中台提供高速分析支持。如果你在部署过程中遇到问题或有更多需求,欢迎留言探讨交流。

参考链接:

  • ClickHouse 官方 Docker 镜像
  • ClickHouse Documentation
  • clickhouse-backup 工具

至此,ClickHouse 在离线环境下的企业级 Docker 部署就基本完成! 祝你在后续运维与数据分析之路上一路顺利。

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

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

相关文章

DeepSeek-MLA

MLA 结构 需要缓存 KV 向量共用的压缩隐特征K 向量多头共享的带位置编码的向量 为什么带有位置信息的 Q 向量来自于隐特征向量&#xff0c;而带有位置的 K 向量来自于 H 向量且共享呢&#xff1f; 最好的方法肯定是从H向量直接计算并且不共享&#xff0c;但是会大大增加显存使…

pyTorch-迁移学习-学习率衰减-四种天气图片多分类问题

目录 1.导包 2.加载数据、拼接训练、测试数据的文件夹路径 3.数据预处理 3.1 transforms.Compose数据转化 3.2分类存储的图片数据创建dataloader torchvision.datasets.ImageFolder torch.utils.data.DataLoader 4.加载预训练好的模型(迁移学习) 4.1固定、修改预训练…

vscode Colipot 编程助手

1、登录到colipot&#xff0c;以github账号&#xff0c;关联登录 点击【continue】按钮&#xff0c;继续。 点击【打开Visual Studio Code】&#xff0c;回到vscode中。 2、问一下11? 可以看出&#xff0c;很聪明&#xff0c;一下子就算出来了。 3、帮我们写一个文件&#xf…

1、window 下SDL 下载使用, 测试环境搭建

1. SDL3下载 官网&#xff1a; https://www.libsdl.org/ 点击SDL Releases 或者 SDL GItHub 进入github下载&#xff1a; 因为自己在windows下使用的mingw,所以下载mingw版的&#xff0c;也可以 下载源码自己编译。 2. 项目搭建 这里使用的时mingw vsocde cmake, 可以使…

OpenGL学习笔记(模型材质、光照贴图)

目录 光照与材质光照贴图漫反射贴图采样镜面光贴图 GitHub主页&#xff1a;https://github.com/sdpyy OpenGL学习仓库:https://github.com/sdpyy1/CppLearn/tree/main/OpenGLtree/main/OpenGL):https://github.com/sdpyy1/CppLearn/tree/main/OpenGL 光照与材质 在现实世界里&…

视频分析设备平台EasyCVR打造汽车门店经营场景安全:AI智慧安防技术全解析

一、方案背景 某电动车企业不停爆出维权新闻&#xff0c;支持和反对的声音此起彼伏&#xff0c;事情不断发酵、反转&#xff0c;每天都有新消息&#xff0c;令人目不暇接。车展、车店作为维权事件的高发场所&#xff0c;事后复盘和责任认定时&#xff0c;安防监控和视频监控平…

Hibernate里的对象不同状态和Session的核心方法

临时状态的测试 Student student new Student("张三", "男", 22, new Date()); 以上student就是一个Transient(临时状态),此时student并没有被session进行托管&#xff0c;即在session的缓存中还不存在student这个对象&#xff0c;当执行完save方法后&a…

模型嵌入式部署

背景 自从深度学习大规模应用以来&#xff0c;其中一个应用方向就是将深度学习视觉算法部署到嵌入式平台上&#xff0c;使用NPU推理。虽然已经做了很久的模型部署&#xff0c;但一直都是在公司默默耕耘&#xff0c;为了发展一下自己“边缘部署专家”这个个人品牌&#xff0c;打…

Redlinux(2025.3.29)

1、将你的虚拟机的网卡模式设置为nat模式&#xff0c;给虚拟机网卡配置三个主机位分别为100、200、168的ip地址。(以nmtui命令为例) 2、测试你的虚拟机是否能够ping通网关和dns&#xff0c;如果不能请修改网关和dns的地址。 首先打开虚拟网络编辑器查看NAT设置里的网关IP&…

uni-app项目运行在浏览器、微信开发者工具、mumu模拟器

一、安装HBuilder X 1、下载HBuilder X 官网网址&#xff1a;https://dcloud.io/hbuilderx.html 根据电脑系统下载对应的版本&#xff08;我的电脑是Windows 10&#xff09; 2.安装HBuilder X 直接将HBuilderX.4.61.2025040322-alpha.zip解压到自己想要存放的文件夹中 双击…

2025-04-07 NO.3 Quest3 MR 配置

文章目录 1 MR 介绍1.1 透视1.2 场景理解1.3 空间设置 2 配置 MR 环境2.1 场景配置2.2 MR 配置 3 运行测试 配置环境&#xff1a; Windows 11Unity 6000.0.42f1Meta SDK v74.0.2Quest3 1 MR 介绍 1.1 透视 ​ 透视&#xff08;Passthrough&#xff09;是将应用的背景从虚拟的…

抓wifi无线空口包之Macbook Pro抓包(一)

参考&#xff1a; 在MAC OS上进行Wi-Fi抓包和空中包分析_空口抓包和无线网卡抓包的区别-CSDN博客 WireShark中802.11帧的类型、子类型对照表_wireshark 怎么看disassociate帧和deauthenticate-CSDN博客 一、在macbook pro上&#xff0c;点击option 同时点击右上角wifi 功能&a…

单元测试原则之——不要模拟值对象 (1)

1. 什么是值对象(Value Objects)? 值对象是指那些不可变且仅通过其属性(数据)来定义的对象。它们通常没有复杂的逻辑或行为,主要用于存储和传递数据。例如: ● 字符串(String) ● 数字(Integer, Double) ● 日期(LocalDate, Instant) ● 自定义的简单数据类(如…

版本控制工具——SVN

目录 【版本控制系统】 【SVN概述】 【SVN基本使用】 【解决SVN拉取文件到本地后不显示绿色图标问题】 【版本控制系统】 版本控制系统&#xff08;version control system&#xff09;是一种用于管理文件变更的软件工具&#xff0c;主要用于记录文件的修改历史&#xff0c…

2022第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(题解解析)

记录刷题的过程、感悟、题解。 希望能帮到&#xff0c;那些与我一同前行的&#xff0c;来自远方的朋友&#x1f609; 大纲&#xff1a; 1、九进制转十进制-&#xff08;解析&#xff09;-简单的进制转化问题&#x1f604; 2、顺子日期-&#xff08;解析&#xff09;-考察日期 3…

【EC200N-CN——Linux驱动移植】问题回顾

【EC200N-CN——Linux驱动移植】问题回顾 1&#xff09;、开发回顾一、问题回顾与解决过程二、核心原理分析1. **USB设备识别的关键&#xff1a;VID/PID**2. **为什么之前不生成ttyUSB节点&#xff1f;**3. **为什么添加PID后就能生成节点&#xff1f;** 三、日志关键信息解读1…

构建k8s下Helm私有仓库与自定义Chart开发指南

#作者&#xff1a;程宏斌 文章目录 自定义helm模板1、开发自己的chare包2、调试chart3、安装chart 自定义helm模板 https://hub.helm.sh/ 1、开发自己的chare包 [rootmaster ~]# helm create mychare //创建一个名为mychare的chare包 [rootmaster ~]# tree -C mychare/ //以…

【7】C#上位机---Modbus RTU 界面设计与封装

C#上位机---Modbus通讯 1 Modbus RTU 通讯1.1 RS485串口与串行通信(Serial Communications)1.2 Modbus RTU协议1.3 Modbus RTU主从模式1.4 Modbus 主从站模拟调试2 Modbus RTU 界面设计与封装2.1 温度控件的类属性2.2 C#封装Modbus实现通讯2.3 C#封装Modbus TRU通用类2.4 上位…

【嵌入式学习6】多任务版TCP服务器

目录 如何实现&#xff1a; 客户端1.0版本&#xff1a; 服务端&#xff1a; 客户端2.0版本&#xff1a; thread.join() 是一个线程同步方法&#xff0c;用于主线程等待子线程完成。当你调用 thread.join() 时&#xff0c;主线程会阻塞&#xff0c;直到调用 join() 的子线程…

每天认识一个设计模式-外观模式:化繁为简的接口魔法

一、前言 在设计模式中&#xff0c;结构型设计模式处理类或对象组合&#xff0c;可助力构建灵活、可维护软件结构。此前探讨过组合模式&#xff08;将对象组合成树形结构&#xff0c;统一处理单个与组合对象&#xff0c;如文件系统管理&#xff09;和装饰器模式&#xff08;动…