上一篇 下一篇 分享链接 返回 返回顶部

如何在香港机房使用Ceph + Live Migration + BGP Anycast打造小型跨境私有云

发布人:Minchunlin 发布时间:2025-08-06 09:18 阅读量:570


上个月底,我在香港 MEGA-i 机房维护一台运行跨境电商和 AI 推理的 Dell R740xd 服务器。那天凌晨 3 点,我的手机突然收到 Prometheus 告警:

  • Web 站点无响应
  • AI 推理服务掉线
  • BGP 会话中断

赶到机房才发现,是服务器主板报错自动关机,导致整台机器停摆。虽然我有数据备份,但服务恢复花了一个多小时,这在跨境电商的高峰期几乎是灾难。

这次事故让我意识到,哪怕是高性能单机+虚拟化隔离,也无法保证真正的高可用。于是,我决定把香港的这几台服务器做成一个 小型跨境私有云,核心方案就是:

  • Ceph 分布式存储 → 虚拟机数据与快照高可用
  • Live Migration(实时迁移) → 业务不中断切换到其他服务器
  • BGP Anycast → 故障时 IP 不变,用户自动连到健康节点

这篇文章,我会完整讲述我在香港机房部署这个高可用方案的过程、遇到的坑和解决方法。

一、机房环境与总体架构

1. 机房与硬件

机房:香港 MEGA-i,BGP 多线接入(HGC/PCCW/CTG/CMI)

服务器(共 3 台):

  • Dell R740xd(主 Web/AI 负载)
  • Dell R640(备用负载 + 部分 AI 任务)
  • Supermicro 2029U(存储与迁移中继)

网络:

  • 每台服务器 2 x 10GbE 光口(X710-DA2)
  • 一个内网存储 VLAN(用于 Ceph 数据同步)
  • 一个管理 VLAN(用于 libvirt / migration)
  • 一个公网 VLAN(用于 BGP Anycast 出口)

2. 高可用架构图

             ┌────────────┐
             │   BGP 多线  │
             └─────┬──────┘
                   │
          ┌────────┴─────────┐
          │   BGP Anycast VIP │
          └─────┬───────────┘
     ┌──────────┼───────────┐
     │          │           │
 [Server1]  [Server2]   [Server3]
  VM+AI      VM+AI       Ceph+VM
   │           │           │
   └──────────Ceph─────────┘
       内网存储 & 快照同步

核心思路:

  • Ceph 提供统一存储池,VM 镜像和快照可随时在不同服务器加载
  • Live Migration 实现 VM 跨服务器实时迁移(不中断业务)
  • BGP Anycast 保证公网 IP 不变,迁移后用户自动访问新节点

二、Ceph 分布式存储实战部署

我在三台服务器上部署了 Ceph Octopus,每台 2 块 NVMe SSD 做 OSD,1 块 SATA SSD 做 Journal。

1. 集群初始化

我使用 cephadm 快速部署:

cephadm bootstrap --mon-ip 10.0.1.1
ceph orch host add server2 10.0.1.2
ceph orch host add server3 10.0.1.3

创建存储池:

ceph osd pool create vm_pool 64
ceph osd pool set vm_pool size 3

将虚拟机镜像放在 Ceph RBD 上:

rbd create vm_pool/web01 --size 200G
rbd map vm_pool/web01
mkfs.ext4 /dev/rbd0

2. 遇到的坑与解决

网络抖动导致 I/O 卡死

问题:Ceph 公网和存储网共用同一物理口时,高峰期丢包导致 I/O 超时

解决:启用 VLAN 隔离 + 双 10G Bond,存储与公网完全隔离

Ceph 延迟高

问题:默认配置下延迟 8~12ms,Live Migration 卡顿

解决:开启 bluestore_cache,并将 NVMe 直通 OSD,延迟降到 2~3ms

三、Live Migration(实时迁移)配置与优化

我用 libvirt + qemu-kvm 实现 VM 的热迁移,要求迁移时不影响用户访问。

1. 配置共享存储

在 libvirt 配置 VM 的磁盘为 RBD:

<disk type='network' device='disk'>
  <driver name='qemu' type='raw'/>
  <auth username='admin'>
    <secret type='ceph' uuid='xxxx-xxxx-xxxx'/>
  </auth>
  <source protocol='rbd' name='vm_pool/web01'>
    <host name='10.0.1.1' port='6789'/>
  </source>
  <target dev='vda' bus='virtio'/>
</disk>

2. 启用实时迁移

virsh migrate --live --persistent --undefinesource \
   vm-web01 qemu+ssh://server2/system

迁移耗时:

  • 小型 Web VM(32GB RAM):约 25 秒
  • AI 推理 VM(64GB RAM + GPU):约 45~60 秒(需配合 GPU vGPU 或冷迁移)

3. 遇到的坑与解决

迁移卡在 90% 不完成

问题:VM 内存脏页刷新过快

解决:临时降低 VM CPU 配额或启用 post-copy migration:

virsh migrate --live --postcopy

迁移完成后丢包

问题:新节点接管 VM,但 BGP 未及时更新路由

解决:配合 BGP Anycast 做无缝切换(下文详述)

四、BGP Anycast 实现跨境高可用

BGP Anycast 是整个方案的关键,让迁移后的 VM 继续使用同一公网 IP,用户无感知切换。

1. Anycast 基本策略

  • 每台服务器上 FRR 通告同一个 /32 VIP
  • 路由器根据 BGP 选路将流量打到最近/健康节点
  • 迁移或故障时,旧节点撤销路由,新节点接管

配置示例(Server1):

router bgp 65530
 bgp router-id 203.0.113.11
 neighbor 203.0.113.1 remote-as 65531
 !
 address-family ipv4 unicast
  network 203.0.113.100/32
 exit-address-family

当 Live Migration 完成后,目标节点立即通过 FRR 宣告该 VIP,源节点撤销路由,流量几乎瞬时切换。

2. 健康检查与自动接管

我写了一个简单的健康检查脚本,结合 vtysh 动态撤销 BGP:

if ! curl -fs http://127.0.0.1/health; then
  vtysh -c "configure terminal" \
        -c "router bgp 65530" \
        -c "no network 203.0.113.100/32"
fi

结合 Keepalived 可以实现秒级切换。

五、最终效果与经验总结

部署完成后,我们的小型跨境私有云达到了预期目标:

  • 单节点故障 → VM 自动迁移,BGP Anycast IP 无感切换
  • 平均 Live Migration 时间 30~60 秒,无明显用户掉线
  • Ceph 保障数据一致性,任意服务器可承载关键 VM
  • 整体 SLA 从单机的 99.5% 提升到 99.95%

运维心得:

  • 香港机房的 BGP 多线 + Anycast 是跨境电商的核心竞争力
  • Ceph + Live Migration 可以支撑小规模私有云,但 I/O 与网络隔离必须做好
  • BGP 与健康检查脚本结合,是实现自动化故障切换的关键
目录结构
全文