ClickHouse 部署、备份与恢复规范

本文档给出 dbbot 在 ClickHouse 场景下的公开规范,用于统一部署、备份、恢复和日常运维的基本要求。

1. 目标

  1. 建立统一的 ClickHouse 集群交付规范。
  2. 降低备份和恢复对生产业务的影响。
  3. 通过 inventory 守卫、手工确认和 manifest 减少高风险误操作。
  4. 为原集群恢复和异地恢复提供一致的执行口径。

2. 基础环境要求

2.1 操作系统与硬件

  • 建议使用 x86_64 架构,并满足 SSE4.2 指令集要求。
  • 建议关闭透明大页和 SWAP。
  • 建议统一时区、文件描述符限制和系统安全基线。

2.2 网络与时间

  • 集群节点之间应保持稳定低时延网络。
  • 全集群应统一 NTP 或 Chrony。
  • 控制节点需要同时访问 ClickHouse 节点和协调节点。

2.3 存储

  • 生产优先使用 SSD。
  • 建议数据盘与系统盘分离。
  • 备份盘应与数据盘隔离,并保证 ClickHouse 进程可读写。

3. 拓扑与对象规范

  • 默认文档示例使用 3x2 拓扑,但这只是参考模型。
  • 分布式表用于统一访问入口,本地表承载实际数据。
  • 生产场景建议优先使用 Replicated*MergeTree 系列表。
  • 命名规范应保持一致,例如:
    • <domain>_<topic>_local:本地表
    • <domain>_<topic>:分布式表

4. 执行控制规范

4.1 inventory 分工

  • 部署使用 hosts.deploy.ini
  • 备份使用 hosts.backup.ini
  • 恢复使用 hosts.restore.ini

4.2 inventory purpose

建议在 [all:vars] 中显式设置:

  • dbbot_inventory_purpose=deploy
  • dbbot_inventory_purpose=backup
  • dbbot_inventory_purpose=restore

4.3 手工确认

  • 部署默认启用手工确认。
  • 恢复默认启用手工确认。
  • 生产环境不建议长期关闭此类门禁。

5. 备份与恢复原则

5.1 备份原则

  • 每个分片只选择一个副本执行物理备份,避免重复 IO。
  • 使用 safe_ts 作为跨分片时间口径。
  • 通过 manifest 保存批次号、路径、状态、时间和对象范围。

5.2 恢复原则

  • 主副本执行全量恢复。
  • 其他副本执行结构恢复,再通过复制追平。
  • 对象清理、放流和业务回补属于恢复 Runbook 的必要步骤,不应省略。

6. 安全与文档规范

  • 文档示例必须使用占位符,不写真实密码和真实内网地址。
  • 生产操作应保留批次号、执行日志和 manifest,便于审计。
  • 高危命令执行前需要双人复核恢复对象与 inventory 范围。

7. 推荐验收项

部署完成后,至少验证以下内容:

  1. system.clusters 中的拓扑是否完整。
  2. system.replicas 中是否存在只读、堆积或延迟异常。
  3. 备份批次是否成功生成 manifest。
  4. 恢复完成后,总量、分片数据和复制状态是否符合预期。