操作手册 · 大数据运维

待环境验证

ClickHouse 副本巡检与备份恢复

按本地表和分片巡检复制队列与 Keeper,核对原生备份依赖链,并在隔离目标验证恢复状态与业务样本。

ClickHouse大数据监控告警
阅读导引 · 理解后再操作

这篇知识解决什么问题

本篇分别验收副本可用性和历史可恢复性:复制队列解释当前数据推进,备份清单解释能够取回什么。理解 Keeper、分片与本地表的边界后,再核对异步备份、基础依赖和隔离恢复,特别保留部分失败后的实际目标状态。

复制进度与备份完整性分别判断

异步复制改善可用性,误写和删除也可能传播。Keeper 不保存全部业务数据,Distributed 定义不包含各分片明细;备份必须逐项记录实际数据集合和恢复依赖,不能以副本数量证明历史可恢复。

恢复失败需要检查留下了什么

异步备份受理不是完成,RESTORE 也不是失败后自动整体回滚的事务。任务状态、对象存储、已恢复表和可见 part 都要核对,再决定新的隔离目标或下一步,避免对非空目标反复追加。

进入文章正文
关联架构图解5 个组件 · 点击展开

图中同分片其他副本与独立备份目的地是两条不同保护路径,Keeper 只协调元数据。单向副本箭头是逻辑示意,不表示唯一写主;一个本地表到备份的箭头也不代表所有分片和外部依赖已经得到覆盖。

查看场景架构与实施步骤
参考架构 · 非实时拓扑

ClickHouse 合并、副本与查询运维架构

联查 MergeTree parts、查询内存、复制队列和备份恢复,区分本地表、分片与副本,完成有界诊断和隔离验收。

  • 数据 / 请求
  • 控制 / 管理
  • 观测 / 查询

点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。

ClickHouse 合并、副本与查询运维架构:组件关系图联查 MergeTree parts、查询内存、复制队列和备份恢复,区分本地表、分片与副本,完成有界诊断和隔离验收。 客户端 / Distributed → 分片本地表:路由与执行;分片本地表 → 同分片其他副本:数据副本同步;分片本地表 → Keeper 协调:复制协调;同分片其他副本 → Keeper 协调:副本进度协调;分片本地表 → 独立备份目的地:独立备份。箭头说明见下方流向解读。
逻辑参考图,待环境验证。以开源自建 ClickHouse 的 MergeTree / ReplicatedMergeTree 为主线,执行前 SELECT version() 并对照对应版本字段。ClickHouse Cloud 使用不同的存储与运维机制,应采用服务文档。

客户端 / Distributed

入口 / 来源

示意路由到目标分片,Distributed 自身不等同底层持久数据副本。

查看关联工具
全部组件职责 5 个组件
客户端 / Distributed
示意路由到目标分片,Distributed 自身不等同底层持久数据副本。工具介绍 客户端 / Distributed
分片本地表
保存当前分片的数据 parts,排序键与分区用于数据组织。工具介绍 分片本地表
同分片其他副本
复制同一分片的数据,不能当作额外不同分片计算总数据量。工具介绍 同分片其他副本
Keeper 协调
协调复制元数据;数据 parts 不通过 Keeper 存储。工具介绍 Keeper 协调
独立备份目的地
保存备份数据和所需元数据,完整性仍需恢复演练证明。
流向解读 5 条连接
  1. 1

    客户端 / Distributed 分片本地表

    数据 / 请求 · 路由与执行

    本地表执行当前分片查询;跨分片聚合由入口查询计划协调。

  2. 2

    分片本地表 同分片其他副本

    数据 / 请求 · 数据副本同步

    示意同一复制组间获取数据 parts,不意味着所有写入必须先经过这个节点。

  3. 3

    分片本地表 Keeper 协调

    控制 / 管理 · 复制协调

    本地副本使用协调服务维护复制元数据。

  4. 4

    同分片其他副本 Keeper 协调

    控制 / 管理 · 副本进度协调

    其他副本独立维护复制进度和协调会话。

  5. 5

    分片本地表 独立备份目的地

    数据 / 请求 · 独立备份

    按经过核实的备份范围持久保存可恢复来源。

故障域与操作边界

适用版本与部署模式

以开源自建 ClickHouse 的 MergeTree / ReplicatedMergeTree 为主线,执行前 SELECT version() 并对照对应版本字段。ClickHouse Cloud 使用不同的存储与运维机制,应采用服务文档。

数据与变更边界

不自动执行 OPTIMIZE FINAL、删除 parts、重建 Keeper 路径或生产 RESTORE。分片分摊数据,副本复制数据;Distributed 表不凭自身保存底层全部数据。

架构依据与版本核对 2 篇官方资料

图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。

适用范围与对象身份

本文面向自建 ClickHouse 的 ReplicatedMergeTree 家族、ClickHouse Keeper 协调及原生 BACKUP/RESTORE。Cloud 的共享存储和托管备份使用相应产品流程,不能把自建副本拓扑直接套入。原生备份能力和设置随版本变化,例如 BACKUP ALL 在 23.4 前不适用;本文以单表范围展示基础语法,不使用全库备份捷径。

先建立数据库、分片、本地表、副本名、Keeper 路径和 Distributed 入口的对应关系,记录版本、业务写入入口及备份目的端。所有 SQL 都是待现场验证的示例,本文未访问集群或执行备份恢复,验证等级为 PENDING。

分片、副本与协调服务的边界

分片划分数据集合,副本复制同一分片的数据。ReplicatedMergeTree 复制通常是异步多写入口,默认一次 INSERT 等待当前副本的确认,不代表所有副本已经可读。quorum 写入能改变确认条件,但不能据此推导任意副本读取始终最新或所有系统操作拥有跨分片事务。

Keeper 负责复制协调元数据,不保存表中的全部业务数据。复制引擎按表工作,普通建表语句也不会因此自动在所有服务器创建同名表;数据库引擎和分布式 DDL 有各自职责。Distributed 提供跨节点查询与路由,不是自动补齐全部分片备份的数据副本。复制机制

读取一张表的副本状态

SELECT database, table, replica_name,
       is_readonly, is_session_expired,
       queue_size, absolute_delay, lost_part_count
FROM system.replicas
WHERE database = 'REPLACE_WITH_DATABASE'
  AND table = 'REPLACE_WITH_LOCAL_TABLE'
LIMIT 10
SETTINGS max_execution_time = 5, max_threads = 2;

该查询只反映当前节点;在确认的同分片副本上分别取证并对齐时间。只读状态和会话过期优先关联 Keeper 连接与日志;队列和延迟应看趋势,不能只靠一个时刻决定健康。lost_part_count 是累计丢失 part 计数,应关注新增长及对应历史,不能要求它在修复后自动归零。system.replicas

将复制积压定位到队列任务

SELECT type, create_time, source_replica,
       num_tries, num_postponed,
       last_exception, postpone_reason
FROM system.replication_queue
WHERE database = 'REPLACE_WITH_DATABASE'
  AND table = 'REPLACE_WITH_LOCAL_TABLE'
ORDER BY create_time
LIMIT 20
SETTINGS max_execution_time = 5, max_threads = 2;

区分拉取 part、合并和 mutation 等任务。失败次数与推迟次数代表不同原因:磁盘不足、源副本无法访问、已有相关任务执行等需要分别调查。错误文本可能包含内部地址和路径,交接前脱敏。对照两个时间点的最老任务和重试情况,判断队列是正常周转还是停滞,不能因数量大就删除 Keeper 队列节点。system.replication_queue

副本不能替代历史备份

误写、删除和部分结构变更可能传播到副本。副本提高可用性,历史恢复仍依赖独立保存且可取回的备份。单节点备份一个本地表只覆盖该节点拥有的数据,整个分片集需要明确覆盖清单;只保存 Distributed 定义无法恢复其指向的所有明细。

备份清单还应包含表结构、物化视图依赖、字典外部来源、访问控制、配置引用及密钥保存责任。多个表或跨系统结果若需要同一业务切点,应记录停写、输入位置或其他一致性方案,不能因同一命令包含多张表就假定得到业务全局事务快照。备份与恢复概述

原生备份的有限示例

以下语句仅为独立演练环境准备:sandbox.events_design_demo 是已有有限样本表,backups 是已配置并允许使用的备份磁盘,路径必须是本次演练唯一名称。BACKUP 会写入备份存储,不属于只读诊断。

BACKUP TABLE sandbox.events_design_demo
TO Disk('backups', 'REPLACE_WITH_UNIQUE_DRILL_PATH.zip')
ASYNC;

ASYNC 返回只表明操作已受理;保存返回 ID,再查询状态。不能用查询执行超时作为备份任务一定停止的依据。若使用增量备份,须保留被引用的基础备份及完整依赖链,不能按日期分别清理仍被依赖的对象。单机本地磁盘备份也要评估主机丢失时的取回路径。磁盘备份语法

验证状态并规划隔离恢复

SELECT id, status, start_time, end_time, error
FROM system.backups
WHERE id = 'REPLACE_WITH_OPERATION_ID'
LIMIT 1
SETTINGS max_execution_time = 5;

system.backups 保存当前服务启动以来的操作信息,重启后空结果不证明备份不存在;长期审计要保存独立记录并核查备份存储。BACKUP_CREATED 证明该任务完成,不能替代实际恢复演练。恢复前确认目标表不存在或为空,核对版本、目标磁盘、Keeper 路径和外部连接,复制表不得重新加入生产协调路径。system.backups

恢复演练与部分失败

在完全隔离的服务器上准备同名备份磁盘和独立 restore_drill 数据库,将备份取回后,才可评审以下恢复语句。示例源表是普通 MergeTree;复制表的 DDL 和 Keeper 隔离需要另外核验。

RESTORE TABLE sandbox.events_design_demo
AS restore_drill.events_design_demo
FROM Disk('backups', 'REPLACE_WITH_UNIQUE_DRILL_PATH.zip');

不要为了绕过非空检查启用 allow_non_empty_tables,该选项可能把既有数据与备份数据混合。RESTORE 不是失败后自动整体回滚的事务,已完成的表或 attach 阶段已经可见的部分数据可能保留。出现失败应记录目标实际状态并评审新的隔离目标,不能原样连续重试后声称没有重复。恢复语法与非空目标恢复原子性边界

验收、误区与停止回退

副本处置验收包括会话和只读状态符合预期、队列最老任务持续推进、没有新的丢 part 证据,以及指定业务样本在预期副本可读。备份验收则核对分片覆盖、已知时间范围与业务键、表结构和代表性查询,分别记录取回、恢复和对账耗时。两类验收不能互相替代。

常见误区是把副本 leader 当成唯一写主、把备份成功当成恢复成功,以及通过清空 Keeper 或删除本地 part 修复任何复制问题。若出现多副本异常、新丢 part、备份链缺失或恢复目标仍连生产入口,停止重建与推广并保护剩余材料。只读诊断无需数据回滚;恢复后的业务接管应明确新写入归属,改回入口无法合并两边已经产生的数据。

相关阅读:MergeTree 数据设计查询与内存诊断

参考资料

从现象到判断

先收集证据,再缩小范围。以下是判读路径,不代表已经确认根因或获准变更。

  1. 同表一个副本变为只读,会话过期,复制队列最老任务持续停留。

    只读核对
    对齐该副本 Keeper 会话、队列异常、源副本可达性和磁盘余量。
    如何判读
    协调或数据拉取可能受阻,需逐项定位;不应通过清空 Keeper 路径消除队列表象。
  2. BACKUP ASYNC 已返回操作 ID,随后节点重启,system.backups 查不到该 ID。

    只读核对
    核对重启时间、独立任务审计、备份对象和基础备份依赖,不触发同名重备份。
    如何判读
    系统表只保留当前启动以来操作,空结果不能证明成功或失败,需从持久证据确认。
  3. 恢复任务失败,但隔离数据库已经出现部分表或数据,准备直接再次恢复。

    只读核对
    保存任务错误、已存在对象、可见分区和备份身份,核对目标是否仍为空及是否隔离生产。
    如何判读
    可能发生部分完成,失败不会自动回滚;先评审目标状态,不能用非空恢复选项掩盖重复风险。
常见误区与判断边界 2 项

将累计丢 Part 计数作为归零验收

lost_part_count 是历史累计信息,不会因本次修复必然清零。应追踪新增长、受影响对象和当前可读性,保留历史解释,而非修改协调元数据使看板变绿。

只备份入口定义并删除旧基础备份

Distributed 定义不能代替底层分片数据,增量备份又可能引用旧基础对象。清理前必须检查完整依赖链与恢复覆盖,按年龄删除仍被引用材料可能让所有近期增量一起失效。

交接时应留下的证据

作为记录提纲使用,不是自动检查结果;未取得的证据应标记缺口,并注明负责人。

  • 保存版本、分片、本地表、副本名、Keeper 路径和业务入口的完整映射。
  • 记录两个时间点的副本状态、最老队列任务、重试异常和累计丢 Part 变化。
  • 归档备份 ID、完成状态、分片覆盖、基础依赖、外部配置与受控取回材料。
  • 保留隔离恢复的实际对象状态、业务键对账、权限和耗时,明确部分失败与正式接管边界。

记录需包含环境、版本、时间与时区;分享前脱敏,不附访问令牌、密码或完整业务敏感数据。

继续阅读与资料核对

补充相关主题,再结合当前环境的实施记录形成结论。

返回原理导读

DOUYA OPS ECOSYSTEM

贡献你的经验,帮助更多运维人

把故障复盘、标准流程和最佳实践沉淀为可检索、可复用的知识内容。