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-node1 | 192.168.1.10 | 分片1主 + 分片2副本 | 32C128G NVMe |
ch-node2 | 192.168.1.11 | 分片2主 + 分片3副本 | 32C128G NVMe |
ch-node3 | 192.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 | > 5000ms | 15s |
ReplicasMaxQueueSize | > 1000 | 1m |
MemoryUsage | > 90% | 10s |
ZooKeeperRequestLatency | > 2000ms | 30s |
六、備份與恢復
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);
七、最佳實踐
- 分片鍵選擇:優先選擇高基數字段(如用戶ID)
- 數據預熱:啟動后執行
SYSTEM DROP MARK CACHE
- 版本管理:使用
ALTER TABLE ... UPDATE
謹慎處理表結構變更 - 慢查詢分析:開啟
log_queries=1
并定期分析 query_log
通過以上步驟,可建立支持每秒百萬級寫入、亞秒級查詢響應的 ClickHouse 生產集群,適用于實時分析、時序數據處理等場景。建議每月進行全鏈路壓測,持續優化配置參數。
二、ClickHouse跨機房集群部署方案
1. 架構設計
目標:實現高可用、低延遲、數據地理冗余
拓撲結構:
? 3個機房(北京、上海、廣州),每個機房部署完整ClickHouse分片
? 分片策略:每個分片包含3副本(跨機房部署)
? ZooKeeper集群:每個機房獨立部署3節點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 watcher | 30秒 | 自動切換副本 |
機房斷網 | 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. 監控指標體系
關鍵監控項:
類別 | 指標 | 閾值 | 采集頻率 |
---|---|---|---|
網絡 | 跨機房延遲 | <150ms | 10秒 |
存儲 | 副本差異量 | <10萬行 | 1分鐘 |
查詢 | 跨區查詢比例 | <30% | 實時 |
資源 | CPU利用率 | <70% | 5秒 |
ZooKeeper | 事務延遲 | <500ms | 1秒 |
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個機房生效,觀察24小時
-
滾動升級:分3個批次進行,間隔2小時
-
數據遷移:使用
ALTER TABLE MOVE PARTITION
命令 -
備份策略:
? 每日增量備份(保留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. 成本優化建議
資源分配策略:
機房 | 數據熱度 | 存儲類型 | 計算規格 |
---|---|---|---|
北京 | 熱數據 | SSD | 32C128G |
上海 | 溫數據 | ESSD | 16C64G |
廣州 | 冷數據 | HDD | 8C32G |
存儲分層配置:
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官網文檔地址】