Skip to content

Add an executable HA deployment profile for stateful dependencies #73

Description

@ULookup

Target Version

3.0-dev。调研基于 origin/3.0-dev 提交 15f6eae5600197879a2fd5a0bc4c65a41df689af。当前仓库没有里程碑,目标是在该开发线补充可执行的高可用基线。

Evidence

  • docker-compose.yml:4-27 分别只运行一个 etcd 和一个 MySQL。
  • docker-compose.yml:124-134 只运行一个 RabbitMQ。
  • docker-compose.yml:113-123 将 Elasticsearch 配置为 discovery.type=single-node
  • Redis 是唯一显式多节点依赖:docker-compose.yml:28-112 创建 3 master + 3 replica Cluster。
  • 应用配置如 conf/docker/message_server.conf:4,13,22,34 只提供单一 etcd、MySQL、RabbitMQ、Elasticsearch endpoint。
  • .agents/skills/chatnow-orienting/references/technology-stack.md 还记录了根 Compose 与 docker/docker-compose.yml 的 MinIO 网络、endpoint 和端口冲突,当前不存在可验证的完整对象存储拓扑。
  • 因此当前可执行栈存在多个单进程故障点,也没有自动化 failover/RTO/RPO 证据。

Problem or Goal

提供一个可启动、可检查、可故障演练的 HA 部署 profile,明确 Redis、RabbitMQ、MySQL、etcd、Elasticsearch 和 MinIO 的副本/仲裁、客户端发现、readiness、备份恢复与降级边界。它作为测试/预发布生产基线,而不是把单机 Compose 宣称为生产高可用。

Scope

  • 为有状态依赖提供独立、显式的 HA profile 和配置,不破坏轻量本地开发 profile。
  • RabbitMQ 使用可跨节点持久化的队列;etcd 使用奇数 quorum;MySQL 提供主故障切换和客户端重连;Redis 验证 replica promotion;ES/MinIO 明确副本和恢复边界。
  • 应用支持 endpoint 列表、稳定代理或官方 discovery 机制,readiness 能区分依赖未就绪与业务可服务。
  • 提供节点故障、网络分区、恢复、滚动升级、备份/恢复与回滚 runbook。
  • 通过 Complete and document the reliability fault-injection layer #65 自动验证单节点故障和多数派丢失时的预期行为。

Non-goals

  • 不在本 Issue 中绑定某个云厂商或购买托管服务。
  • 不承诺跨地域 active-active。
  • 不把 Elasticsearch/MinIO 的派生或对象恢复语义等同于 MySQL 消息 RPO。
  • 不删除当前低资源本地开发 profile。

Acceptance Criteria

  • 一个仓库内可执行命令能启动完整 HA profile,并通过服务与依赖 readiness。
  • 任一 Redis master、RabbitMQ 节点、etcd member、MySQL primary、ES node 或 MinIO node 单独停止后,系统按文档预算自动恢复或明确降级。
  • 已 confirm 的 RabbitMQ 消息和已 commit 的 MySQL 数据在单节点故障下 RPO=0。
  • 关键发送/同步服务在单节点故障后的 RTO 不超过 60 秒;若某依赖业务语义不同,必须在同一文档明确更严格或更宽的预算与原因。
  • 多数派丢失时写入 fail-closed,不发生 split-brain 成功。
  • 应用配置不存在只认已故障单 endpoint 而无法重发现的路径。
  • 备份恢复、证书/secret、滚动升级、容量要求和回滚均有可执行步骤。
  • Complete and document the reliability fault-injection layer #65RL-HA-01 覆盖每类单节点故障及至少一个多数派丢失场景。

Test-first Plan

先增加 RL-HA-01 并运行:

make -C tests test-reliability TEST_RUN=TestRL_HA_StatefulSingleNodeFailure

预期 RED 是停止当前唯一 RabbitMQ/MySQL/etcd/ES 进程后核心流中断且无法自动恢复;Redis/MinIO 子用例记录各自实际缺口。最小 GREEN 是可执行 HA profile 和应用重发现;随后运行完整 Reliability、BVT、Functional、Scenario 和备份恢复演练。

Risk and Security

HA profile 资源开销大,应与默认开发栈隔离并在 CI 中显式选择。网络分区配置不当可能产生 split-brain;secret、TLS、节点 cookie/token 和备份必须通过受控注入,不能提交到仓库或日志。故障演练必须拒绝共享/生产 endpoint。

Architecture Impact

Yes。有状态基础设施拓扑、应用 endpoint/discovery、readiness、备份和部署契约发生变化。

Core-flow Impact

Yes。正常业务协议不变,但消息发布、服务发现、缓存、持久化、搜索和媒体流程在依赖故障时的可用性与错误边界发生变化。

Required Skill Updates

  • 更新 .agents/skills/chatnow-orienting/references/technology-stack.md,区分 local 与 HA profile 及各依赖拓扑。
  • 更新 .agents/skills/chatnow-orienting/references/repository-map.md,登记配置、证书、runbook、readiness 和启动入口。
  • 更新 .agents/skills/chatnow-orienting/references/core-flows.md,记录依赖 failover/多数派丢失时的流程语义。
  • 更新 .agents/skills/chatnow-testing/references/framework.mdcase-catalog.md,登记 HA Reliability 环境和 RL-HA-01
  • 更新 canonical deployment/operations 文档,记录启动、演练、升级、备份恢复与回滚。

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions