-
Notifications
You must be signed in to change notification settings - Fork 0
HA and MultiRegion
EnerOS Bot edited this page Jul 5, 2026
·
1 revision
中文 | English
维护版本:v0.51.2 | 最后更新:2026-07-06
EnerOS 高可用从 v0.20.0 的双节点主备演进到 v0.41.0 的多区域多活,提供 RPO<1s / RTO<60s 的容灾能力。本页为演进与配置摘要;完整部署请参阅主仓库 docs/deployment.md §3.6 + ADR-0009。
| 版本 | 模式 | RPO | RTO | 拓扑 |
|---|---|---|---|---|
| v0.20.0 | 双节点主备 | 秒级 | 30s | 主-备,故障切换 |
| v0.41.0 | 多区域多活 | <1s | <60s | 3 区域 × 3 节点 |
推荐 3 区域 × 3 节点集群拓扑(同城双活 + 异地容灾):
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ region-a │ │ region-b │ │ region-c │
│ dc-shanghai │ │ dc-shanghai │ │ dc-beijing │
│ priority=100 │ │ priority=90 │ │ priority=80 │
│ │ │ │ │ │
│ ┌────────────┐ │ │ ┌────────────┐ │ │ ┌────────────┐ │
│ │ node-a1 │ │ │ │ node-b1 │ │ │ │ node-c1 │ │
│ │ (Primary) │ │ │ │ (Secondary)│ │ │ │ (Witness) │ │
│ ├────────────┤ │ │ ├────────────┤ │ │ ├────────────┤ │
│ │ node-a2 │ │ │ │ node-b2 │ │ │ │ node-c2 │ │
│ │ (Secondary)│ │ │ │ (Secondary)│ │ │ │ (Secondary)│ │
│ ├────────────┤ │ │ ├────────────┤ │ │ ├────────────┤ │
│ │ node-a3 │ │ │ │ node-b3 │ │ │ │ node-c3 │ │
│ │ (Witness) │ │ │ │ (Witness) │ │ │ │ (Primary) │ │
│ └────────────┘ │ │ └────────────┘ │ │ └────────────┘ │
└──────────────────┘ └──────────────────┘ └──────────────────┘
│ │ │
└───────── WAL 跨区域连续复制(RPO < 1s) ───┘
| 组件 | crate | 职责 |
|---|---|---|
| RegionAwareRouter | eneros-multiregion | 路由策略(local_first / latency_optimal / failover_only) |
| CrossRegionReplicator | eneros-multiregion | WAL 跨区域连续复制(RPO<1s) |
| DrOrchestrator | eneros-os/bins/eneros-dr-orchestrator | DR 故障检测(5s 周期)+ 故障切换 + 演练编排 |
| RollingUpgrader | eneros-os/bins/eneros-upgrader | 滚动升级(rolling / blue-green) |
| ConflictResolver | eneros-multiregion | 多活冲突解决(CRDT / LWW / none) |
默认禁用(enabled = false),未配置时 HA 中间件放行、HA 端点返回 501。
[ha_enhance]
enabled = true
[ha_enhance.multi_region]
local_region_id = "region-a"
routing_strategy = "local_first"
[[ha_enhance.multi_region.regions]]
id = "region-a"
datacenter = "dc-shanghai"
priority = 100
endpoints = ["https://eneros-a.example.com:8080"]
[ha_enhance.replication]
wal_dir = "/var/lib/eneros/wal"
max_wal_size_mb = 1024
batch_size = 100
rpo_warning_threshold_ms = 1000
rpo_degradation_threshold_ms = 5000
[ha_enhance.dr]
failure_detection_timeout_ms = 10000
failover_confirm_delay_ms = 10000
drill_enabled = true
drill_cron = "0 3 * * 0"
[ha_enhance.active_active]
conflict_policy = "crdt"
clock_skew_threshold_ms = 100定期演练是保障 DR 有效性的关键:
-
drill_enabled = true+drill_cron = "0 3 * * 0"(每周日 03:00 低峰期演练) - 演练场景轮换:第 1 周 CrossRegionFailover / 第 2 周 DataCenterLoss / 第 3 周 NetworkPartition
- 演练结果记录到审计日志,含 RPO/RTO 实测值
手动演练与紧急切换:
# 手动演练
eneros-dr-orchestrator --drill
# 紧急切换到指定区域
eneros-dr-orchestrator --failover region-c# 启动滚动升级
eneros-upgrader --target-version 0.52.0 --strategy rolling
# 蓝绿部署
eneros-upgrader --target-version 0.52.0 --strategy blue-green
# 中止升级
eneros-upgrader --abort升级配置:
[ha_enhance.upgrade]
health_check_retry_interval_ms = 5000
health_check_total_timeout_ms = 60000
health_check_retries = 3
graceful_shutdown_timeout_ms = 30000
auto_rollback_on_failure = true
minor_jump_allowed = 1
major_jump_requires_manual = true- 多活冲突解决仅 CRDT 和 LWW,未支持业务层冲突解决
- 跨区域复制仅 WAL 流,未支持对象存储复制
- DrOrchestrator 故障检测为简单心跳,未支持 Quorum
- 滚动升级仅支持 minor 跳 1 版本,major 跳需手动确认
- ADR-0009 多区域高可用
- 运维与插件 — 运维自动化与 HA 配合
-
配置参考 —
[ha_enhance]段配置项 - 主仓库 docs/deployment.md §3.6 — HA 部署配置
- 主仓库 crates/eneros-multiregion/ — 源码
EnerOS Wiki | v0.51.2