Skip to content

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 演练

定期演练是保障 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

已知限制(v0.51.2)

  • 多活冲突解决仅 CRDT 和 LWW,未支持业务层冲突解决
  • 跨区域复制仅 WAL 流,未支持对象存储复制
  • DrOrchestrator 故障检测为简单心跳,未支持 Quorum
  • 滚动升级仅支持 minor 跳 1 版本,major 跳需手动确认

相关文档

Clone this wiki locally