2.12. 在池之间移动镜像

您可以在同一集群内的不同池之间移动 RADOS 块设备 (RBD) 镜像。迁移可以在复制池之间、纠删代码池之间,或者在复制池和纠删代码池之间迁移。

在此过程中,源镜像会复制到具有所有快照历史记录的目标镜像,也可选择性地复制到源镜像的父镜像中,以帮助保留稀疏性。源镜像是只读的,目标镜像是可写的。目标镜像在迁移过程中链接到源镜像。

您可以在使用新目标镜像时安全地在后台运行此过程。但是,在准备步骤前停止使用目标镜像的所有客户端,以确保更新使用该镜像的客户端以指向新的目标镜像。

重要

krbd 内核模块目前不支持实时迁移。

先决条件

  • 停止所有使用该源镜像的客户端。
  • 客户端节点的根级别访问权限。

流程

  1. 通过创建跨链接源和目标镜像的新目标镜像准备迁移:

    语法

    rbd migration prepare SOURCE_IMAGE TARGET_IMAGE

    替换:

    • SOURCE_IMAGE,带有要移动的镜像的名称。使用 POOL/IMAGE_NAME 格式。
    • TARGET_IMAGE,带有新镜像的名称。使用 POOL/IMAGE_NAME 格式。

    示例

    [root@rbd-client ~]# rbd migration prepare data/source stack/target

  2. 验证新目标镜像的状态,这应该为 prepared

    语法

    rbd status TARGET_IMAGE

    示例

    [root@rbd-client ~]# rbd status stack/target
    Watchers: none
    Migration:
                source: data/source (5e2cba2f62e)
                destination: stack/target (5e2ed95ed806)
                state: prepared

  3. (可选)使用新目标镜像名称重新启动客户端。
  4. 将源镜像复制到目标镜像:

    语法

    rbd migration execute TARGET_IMAGE

    示例

    [root@rbd-client ~]# rbd migration execute stack/target

  5. 确保迁移已完成:

    示例

    [root@rbd-client ~]# rbd status stack/target
    Watchers:
        watcher=1.2.3.4:0/3695551461 client.123 cookie=123
    Migration:
                source: data/source (5e2cba2f62e)
                destination: stack/target (5e2ed95ed806)
                state: executed

  6. 通过删除源镜像和目标镜像之间的跨链接来提交迁移,这也会移除源镜像:

    语法

    rbd migration commit TARGET_IMAGE

    示例

    [root@rbd-client ~]# rbd migration commit stack/target

    如果源镜像是一个或多个克隆的父镜像,请在确保克隆镜像不在使用后使用 --force 选项:

    示例

    [root@rbd-client ~]# rbd migration commit stack/target --force

  7. 如果您在准备步骤后没有重新启动客户端,请使用新目标镜像名称重启客户端。