ConstStar
发布于 2026-03-26 / 8 阅读 / 0 评论 / 0 点赞

迁移服务器小记

一、迁移前的准备工作

1. 先模拟和测试

不要直接在目标服务器上开干。先在测试环境完整搭建一遍,包括 K8s 集群、EMQX、数据库、反向代理、证书等所有组件。搭建过程中遇到问题及时记录,形成文档,正式迁移时照着文档执行即可。

模拟搭建时必须做完以下测试:

  • 压力测试(连接数、数据量、集群间通讯等)
  • 大小消息响应速度测试
  • 持续性测试,观察内存和 CPU 是否持续上涨
  • 检查是否有内部通信走了公网流量
  • 模拟服务器彻底宕机后重启,验证各程序能否自动拉起、集群能否自动恢复,确保不会到了紧急情况下还要手动介入

2. 清理旧服务器

迁移是清理历史包袱的好时机:

  • 清理用不到的域名、过期证书
  • 清理不再维护的旧程序、测试程序
  • 关闭所有对外开放端口,仅开放必需的端口号

旧服务器长期运行后往往积累了大量历史残留,直接原样照搬只会把问题也带过去。

3. 记录关键基线数据

迁移前记录旧服务器的关键运行指标,便于迁移后对比判断是否有设备连不上或数据丢失:

  • MQTT 在线连接数、每秒消息数、订阅主题数量
  • 各服务 CPU、内存占用情况

这些数据是迁移后快速判断“是否正常”的参考基准。

4. 统一用 Docker 或 K8s 管理

建议所有非临时性程序都放在 Docker 或 K8s 中运行。好处有三:

  • 安全隔离:各服务独立运行,互不影响
  • 统一管理:程序和数据集中存放,日后再次迁移时不会因为“东一点西一点”而遗漏
  • 自动恢复:配合健康检查和重启策略,服务宕机后可自动拉起

5. 做好回滚预案

迁移前必须确保能够快速回退。保留旧服务器至少到迁移验证通过后再释放。一旦新环境出现严重问题,切回旧环境不应超过几分钟。

6. 提前告知用户和内部同事

明确告知销售同事:迁移对用户的影响几乎可以忽略(设备会自动重连)。避免内部一出问题就往“是不是迁移服务器导致的”上靠,防止不必要的恐慌和排查成本。

7. 注意旧服务器升级的“政策坑”

某些旧服务器升级或续费后会走新政策。例如阿里云和腾讯云,以前不会限制上行带宽,但升级下行带宽后反而把上行限制到 30M,导致服务器卡顿。当时就因为这个排查了很久才发现是平台政策变更——花钱反向升级。

迁移时如果涉及旧服务器续费或临时升级,建议先查清当前的带宽政策。

二、迁移过程中

1. 逐步切换负载均衡

不要一次性把所有流量切到新服务器。先调整 DNS 负载均衡的权重,让新服务器承接小部分流量,观察一段时间无异常后再逐步增加。

三、迁移后要做的事

1. 对比迁移前后各项指标

对照迁移前记录的基线数据,逐一核对:

  • MQTT 在线连接数是否接近
  • 消息吞吐量是否正常
  • 各服务 CPU、内存占用是否在预期范围内

如有明显差距,排查是否有设备连不上或服务异常。

2. 实施节点疏散

先迁移的服务器往往会承接大量连接。迁移完成后需做节点疏散,避免单节点压力过大:调整 DNS 负载均衡权重,逐步将连接分摊到其他节点;必要时踢出长连接用户让其重连,自然分配到其他节点。

3. 持续监控

迁移完成后持续观察公网流量、CPU 和内存上涨情况,确认没有隐藏问题。

4. 保留旧服务器一段时间

迁移完成后也需要保留旧服务器一段时间,以防某些东西忘记迁移或者少了一些数据。要注意旧服务器必须关机,这样某些服务没有迁移就能够被动的发现。

四、踩过的坑总结

  1. 反向升级:服务器升级配置后反而触发新带宽政策,上行被限制,花钱反向升级,越升级越卡。
  2. 内部服务走公网:旧环境长期积累的配置问题,多个服务间用了公网通信,浪费带宽且不稳定。
  3. 遗漏小服务:没放进容器的脚本和临时程序容易被忘掉,迁移后才发现功能缺失。
  4. 人心慌慌:迁移期间什么小问题都会被怀疑跟迁移有关,提前统一口径能省很多事。

评论