跳转至

备份恢复

本文引用的文件
- README.md - ADMIN_CONTROL_PLANE_PLAN.md - CONFIGURATION_MODEL_V2.md - PROTOCOL_PIPELINE_IMPLEMENTATION_PLAN.md - config.v - runtime_plan_loader.v - server_lifecycle_runtime_config.v - pipeline_runtime.v - cachex_runtime.v - dbx_runtime.v - inproc_vjsx_host_session_store_api.v - state_store_test.v - vhttpd@.service - io.guweigang.vhttpd.plist - install_runtime.sh - runtime_doctor.sh - bundle_runtime_libs.sh - object-cache.php

目录

  1. 引言
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与一致性考量
  8. 故障排查指南
  9. 结论
  10. 附录:自动化脚本与定时任务

引言

本文件面向运维与平台工程团队,提供 vhttpd 的备份与恢复策略。内容覆盖需备份的数据类型(配置、运行时状态、会话、缓存、数据库等)、自动化备份与定时任务、本地与远程目标、不同恢复场景(完全恢复、增量恢复、灾难恢复)、数据一致性与验证方法,以及数据库迁移与版本升级时的数据保护策略。文档同时结合仓库中已有的控制面持久化设计、内存缓存与数据库运行态快照能力,给出可落地的操作建议。

项目结构

vhttpd 将“声明式配置”编译为不可变的运行时计划(RuntimePlan),由原生 V 模块消费;控制面(Admin)通过嵌入式存储管理草稿、修订与部署记录;运行时暴露多种快照接口用于观测与诊断。这些特性为制定备份与恢复策略提供了清晰的边界与抓手。

graph TB
A["TOML 配置<br/>version=2 或兼容模式"] --> B["配置编译器<br/>生成 RuntimePlan"]
B --> C["运行时模块<br/>HTTP/WS/Stream/MCP/Provider"]
C --> D["外部执行器<br/>php-worker / vjsx 宿主"]
subgraph "控制面"
E["Admin 草稿/修订/部署<br/>JSON/JSONL 文件存储"]
end
subgraph "运行时持久化"
F["内存缓存<br/>Unix Socket 访问"]
G["数据库连接池<br/>MySQL/PostgreSQL/SQLite"]
end
C --> F
C --> G
E -.-> C

图表来源 - CONFIGURATION_MODEL_V2.md:166-215 - PROTOCOL_PIPELINE_IMPLEMENTATION_PLAN.md:894-969 - ADMIN_CONTROL_PLANE_PLAN.md:69-146

章节来源 - README.md:428-525 - CONFIGURATION_MODEL_V2.md:166-215 - ADMIN_CONTROL_PLANE_PLAN.md:69-146

核心组件

  • 配置与计划
  • TOML 配置经编译器生成不可变 RuntimePlan,作为运行时唯一输入。
  • 支持 version=2 严格校验与 V1 兼容路径。
  • 控制面持久化
  • Admin 使用嵌入式文件存储(JSON/JSONL),原子写入,启动重建轻量索引。
  • 运行时快照
  • 缓存子系统提供进程内键值快照与统计。
  • 数据库子系统提供连接池、慢查询、事务等运行态快照。
  • 会话与状态
  • 进程内会话存储 API 支持 set/get/patch/TTL 与 CAS 语义。
  • 示例应用(如 codexbot)使用 SQLite WAL 进行业务状态持久化。

章节来源 - config.v:132-170 - runtime_plan_loader.v:443-473 - ADMIN_CONTROL_PLANE_PLAN.md:69-146 - cachex_runtime.v:1-70 - dbx_runtime.v:1-70 - inproc_vjsx_host_session_store_api.v:43-86

架构总览

下图展示备份与恢复在系统中的关键触点:配置、控制面、缓存、数据库与会话。

sequenceDiagram
participant Ops as "运维/CI"
participant OS as "操作系统/文件系统"
participant CRON as "定时任务"
participant BK as "备份脚本"
participant S3 as "远程对象存储"
participant SV as "服务管理器(systemd/launchd)"
participant VH as "vhttpd 进程"
participant ADM as "控制面存储(.var/vhttpd/admin)"
participant CACHE as "内存缓存(UNIX socket)"
participant DB as "数据库(MySQL/PG/SQLite)"
Ops->>CRON : 配置定时任务
CRON->>BK : 触发备份
BK->>OS : 读取配置(TOML)/计划(RuntimePlan)
BK->>ADM : 打包控制面(JSON/JSONL)
BK->>CACHE : 导出缓存键列表/快照(可选)
BK->>DB : 执行逻辑层快照/导出(按应用)
BK->>S3 : 上传归档(加密/压缩)
SV-->>VH : 健康检查/重启(按需)

图表来源 - ADMIN_CONTROL_PLANE_PLAN.md:69-146 - cachex_runtime.v:1-70 - dbx_runtime.v:1-70 - vhttpd@.service - io.guweigang.vhttpd.plist

详细组件分析

需要备份的数据类型与范围

  • 配置文件与计划
  • TOML 配置(含多站点/多监听器)。
  • 已编译的 RuntimePlan(可通过 admin 端点获取并归档)。
  • 控制面数据
  • 草稿、修订、部署记录与事件日志(JSON/JSONL)。
  • 运行时状态
  • 进程内缓存(键空间、统计指标)。
  • 数据库连接池与慢查询观察(用于定位问题,非主数据源)。
  • 会话与应用状态
  • 进程内会话(带 TTL/CAS)。
  • 应用级持久化(例如 SQLite WAL 的业务表)。
  • 静态资源与上传目录
  • 静态根目录与上传临时目录(根据配置)。

章节来源 - README.md:428-525 - ADMIN_CONTROL_PLANE_PLAN.md:69-146 - cachex_runtime.v:1-70 - dbx_runtime.v:1-70 - inproc_vjsx_host_session_store_api.v:43-86

自动化备份脚本与定时任务

  • 备份范围
  • 配置与计划:TOML + RuntimePlan JSON。
  • 控制面:.var/vhttpd/admin 目录。
  • 缓存:键列表与统计快照(仅观测用途)。
  • 数据库:按应用选择合适方式(如 MySQL/PG 的逻辑导出或快照;SQLite 的 WAL 文件集)。
  • 静态与上传:配置中的 web_root 与 upload_dir。
  • 存储目标
  • 本地:按日/周归档到 /var/backups/vhttpd。
  • 远程:同步至对象存储(S3/OSS/MinIO),开启加密与保留策略。
  • 定时任务
  • Linux:systemd timer 或 cron。
  • macOS:launchd plist。
  • 参考模板
  • systemd 单元与 launchd plist 见部署模板。
  • 安装与自检脚本可用于环境准备与验证。

章节来源 - vhttpd@.service - io.guweigang.vhttpd.plist - install_runtime.sh - runtime_doctor.sh - bundle_runtime_libs.sh

数据恢复流程

完全恢复

  • 适用场景:整站重建、跨主机迁移。
  • 步骤要点
  • 停止服务(优雅关闭,等待 worker 退出)。
  • 恢复配置与计划(TOML + RuntimePlan)。
  • 恢复控制面数据(.var/vhttpd/admin)。
  • 恢复静态与上传目录。
  • 恢复数据库(按引擎导入/还原)。
  • 启动服务并验证健康端点与关键路由。

章节来源 - README.md:367-411 - ADMIN_CONTROL_PLANE_PLAN.md:69-146

增量恢复

  • 适用场景:单站点/单应用变更回滚、局部数据修复。
  • 步骤要点
  • 基于最近一次全量备份 + 增量差异(文件或数据库 binlog/WAL)恢复。
  • 优先恢复只读数据(配置、静态),再恢复写数据(数据库)。
  • 对控制面与缓存无需强制恢复(可重建或忽略)。

章节来源 - CONFIGURATION_MODEL_V2.md:166-215

灾难恢复

  • 适用场景:节点/机房级故障。
  • 步骤要点
  • 从异地副本拉取最新全量+增量。
  • 先恢复只读层(配置/静态),再恢复数据库。
  • 启动后执行端到端冒烟测试(健康、关键路由、MCP/Feishu 连通性)。

章节来源 - README.md:367-411

数据一致性保证措施

  • 控制面持久化
  • 使用临时文件+原子重命名写入,避免半写状态。
  • 启动时扫描目录重建轻量索引。
  • 缓存与会话
  • 进程内缓存无跨进程一致性要求;会话支持 TTL 与 CAS,避免并发覆盖。
  • 数据库
  • 推荐逻辑层快照(导出/快照)而非直接拷贝数据文件(除 SQLite 外)。
  • SQLite 使用 WAL 模式,需在恢复时包含所有相关文件。

章节来源 - ADMIN_CONTROL_PLANE_PLAN.md:87-112 - state_store_test.v:37-52 - inproc_vjsx_host_session_store_api.v:43-86

备份验证方法

  • 完整性校验
  • 对归档包计算并保存校验和(sha256sum)。
  • 定期抽样解压校验。
  • 可恢复性演练
  • 在隔离环境执行最小化恢复(仅配置+静态+空库),验证启动成功。
  • 逐步引入数据库与关键数据,验证关键路由与上游集成。
  • 运行时观测
  • 利用 admin 端点查看 RuntimePlan、worker 与 provider 快照,确认恢复后行为一致。

章节来源 - README.md:1112-1171

数据库迁移与版本升级的数据保护策略

  • 迁移前
  • 创建全量快照(逻辑导出或快照),并记录版本与时间戳。
  • 冻结写入口(灰度/限流),确保导出一致性。
  • 迁移中
  • 先在只读副本执行迁移脚本与校验。
  • 切换流量至新版本实例,保持旧实例热备。
  • 迁移后
  • 观察慢查询与错误率,必要时回滚至旧快照。
  • 清理过期备份,保留满足保留策略的版本。

章节来源 - dbx_runtime.v:1-70

依赖关系分析

  • 配置到运行时
  • TOML -> 编译器 -> RuntimePlan -> 各运行时模块(HTTP/WS/Stream/MCP/Provider)。
  • 控制面与运行时
  • Admin 存储独立于运行时数据平面,便于单独备份与恢复。
  • 缓存与会话
  • 进程内缓存与会话 API 为运行时内部能力,不对外部强一致。
graph LR
TOML["TOML 配置"] --> COMP["编译器"]
COMP --> PLAN["RuntimePlan"]
PLAN --> HTTP["HTTP 管道"]
PLAN --> WS["WebSocket 运行时"]
PLAN --> STREAM["流式运行时"]
PLAN --> MCP["MCP 运行时"]
ADMIN["控制面存储"] -.-> PLAN
CACHE["内存缓存"] -.-> HTTP
DB["数据库"] -.-> 应用层

图表来源 - CONFIGURATION_MODEL_V2.md:166-215 - PROTOCOL_PIPELINE_IMPLEMENTATION_PLAN.md:894-969 - ADMIN_CONTROL_PLANE_PLAN.md:69-146

章节来源 - config.v:132-170 - runtime_plan_loader.v:443-473

性能与一致性考量

  • 备份窗口
  • 尽量在低峰期执行,避免与高吞吐请求竞争 I/O。
  • 数据库导出
  • 使用逻辑导出(mysqldump/pg_dump/sqlite3 .dump)以保证一致性;避免直接拷贝 InnoDB/PG 数据文件。
  • 缓存与会话
  • 不纳入强一致恢复范围;恢复后可重建。
  • 静态与上传
  • 大文件采用分片/并行传输,启用去重与断点续传。

[本节为通用指导,不直接分析具体文件]

故障排查指南

  • 启动失败
  • 检查配置语法与路径解析(环境变量与相对路径)。
  • 使用 runtime_doctor 与环境检测脚本验证依赖。
  • 端口冲突/权限
  • 确认 systemd/launchd 模板中的用户、工作目录与端口绑定。
  • 健康检查
  • 通过 admin 端点与健康路由验证服务就绪。

章节来源 - README.md:367-411 - runtime_doctor.sh

结论

vhttpd 的备份与恢复应围绕“配置即计划、控制面独立、运行时快照可观测”的原则展开。以 TOML 与 RuntimePlan 为核心,配合控制面 JSON/JSONL 与数据库逻辑快照,构建分层备份体系;通过定期演练与校验,确保在完全恢复、增量恢复与灾难恢复场景下具备可预期的 RTO/RPO。

[本节为总结,不直接分析具体文件]

附录:自动化脚本与定时任务

备份清单与顺序

  • 只读层
  • TOML 配置与 RuntimePlan JSON。
  • 静态资源与上传目录。
  • 控制面
  • .var/vhttpd/admin 目录。
  • 数据层
  • 数据库逻辑导出(MySQL/PG)或 SQLite 快照(WAL 相关文件)。
  • 顺序
  • 先只读层,再控制面,最后数据层。

定时任务建议

  • Linux
  • 使用 systemd timer 或 cron 每日执行,保留 N 天滚动。
  • macOS
  • 使用 launchd plist 调度。

章节来源 - vhttpd@.service - io.guweigang.vhttpd.plist

远程同步与加密

  • 使用 s3cmd/rclone/ossutil 等同步工具,开启服务端加密与客户端签名。
  • 设置生命周期策略自动清理过期备份。

[本节为通用指导,不直接分析具体文件]

WordPress 对象缓存适配

  • 若使用 WordPress 对象缓存桥接,注意其调用的是进程内缓存接口,不影响备份范围。

章节来源 - object-cache.php:80-126