2026/3/29 7:33:58
网站建设
项目流程
扬中网站开发,做网站怎么找客户,wordpress页面搜索,网站开发环境与工具目录标题ClickHouse 分片集群备份一致性分析文档1. 问题背景2. 环境信息2.1 集群配置2.2 Pod 列表2.3 备份配置3. 官方备份方案分析3.1 Altinity clickhouse-backup 工具3.2 工作原理 - FREEZE 机制3.3 ClickHouse 内置 BACKUP/RESTORE 命令4. 分片备份一致性问题4.1 核心问题4…目录标题ClickHouse 分片集群备份一致性分析文档1. 问题背景2. 环境信息2.1 集群配置2.2 Pod 列表2.3 备份配置3. 官方备份方案分析3.1 Altinity clickhouse-backup 工具3.2 工作原理 - FREEZE 机制3.3 ClickHouse 内置 BACKUP/RESTORE 命令4. 分片备份一致性问题4.1 核心问题4.2 为什么无法保证跨分片一致性4.3 恢复时的额外问题5. 存储快照方案分析5.1 官方文档说明5.2 存储快照的局限性5.3 当前环境的存储限制6. 方案对比7. 官方推荐的快照备份方案如果使用8. 结论9. 参考链接ClickHouse 分片集群备份一致性分析文档1. 问题背景在 ClickHouse 分片集群环境中如何保证所有分片备份时的数据一致性是一个关键问题。本文档分析了官方提供的备份方案及其局限性并提供了环境中的实际配置情况。2. 环境信息2.1 集群配置项目值集群名称ck-5330623f分片数量2 (shardsCount: 2)副本数量2 (replicasCount: 2)存储类型csi-localpv (hostPath)存储路径/opt/qfusion/localpv/ClickHouse 版本24.8.7.412.2 Pod 列表ck-5330623f-replica0-0-0 # 分片0副本0 ck-5330623f-replica0-1-0 # 分片0副本1 ck-5330623f-replica1-0-0 # 分片1副本0 ck-5330623f-replica1-1-0 # 分片1副本1 (Pending) ck-5330623f-zk-0/1/2-0 # ZooKeeper 节点2.3 备份配置# chi-ck-5330623f-backup-configgeneral:remote_storage:nonebackups_to_keep_local:0backups_to_keep_remote:0clickhouse:username:rdsadminhost:localhostport:9000sync_replicated_tables:true# 关键配置restore_schema_on_cluster:# 未启用集群级别恢复3. 官方备份方案分析3.1 Altinity clickhouse-backup 工具官方文档链接:Examples.md - Sharded cluster backup推荐备份方式:# 备份 - 只在每个分片的第一个副本上运行shard_number$(clickhouse-client -qSELECT getMacro(shard))clickhouse-backup create_remote shard${shard_number}-backup推荐恢复方式:# 步骤1: 在所有副本上恢复 schemashard_number$(clickhouse-client -qSELECT getMacro(shard))clickhouse-backup restore_remote --rm --schema shard${shard_number}-backup# 步骤2: 只在每个分片的第一个副本上恢复数据clickhouse-backup restore_remote --rm shard${shard_number}-backup3.2 工作原理 - FREEZE 机制clickhouse-backup工具使用 ClickHouse 的ALTER TABLE ... FREEZE命令ALTERTABLE...FREEZEPARTITION...实现方式:使用hardlinks将数据复制到/var/lib/clickhouse/shadow/目录几乎不消耗额外磁盘空间因为是硬链接不阻塞表的正常操作本质上是文件级别的快照不是存储卷快照3.3 ClickHouse 内置 BACKUP/RESTORE 命令官方文档链接:Backup and Restore in ClickHouse-- 语法BACKUP|RESTORE[ASYNC]TABLE|DATABASE|ALL[ONCLUSTERcluster_name]TO|FROMDisk|S3|File(...)[SETTINGS...]4. 分片备份一致性问题4.1 核心问题问题陈述: 官方没有提供原子性跨分片备份的方案无法保证每个分片同时备份以保持数据一致性。GitHub Issue 链接:Issue #326 - Best practice to backup and restore sharding clickhouse用户提出的核心问题“I am concern about the synchronization and atomicity of the operation. For example, does it matter that the backup time of different shard are slightly different?”该问题至今没有官方明确解答。4.2 为什么无法保证跨分片一致性原因说明分片独立备份必须分别对每个分片执行备份无法做到原子性时间差存在各分片备份完成时间不同存在时间窗口无分布式事务ClickHouse 分片间没有跨分片事务保证Distributed 表是视图Distributed 表不存储实际数据只是查询路由4.3 恢复时的额外问题GitHub Issue 链接:Issue #299 - How to backup and restore correctly the cluster with distributed tables and shards报告的问题从分片1恢复数据后数据被意外复制到分片2最终导致两个分片包含相同数据完全不符合预期5. 存储快照方案分析5.1 官方文档说明链接:Alternative backup methods官方关于文件系统快照的描述“Some local filesystems provide snapshot functionality (for example, ZFS), but they might not be the best choice for serving live queries. A possible solution is to create additional replicas with this kind of filesystem and exclude them from the Distributed tables that are used for SELECT queries.”5.2 存储快照的局限性即使使用存储快照ZFS/LVM/云盘快照仍然无法解决跨分片一致性问题问题说明分片独立快照必须分别对每个分片的存储做快照时间差各分片快照时间不同数据仍存在时间窗口的不一致无原子性存储层无法感知应用层的分片逻辑5.3 当前环境的存储限制存储类型: csi-localpv 底层类型: hostPath (普通本地目录) 文件系统: 不支持快照 (ext4/xfs非 ZFS/LVM)结论: 当前环境无法使用存储快照方案。6. 方案对比备份方式跨分片一致性优点缺点clickhouse-backup (FREEZE)❌ 无保证硬链接节省空间、不阻塞操作逐分片备份、有时间差存储快照 (ZFS/LVM)❌ 无保证快速、存储层原生支持需要特定文件系统、仍有时间差BACKUP ON CLUSTER❌ 无保证原生 SQL 命令、易用官方未保证跨分片原子性暂停写入 备份✅ 有保证可确保一致性影响业务可用性7. 官方推荐的快照备份方案如果使用如果环境支持 ZFS 等快照文件系统官方推荐的架构┌─────────────────────────────────────────────────────────────┐ │ 应用查询 │ │ │ │ │ ▼ │ │ Distributed Table │ │ / \ │ │ / \ │ │ Shard 1本地表 Shard 2本地表 │ │ (正常副本) (正常副本) │ │ \ / │ │ \ / │ │ 专用备份副本 ← 排除在 Distributed 查询之外 │ │ (使用 ZFS/LVM) │ │ │ │ │ └──► 做存储快照备份 │ └─────────────────────────────────────────────────────────────┘实施步骤为每个分片创建专用的备份副本使用 ZFS/LVM 等支持快照的文件系统将这些副本从 Distributed 表中排除不影响正常查询对专用副本进行快照8. 结论官方没有提供原子性跨分片备份方案- Altinity clickhouse-backup 工具需要逐个分片进行备份无法保证所有分片同时备份- 从官方示例可以看到需要为每个分片单独执行备份数据一致性无法保证- 分片间没有分布式事务保证即使能同时触发备份各分片执行时间也会有差异存储快照无法解决根本问题- 存储快照只是改变了备份的实现方式但本质上仍需要逐个分片操作可能的解决方案需自行实现:应用层暂停写入 → 备份所有分片 → 恢复写入使用专用备份副本 文件系统快照只备份本地表恢复时重新创建分布式表使用 ReplicatedMergeTree 引擎 利用 ZooKeeper 的一致性保证9. 参考链接类型链接官方文档ClickHouse Backup and Restore官方文档Alternative backup methodsGitHub Issue#326 - Shard backup atomicity concernsGitHub Issue#299 - Shard restore problems官方示例Examples.md - Sharded cluster backup技术博客Introduction to ClickHouse Backups - Altinity文档生成时间: 2026-01-08环境: 210集群 (ck-5330623f)