【大数据知识】今天聊聊Clickhouse部署方案

ClickHouse部署

    • 一、ClickHouse部署
      • 一、单节点部署
        • 1. 安装准备
        • 2. 目录规划
        • 3. 核心配置
        • 4. 启动服务
      • 二、集群部署方案
        • 1. 集群拓扑设计
        • 2. 分布式配置
        • 3. 表引擎选择
      • 三、安全加固
        • 1. 认证配置
        • 2. SSL加密
      • 四、性能优化
        • 1. 核心参数调优
        • 2. 资源隔离
      • 五、监控与维护
        • 1. Prometheus 集成
        • 2. 关键监控指标
      • 六、备份与恢复
        • 1. 冷备份方案
        • 2. 跨集群同步
      • 七、最佳实践
    • 二、ClickHouse跨机房集群部署方案
      • 1. 架构设计
      • 2. 网络优化配置
      • 3. 数据同步策略
      • 4. 容灾切换方案
      • 5. 性能优化参数
      • 6. 监控指标体系
      • 7. 运维管理规范
      • 8. 成本优化建议
    • 关联知识

一、ClickHouse部署

以下为 ClickHouse 生产级集群部署的完整步骤及配置指南,涵盖单节点、分布式集群、安全加固及性能优化:

一、单节点部署

1. 安装准备

系统要求:
• 64位 Linux(推荐 CentOS 7+/Ubuntu 18.04+)

• 至少 4 核 CPU + 8GB 内存

• SSD 存储(推荐 NVMe)

  • 安装步骤:
# Ubuntu/Debian
sudo apt-get install -y apt-transport-https ca-certificates dirmngr
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4
echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee /etc/apt/sources.list.d/clickhouse.list
sudo apt-get update
sudo apt-get install -y clickhouse-server clickhouse-client# CentOS/RHEL
sudo yum install -y yum-utils
sudo rpm --import https://repo.clickhouse.com/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.com/rpm/clickhouse.repo
sudo yum install -y clickhouse-server clickhouse-client
2. 目录规划
sudo mkdir -p /data/clickhouse/{data,metadata,logs,conf}
sudo chown -R clickhouse:clickhouse /data/clickhouse

配置文件迁移:

sudo mv /etc/clickhouse-server/config.xml /data/clickhouse/conf/
sudo ln -s /data/clickhouse/conf/config.xml /etc/clickhouse-server/config.xml
3. 核心配置

config.xml 关键参数:

<yandex><path>/data/clickhouse/data/</path><tmp_path>/data/clickhouse/tmp/</tmp_path><user_files_path>/data/clickhouse/user_files/</user_files_path><format_schema_path>/data/clickhouse/format_schemas/</format_schema_path><!-- 网络配置 --><listen_host>0.0.0.0</listen_host><http_port>8123</http_port><tcp_port>9000</tcp_port><!-- 资源限制 --><max_memory_usage>10000000000</max_memory_usage><max_concurrent_queries>100</max_concurrent_queries><!-- 日志配置 --><logger><level>information</level><log>/data/clickhouse/logs/clickhouse-server.log</log><errorlog>/data/clickhouse/logs/clickhouse-server.err.log</errorlog><size>1000M</size><count>10</count></logger>
</yandex>
4. 启动服务
sudo systemctl start clickhouse-server
sudo systemctl enable clickhouse-server

二、集群部署方案

1. 集群拓扑设计

3分片2副本架构:

节点IP地址角色硬件配置
ch-node1192.168.1.10分片1主 + 分片2副本32C128G NVMe
ch-node2192.168.1.11分片2主 + 分片3副本32C128G NVMe
ch-node3192.168.1.12分片3主 + 分片1副本32C128G NVMe
2. 分布式配置
  • remote_servers 配置:
<remote_servers><cluster_3s2r><shard><weight>1</weight><internal_replication>true</internal_replication><replica><host>ch-node1</host><port>9000</port><user>admin</user><password>SecurePass123!</password></replica><replica><host>ch-node2</host><port>9000</port><user>admin</user><password>SecurePass123!</password></replica></shard><!-- 其他分片类似配置 --></cluster_3s2r>
</remote_servers>
  • ZooKeeper 集成:
<zookeeper><node><host>zk1.cluster</host><port>2181</port></node><node><host>zk2.cluster</host><port>2181</port></node><node><host>zk3.cluster</host><port>2181</port></node><session_timeout_ms>30000</session_timeout_ms><operation_timeout_ms>10000</operation_timeout_ms>
</zookeeper>
3. 表引擎选择

分布式表创建示例:

CREATE TABLE db1.metrics_local ON CLUSTER 'cluster_3s2r'
(event_time DateTime,metric_name String,value Float64
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/metrics_local', '{replica}')
PARTITION BY toYYYYMM(event_time)
ORDER BY (metric_name, event_time)
TTL event_time + INTERVAL 30 DAY;CREATE TABLE db1.metrics_distributed ON CLUSTER 'cluster_3s2r'
AS db1.metrics_local
ENGINE = Distributed('cluster_3s2r', 'db1', 'metrics_local', rand());

三、安全加固

1. 认证配置

users.xml 示例:

<users><admin><password>sha256:abcd1234...(使用openssl passwd生成)</password><networks><ip>::/0</ip></networks><profile>default</profile><quota>default</quota><access_management>1</access_management></admin><readonly><password>sha256:def5678...</password><networks><ip>192.168.1.0/24</ip></networks><profile>readonly</profile><quota>default</quota></readonly>
</users>
2. SSL加密

配置步骤:

# 生成证书
openssl req -x509 -newkey rsa:2048 -nodes -days 365 \-keyout /etc/clickhouse-server/server.key \-out /etc/clickhouse-server/server.crt# 修改配置
<https_port>8443</https_port>
<openSSL><server><certificateFile>/etc/clickhouse-server/server.crt</certificateFile><privateKeyFile>/etc/clickhouse-server/server.key</privateKeyFile></server>
</openSSL>

四、性能优化

1. 核心参数调优
<!-- config.xml -->
<merge_tree><max_suspicious_broken_parts>5</max_suspicious_broken_parts><parts_to_delay_insert>300</parts_to_delay_insert><parts_to_throw_insert>600</parts_to_throw_insert>
</merge_tree><compression><case><method>zstd</method><level>3</level></case>
</compression>
2. 资源隔离

资源队列配置:

<profiles><default><max_threads>16</max_threads><max_memory_usage_for_all_queries>100000000000</max_memory_usage_for_all_queries></default><batch><max_threads>32</max_threads><priority>10</priority></batch>
</profiles>

五、监控与维护

1. Prometheus 集成

exporter 配置:

docker run -d -p 9116:9116 \-e CLICKHOUSE_USER="monitor" \-e CLICKHOUSE_PASSWORD="MonitorPass123!" \prom/clickhouse-exporter \-scrape_uri=http://ch-node1:8123/
2. 关键监控指标
指标名称告警阈值监控频率
QueryDurationMilliseconds> 5000ms15s
ReplicasMaxQueueSize> 10001m
MemoryUsage> 90%10s
ZooKeeperRequestLatency> 2000ms30s

六、备份与恢复

1. 冷备份方案
# 全量备份
clickhouse-backup create full_backup_$(date +%Y%m%d)# 增量备份
clickhouse-backup create incremental_backup_$(date +%Y%m%d) --diff-from=full_backup_20230801# 恢复数据
clickhouse-backup restore full_backup_20230801
2. 跨集群同步
CREATE TABLE db1.metrics_restore AS db1.metrics_local
ENGINE = Distributed('backup_cluster', 'db1', 'metrics_local', rand());INSERT INTO db1.metrics_restore
SELECT * FROM remote('backup_node', db1.metrics_local);

七、最佳实践

  1. 分片键选择:优先选择高基数字段(如用户ID)
  2. 数据预热:启动后执行 SYSTEM DROP MARK CACHE
  3. 版本管理:使用 ALTER TABLE ... UPDATE 谨慎处理表结构变更
  4. 慢查询分析:开启 log_queries=1 并定期分析 query_log

通过以上步骤,可建立支持每秒百万级写入、亚秒级查询响应的 ClickHouse 生产集群,适用于实时分析、时序数据处理等场景。建议每月进行全链路压测,持续优化配置参数。

二、ClickHouse跨机房集群部署方案

1. 架构设计

目标:实现高可用、低延迟、数据地理冗余

拓扑结构:
• 3个机房(北京、上海、广州),每个机房部署完整ClickHouse分片

• 分片策略:每个分片包含3副本(跨机房部署)

• ZooKeeper集群:每个机房独立部署3节点ZooKeeper,组成跨机房集群

广州机房
上海机房
北京机房
分片1-副本
分片2-副本
分片3-主
ZooKeeper
ZooKeeper
ZooKeeper
分片1-副本
分片2-主
分片3-副本
ZooKeeper
ZooKeeper
ZooKeeper
分片1-主
分片2-副本
分片3-副本
ZooKeeper
ZooKeeper
ZooKeeper

2. 网络优化配置

关键参数:

<!-- config.xml -->
<yandex><interserver_http_port>9009</interserver_http_port><interserver_http_host>bj01-node1</interserver_http_host><listen_host>0.0.0.0</listen_host><!-- 跨机房专线配置 --><remote_servers><cluster1><shard><weight>1</weight><internal_replication>true</internal_replication><replica><host>bj01-node1</host><port>9000</port><interserver_http_port>9009</interserver_http_port><zone>bj</zone></replica><replica><host>sh01-node1</host><port>9000</port><interserver_http_port>9009</interserver_http_port><zone>sh</zone></replica></shard><!-- 其他分片配置 --></cluster1></remote_servers><!-- 网络QoS策略 --><network><compression>true</compression><send_timeout>300</send_timeout><receive_timeout>300</receive_timeout><keep_alive_timeout>600</keep_alive_timeout></network>
</yandex>

3. 数据同步策略

三级数据同步机制:

层级同步方式延迟要求数据一致性
1级本地机房同步<10ms强一致
2级跨机房异步复制<500ms最终一致
3级全局备份同步每天1次延迟一致

副本配置示例:

CREATE TABLE metrics
(event_date Date,metric_id UInt32,value Float64
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/metrics', '{replica}')
PARTITION BY toYYYYMM(event_date)
ORDER BY (metric_id, event_date)
SETTINGSmax_replicated_mutations_in_queue=1000,replicated_can_become_leader=1,replicated_max_parallel_fetches=16;

4. 容灾切换方案

故障检测矩阵:

故障类型检测方式切换阈值恢复策略
节点宕机ZooKeeper watcher30秒自动切换副本
机房断网BGP监测3次/5分钟DNS切流
数据损坏Checksum校验立即副本重建
磁盘故障SMART监控立即热备盘替换

切换命令示例:

# 强制副本切换
echo "SYSTEM RESTART REPLICA metrics" | clickhouse-client -h standby-node# 机房级切换(VIP转移)
keepalivedctl switchover --new-master sh02-node1

5. 性能优化参数

核心配置调整:

<!-- users.xml -->
<yandex><profiles><default><max_memory_usage>10000000000</max_memory_usage><max_execution_time>300</max_execution_time><distributed_product_mode>local</distributed_product_mode><!-- 跨机房查询优化 --><prefer_localhost_replica>0</prefer_localhost_replica><use_hedged_requests>1</use_hedged_requests><async_socket_for_remote>1</async_socket_for_remote><!-- 副本选择策略 --><load_balancing>first_or_random</load_balancing><priority><bj>3</bj><sh>2</sh><gz>1</gz></priority></default></profiles>
</yandex>

6. 监控指标体系

关键监控项:

类别指标阈值采集频率
网络跨机房延迟<150ms10秒
存储副本差异量<10万行1分钟
查询跨区查询比例<30%实时
资源CPU利用率<70%5秒
ZooKeeper事务延迟<500ms1秒

Prometheus配置示例:

scrape_configs:- job_name: 'clickhouse'static_configs:- targets:- bj01-node1:9363- sh01-node1:9363- gz01-node1:9363metrics_path: '/metrics'- job_name: 'zk'static_configs:- targets:- zk-bj1:7000- zk-sh1:7000- zk-gz1:7000

7. 运维管理规范

变更管理流程:

  1. 灰度发布:新配置先在1个机房生效,观察24小时

  2. 滚动升级:分3个批次进行,间隔2小时

  3. 数据迁移:使用ALTER TABLE MOVE PARTITION命令

  4. 备份策略:
    • 每日增量备份(保留7天)

    • 每周全量备份(保留4周)

    • 异地冷备(保留1年)

自动化脚本示例:

#!/bin/bash
# 跨机房数据均衡脚本
for shard in {1..3}
doclickhouse-client --query "SYSTEM SYNC REPLICA metrics_shard${shard}OPTIMIZE TABLE metrics_shard${shard} FINALALTER TABLE metrics_shard${shard} MOVE PARTITION '202308' TO SHARD '/bj0${shard}'"
done

8. 成本优化建议

资源分配策略:

机房数据热度存储类型计算规格
北京热数据SSD32C128G
上海温数据ESSD16C64G
广州冷数据HDD8C32G

存储分层配置:

ALTER TABLE metrics MODIFY TTL event_date + INTERVAL 3 MONTH TO VOLUME 'hot',event_date + INTERVAL 6 MONTH TO VOLUME 'warm',event_date + INTERVAL 12 MONTH TO VOLUME 'cold'

该方案通过多层次冗余、智能路由和分级存储,实现RTO<5分钟、RPO<10秒的容灾能力,同时跨机房查询延迟控制在150ms以内。建议根据实际业务流量进行压力测试,优化分片数量和副本分布策略。

关联知识

【大数据知识】ClickHouse入门
【运维工具】Ansible一款好用的自动化工具
【数据库知识】行式存储与列式存储
【ClickHouse官网文档地址】

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

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

相关文章

打卡Day28

题目1&#xff1a;定义圆&#xff08;Circle&#xff09;类 要求&#xff1a; 1.包含属性&#xff1a;半径 radius。 2.包含方法&#xff1a; ●calculate_area()&#xff1a;计算圆的面积&#xff08;公式&#xff1a;πr&#xff09;。 ●calculate_circumference()&#xff…

BERT 进阶:Albert 模型详解与实战

目录 BERT 进阶&#xff1a;Albert 模型详解与实战 一、ALBERT 的优化策略 &#xff08;一&#xff09;Embedding 参数因式分解 &#xff08;二&#xff09;跨层参数共享 &#xff08;三&#xff09;巨剑连贯性损失 二、ALBERT 模型架构 &#xff08;一&#xff09;Tran…

使用 163 邮箱实现 Spring Boot 邮箱验证码登录

使用 163 邮箱实现 Spring Boot 邮箱验证码登录 本文将详细介绍如何使用网易 163 邮箱作为 SMTP 邮件服务器&#xff0c;实现 Spring Boot 项目中的邮件验证码发送功能&#xff0c;并解决常见配置报错问题。 一、为什么需要邮箱授权码&#xff1f; 出于安全考虑&#xff0c;大…

深入解析Spring Boot与Spring Security的集成实践

深入解析Spring Boot与Spring Security的集成实践 引言 在现代Web应用开发中&#xff0c;安全性是一个不可忽视的重要方面。Spring Security作为Spring生态中的安全框架&#xff0c;提供了强大的认证和授权功能。本文将结合Spring Boot&#xff0c;详细介绍如何集成Spring Se…

C#将1GB大图裁剪为8张图片

C#处理超大图片&#xff08;1GB&#xff09;需要特别注意内存管理和性能优化。以下是几种高效裁剪方案&#xff1a; 方法1&#xff1a;使用System.Drawing分块处理&#xff08;内存优化版&#xff09; using System; using System.Drawing; using System.Drawing.Imaging; us…

Linux系统启动相关:vmlinux、vmlinuz、zImage,和initrd 、 initramfs,以及SystemV 和 SystemD

目录 一、vmlinux、vmlinuz、zImage、bzImage、uImage 二、initrd 和 initramfs 1、initrd&#xff08;Initial RAM Disk&#xff09; 2、initramfs&#xff08;Initial RAM Filesystem&#xff09; 3、initrd vs. initramfs 对比 4. 如何查看和生成 initramfs 三、Syste…

AIStarter Windows 版本迎来重磅更新!模型插件工作流上线,支持 Ollama / ComfyUI 等多平台本地部署模型统一管理

如果你正在使用 AIStarter 工具进行本地 AI 模型部署 &#xff0c;那么这条消息对你来说非常重要&#xff01; 在最新推出的 AIStarter Windows 正式版更新中 &#xff0c;官方对整个平台进行了功能重构和性能优化&#xff0c;尤其是新增了「模型插件工作流 」功能&#xff0c…

深入理解桥接模式:解耦抽象与实现的设计艺术

一、为什么需要桥接模式&#xff1f;从“类爆炸”问题说起 你是否遇到过这样的开发困境&#xff1f; 当需要为系统扩展新功能时&#xff0c;继承体系像滚雪球一样越变越臃肿&#xff1a;新增一种遥控器类型&#xff0c;需要为电视、音响各写一个子类&#xff1b;新增一种设备类…

Java 中的泛型原理与实践案例

引言&#xff1a;为什么需要泛型 在Java 5之前&#xff0c;集合类只能存储Object类型的对象&#xff0c;这带来了两个主要问题&#xff1a; 类型不安全&#xff1a;可以向集合中添加任何类型的对象&#xff0c;容易出错繁琐的类型转换&#xff1a;从集合中取出元素时需要手动…

springboot3+vue3融合项目实战-大事件文章管理系统-获取文章分类详情

GetMapping("/detail")public Result<Category> detail(Integer id){Category c categoryService.findById(id);return Result.success(c);}在CategoryService接口增加 Category findById(Integer id); 在CategoryServiceImpl增加 Overridepublic Category f…

从零开始创建一个 Next.js 项目并实现一个 TodoList 示例

Next.js 是一个基于 React 的服务端渲染框架&#xff0c;它提供了很多开箱即用的功能&#xff0c;如自动路由、API 路由、静态生成、增量静态再生等。本文将带你一步步创建一个 Next.js 项目&#xff0c;并实现一个简单的 TodoList 功能。 效果地址 &#x1f9f1; 安装 Next.j…

分布式锁: Redisson红锁(RedLock)原理与实现细节

分布式锁是分布式系统的核心基础设施&#xff0c;但 单节点 Redis 锁在高可用场景下存在致命缺陷&#xff1a;当 Redis 主节点宕机时&#xff0c;从节点可能因异步复制未完成而丢失锁信息&#xff0c;导致多个客户端同时持有锁。为此&#xff0c;Redis 作者 Antirez 提出了 Red…

c++多态面试题之(析构函数与虚函数)

有以下问题展开 析构函数要不要定义成虚函数&#xff1f;基类的析构函数要不要定义成虚函数&#xff1f;如果不定义会有什么问题&#xff0c;定义了在什么场景下起作用。 1. 基类析构函数何时必须定义为虚函数&#xff1f; 当且仅当通过基类指针&#xff08;或引用&#xff09;…

Python高级进阶:Vim与Vi使用指南

李升伟 整理 在 Python 高级进阶中&#xff0c;使用 Vim 或 Vi 作为代码编辑器可以显著提升开发效率&#xff0c;尤其是在远程服务器开发或快速脚本编辑时。以下是关于它们在 Python 开发中的高级应用详解&#xff1a; 1. Vim/Vi 简介 Vi&#xff1a;经典的 Unix 文本编辑器…

Dify中使用插件LocalAI配置模型供应商报错

服务器使用vllm运行大模型&#xff0c;今天在Dify中使用插件LocalAI配置模型供应商后&#xff0c;使用工作流的时候&#xff0c;报错&#xff1a;“Run failed: PluginInvokeError: {"args":{},"error_type":"ValueError","message":&…

深度学习驱动下的目标检测技术:原理、算法与应用创新(二)

三、主流深度学习目标检测算法剖析 3.1 R - CNN 系列算法 3.1.1 R - CNN 算法详解 R - CNN&#xff08;Region - based Convolutional Neural Networks&#xff09;是将卷积神经网络&#xff08;CNN&#xff09;应用于目标检测领域的开创性算法&#xff0c;其在目标检测发展历…

【Umi】项目初始化配置和用户权限

app.tsx import { RunTimeLayoutConfig } from umijs/max; import { history, RequestConfig } from umi; import { getCurrentUser } from ./services/auth; import { message } from antd;// 获取用户信息 export async function getInitialState(): Promise<{currentUse…

[学习] RTKLib详解:qzslex.c、rcvraw.c与solution.c

RTKLib详解&#xff1a;qzslex.c、rcvraw.c与solution.c 本文是 RTKLlib详解 系列文章的一篇&#xff0c;目前该系列文章还在持续总结写作中&#xff0c;以发表的如下&#xff0c;有兴趣的可以翻阅。 [学习] RTKlib详解&#xff1a;功能、工具与源码结构解析 [学习]RTKLib详解…

移植RTOS,发现任务栈溢出怎么办?

目录 1、硬件检测方法 2、软件检测方法 3、预防堆栈溢出 4、处理堆栈溢出 在嵌入式系统中&#xff0c;RTOS通过管理多个任务来满足严格的时序要求。任务堆栈管理是RTOS开发中的关键环节&#xff0c;尤其是在将RTOS移植到新硬件平台时。堆栈溢出是嵌入式开发中常见的错误&am…

window 显示驱动开发-使用有保证的协定 DMA 缓冲区模型

Windows Vista 的显示驱动程序模型保证呈现设备的 DMA 缓冲区和修补程序位置列表的大小。 修补程序位置列表包含 DMA 缓冲区中命令引用的资源的物理内存地址。 在有保证的协定模式下&#xff0c;用户模式显示驱动程序知道 DMA 缓冲区和修补程序位置列表的确切大小&#xff0c;…