Ceph RBD设备分区迁移方案

需求

在公有云多个IDC的情况下,有时候需要把底层的volume从一个区迁移到另一个区,由于我们底层都使用的是ceph系统,所以这里的迁移方案是基于ceph RBD的。

操作

source区操作

  1. 获取cinder volume的id

    1
    2
    $ cinder list --all | grep tst-vol
    | 8097de58-343e-4070-8e83-f7c5541bd26b | 3c9fd84b60694c40bcfeaf1fb4ed3c13 | available | tst-vol2 | 10 | sata | false |
    • cinder volume id: 8097de58-343e-4070-8e83-f7c5541bd26b
    • cinder volume size: 10G
    • cinder volume type: sata
  2. 根据volume的类型,获取其对应的ceph pool

    普通型:volumes
    高性能:volumes_hp

    我们系统对volume做了分类,对应不同的Ceph pool,底层使用不同性能的磁盘

  3. 通过命令可以看到ceph里存的volume

    rbd ls -p <volumes/volumes_hp> | grep <volume id>

    例如:

    1
    2
    $ rbd ls -p volumes | grep 8097de58-343e-4070-8e83-f7c5541bd26b
    volume-8097de58-343e-4070-8e83-f7c5541bd26b
  4. 通过rbd export 命令导出数据

    rbd export -p <volumes/volumes_hp> <image-name> <path file>

    例如:

    1
    rbd export -p volumes volume-8097de58-343e-4070-8e83-f7c5541bd26b backup.volume-8097de58-343e-4070-8e83-f7c5541bd26b

    即把volume数据保存到文件:backup.volume-8097de58-343e-4070-8e83-f7c5541bd26b

    这里命令:ls -l 查看备份文件的大小为10G
    但是实际文件size没有10G大小,真实size与volume写入的数据多少有关系,通过命令:du -sh <volume file> 可看到文件真实size,一般比volume真实size多3-4GB
    存储volume数据文件的fs类型对文件大小也有影响

    通过linux的tar命令还可以对数据进行压缩,但这个时间比较长,10G的真实数据,压缩时间约为10分钟,压缩后的size约为 3.2G。

    不同压缩算法用的时间和压缩比都不一样,根据实际情况挑选

destination区操作

  1. destination区创建云硬盘

    在新的服务区,主机恢复后,创建一个新的同类型的云硬盘,用上面的1,2,3步骤找到对应的image-name
    比如对应的image-name为:volume-8c4cc416-b667-4cf2-8a7c-9ff29a23666b

  2. 通过rbd命令删除这个image

    rbd rm -p <volume pool> <volume id>

    例如:

    1
    rbd rm -p volumes volume-8c4cc416-b667-4cf2-8a7c-9ff29a23666b

    不删除的话,没法执行下一步的数据导入

  3. 然后通过命令导入数据

    rbd import -p <volumes/volumes_hp> <path file> <image-name>

    例如:

    1
    rbd import -p volumes backup.volume-8097de58-343e-4070-8e83-f7c5541bd26b volume-8c4cc416-b667-4cf2-8a7c-9ff29a23666b
  4. 正常attach新的云硬盘到主机即可

支持原创