每日一Go-76(架构篇)|多集群部署 / 容灾 / Failover / Backup / 热迁移
关键词:多集群、容灾架构、Failover、备份恢复、热迁移、Go 云原生实战
在前面的《每日一Go》系列中,我们已经完成了CI/CD → K8s → GitOps(ArgoCD)的完整工程化闭环。
从这一篇开始,我们把视角再往前推进一步:
当集群真的挂了,你的系统还能活吗?
这正是多集群部署与容灾要解决的问题。
一、为什么一定要多集群?
很多团队以为:
有 K8s 就够了
有 HPA 就够了
有 Pod 重启就够了
但现实是:
|
故障级别
|
是否能靠单集群解决
|
| — | — |
|
Pod Crash
|
✅
|
|
Node 宕机
|
✅
|
|
集群控制面异常
|
❌
|
|
整个 Region 不可用
|
❌
|
|
误删 Namespace / CRD
|
❌
|
CRD(Custom Resource Definition)= 让你给 Kubernetes 增加“新资源类型”的机制
结论只有一句话:
真正的高可用 = 多集群 + 容灾设计
二、多集群的 3 种主流架构模式
1️⃣ Active-Active(双活 / 多活)
User ↓ Global LB ↓ Cluster A ←→ Cluster B特点:
两个集群同时对外提供服务
流量按比例分发
优点:
切换无感知
资源利用率高
难点:
数据一致性
会话管理
2️⃣ Active-Standby(主备)
User ↓ LB ↓ Cluster A(Active)Cluster B(Standby)特点:
主集群工作
备集群随时接管
优点:
架构简单
成本可控
缺点:
- 切换存在 RTO
RTO = Recovery Time Objective(恢复时间目标)
👉 指的是:系统从故障发生到恢复可用,允许的最长时间
3️⃣ 多区域(Region)灾备
Region A(Cluster)↓ 数据复制 Region B(Cluster)适合:
- 金融 / 电商 / 全球化业务
三、Failover:真正的“自动切换”
Failover 的核心不是「重启」,而是:
当一个集群不可用,流量要自动切到另一个集群
常见实现方式
- DNS 级 Failover
Route53 / Cloudflare
健康检查失败 → 切换解析
- Global Load Balancer
- GSLB / 云厂商全局负载均衡
- Service Mesh 跨集群
- Istio / Linkerd Multi-Cluster
四、Backup:你以为的备份 ≠ 真正能恢复
1️⃣ 必须备份的东西
Kubernetes 资源(YAML)
etcd(核心)
持久化数据(PVC / DB)
2️⃣ Velero:事实上的标准方案
Velero 能做什么?
集群级备份
Namespace 级恢复
跨集群恢复
velerobackupcreatefull-backupvelerorestorecreate--from-backup full-backup一句话总结:
Velero = Kubernetes 世界的 Time Machine
五、热迁移:不停机“搬家”
什么是热迁移?
在用户无感知的情况下,把服务从集群 A 迁移到集群 B
常见手段
双集群同时部署(GitOps)
流量逐步切换(灰度 / 金丝雀)
数据提前同步
10% → 30% → 50% → 100%六、Go 服务在多集群下要注意什么?
1️⃣ 服务必须是无状态的
// ❌ 不要依赖本地内存状态varcache=map[string]string{}2️⃣ 配置必须外置
ConfigMap
Secret
Env
3️⃣ 优雅下线(非常重要)
ctx,stop:= signal.NotifyContext(context.Background(),os.Interrupt)deferstop()<-ctx.Done()log.Println("shutting down gracefully")七、一张全景图理解多集群容灾
Users ↓ Global LB / DNS ↙ ↘ Cluster A Cluster B(Active)(Standby)↘ ↙ Shared Storage / DB八、写在最后
如果你只记住这一篇的3 句话:
单集群没有容灾能力
备份的终点是恢复,不是存下来
多集群是工程能力,不是云厂商特性
友情链接:加班费计算器(vx小程序“加班计”)
*源码地址*
https://pan.baidu.com/s/1B6pgLWfSgMngVeFfSTcPdg?pwd=jc1s
如果您喜欢这篇文章,请您(点赞、分享、亮爱心),万分感谢!
