You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何安全迁移EKS上带PVC的MongoDB StatefulSet副本至其他节点

解决EKS环境下MongoDB StatefulSet副本节点迁移问题

前置检查

  • 确认MongoDB副本集健康状态:
    连接集群执行以下命令,确保所有节点stateStr为PRIMARY/SECONDARY,且optimeDate同步一致:
    rs.status()
    
  • 可选但推荐:全量备份数据
    mongodump --uri="mongodb://<你的Mongo服务地址>:27017" --out=/tmp/mongo-full-backup
    

迁移操作步骤

1. 恢复原节点调度能力(若之前执行过cordon)

kubectl uncordon <原Pod所在节点名称>

2. 缩容StatefulSet至1副本

终止待迁移的副本Pod(例如mongo-1):

kubectl scale statefulset <你的StatefulSet名称> --replicas=1

等待mongo-1完全终止后,执行kubectl get pods确认仅mongo-0处于运行状态。

3. 解除PV的节点绑定

查看待迁移副本对应的PV详情,确认节点亲和性配置:

kubectl describe pv <mongo-1对应的PV名称>

编辑PV移除节点绑定规则:

kubectl edit pv <mongo-1对应的PV名称>

找到并删除spec.nodeAffinity整块配置,保存退出。

4. 标记原节点为不可调度

阻止新Pod再调度回原节点:

kubectl cordon <原Pod所在节点名称>

5. 扩容StatefulSet回2副本

触发新副本Pod创建,此时它会自动调度到其他可用节点:

kubectl scale statefulset <你的StatefulSet名称> --replicas=2

执行kubectl get pods -o wide确认新的mongo-1运行在目标节点。

6. 验证副本集状态

再次连接MongoDB集群执行rs.status(),确认新节点已加入副本集且数据同步完成。

特殊场景处理

如果使用的云托管存储(如EBS)无法修改PV的节点绑定,可采用以下方案:

  1. 从原mongo-1Pod导出节点数据
  2. 删除原mongo-1对应的PVC和PV
  3. 扩容StatefulSet,让集群在目标节点创建新的PVC
  4. 将导出的数据导入新节点,完成副本集同步

内容的提问来源于stack exchange,提问作者Isaac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:07:14