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

上个月底,我在香港 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 与健康检查脚本结合,是实现自动化故障切换的关键