feat: add two-node compose deployment

This commit is contained in:
2026-09-22 02:43:51 +08:00
parent 81f97544db
commit c33c12c5e9
5 changed files with 138 additions and 1 deletions

View File

@@ -111,6 +111,44 @@ docker compose -f deploy/docker-compose.yml down
Compose 没有为 scratch 镜像伪造容器内 HTTP healthcheck;编排器或入口网关应调用 `/health/live`、`/health/ready` 和 `/version`。`ready` 返回 `503` 时摘除节点,保留原幂等键并等待数据库恢复。只有明确的废弃环境才使用 `docker compose down -v`,生产数据卷不得随服务停止删除。
## 5. 当前边界
## 5. 两节点覆盖与滚动替换
需要在同一台主机验证多节点接管时,叠加 `deploy/docker-compose.ha.yml`。两个 Orbit 节点共享 MySQL、迁移账本、租约和流程检查点;每个进程仍生成独立节点标识,停止一个节点不会把另一个节点的持久化执行权一并停止:
```sh
export ORBIT_HTTP_BIND=127.0.0.1
export ORBIT_HTTP_PORT_A=8081
export ORBIT_HTTP_PORT_B=8082
docker compose \
-f deploy/docker-compose.yml \
-f deploy/docker-compose.ha.yml \
up -d mysql verify orbit-a orbit-b
curl --fail http://127.0.0.1:8081/health/ready
curl --fail http://127.0.0.1:8082/health/ready
```
入口层把 Nginx `upstream orbit_backend` 改为两个后端:
```nginx
upstream orbit_backend {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
keepalive 64;
}
```
滚动替换时先让入口健康检查摘除一个节点,再停止并更新它;确认另一节点 `ready` 后再恢复流量,最后启动更新后的节点并等待两个后端都通过健康检查:
```sh
docker compose -f deploy/docker-compose.yml -f deploy/docker-compose.ha.yml stop orbit-a
# 更新镜像标签后重新拉起 orbit-a;迁移和 verify 仍必须先成功
docker compose -f deploy/docker-compose.yml -f deploy/docker-compose.ha.yml up -d orbit-a
```
这个覆盖配置用于单机和隔离验收;生产环境应把两个 Orbit 节点放在不同故障域,前置负载均衡器负责健康摘除,MySQL 由独立数据库高可用方案提供,不把单机 Compose 多节点样本当成生产 HA 结论。
## 6. 当前边界
该文件是可重复的单节点启动基线,不代表自动数据库故障切换、跨故障域多副本、备份恢复或容量目标已经验收。生产上线还需要真实 MySQL 拓扑、滚动替换、凭据轮换、备份恢复、压测和 RPO/RTO 证据;对应门槛以[交付核对清单](release-checklist.md)为准。