【大數據知識】今天聊聊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.pswp.cn/news/905907.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905907.shtml
英文地址,請注明出處:http://en.pswp.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;…