Kubernetes从Azure File到Longhorn跨存储类PV无停机迁移咨询
RabbitMQ 集群存储类无中断迁移方案
问题根因
你修改RabbitMQ CRD的storageClassName后未生成新PV为预期行为:RabbitMQ Cluster Operator 1.5.0仅在集群首次初始化、或对应PVC不存在的场景下,才会按配置的存储类动态创建PV,已绑定的存量PVC/PV不会因为CRD配置更新触发重建。
前置准备
- 确认Longhorn存储类
storage_class_2的读写性能、多副本冗余策略符合生产要求,你已在其他集群完成验证该步骤可跳过 - 全量备份RabbitMQ数据:执行
rabbitmqctl export_definitions导出集群元数据与消息配置,同时对存量Azure File PV做快照备份 - 确认RabbitMQ集群已开启镜像队列,所有消息存在多副本冗余,避免单点操作导致数据丢失
迁移方案
方案1:双集群零中断迁移(生产环境优先选择)
完全无业务中断,风险最低,步骤如下:
- 部署一套和原集群版本、配置完全一致的新RabbitMQ集群,CRD中直接配置
storageClassName: storage_class_2 - 开启新旧集群的Shovel插件或联邦交换器,配置双向消息实时同步,保证存量消息与增量消息无丢失同步到新集群
- 灰度切换上游业务的生产、消费连接地址到新集群,观测至少一个完整流量周期,确认新集群无消息堆积、无报错、读写正常
- 确认新集群完全承接流量且稳定运行24小时以上后,下线原集群,删除原有
storage_class_1对应的PVC和PV
方案2:单集群滚动迁移(适用于无法额外部署集群的场景,秒级中断)
要求集群节点数≥3且已开启镜像队列,操作步骤如下:
每次操作单节点,必须等集群恢复健康后再进行下一个节点操作
- 按顺序逐个删除RabbitMQ集群的节点Pod和对应的PVC,Operator重建Pod时会读取当前CRD的存储类配置,自动用
storage_class_2创建新的PVC和PV - 每个Pod重建完成后,等待镜像队列全量同步数据、
rabbitmqctl cluster_status返回集群状态为healthy后,再操作下一个节点 - 所有节点重建完成后,验证全量队列数据完整、业务生产消费链路正常
迁移后验证
- 执行
kubectl get pvc -n <RabbitMQ集群命名空间>,确认所有PVC的STORAGECLASS字段为storage_class_2 - 进入任意RabbitMQ Pod执行
rabbitmqctl list_queues,核对队列消息条数和迁移前一致 - 业务侧验证全量生产、消费链路无异常
内容的提问来源于stack exchange,提问作者Jack Admin
相关产品推荐
相关产品推荐

