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 文档,记录启动、演练、升级、备份恢复与回滚。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions