2.12. 在池之间移动镜像
您可以在同一集群内的不同池之间移动 RADOS 块设备 (RBD) 镜像。
在此过程中,源镜像会复制到具有所有快照历史记录的目标镜像,也可选择性地复制到源镜像的父镜像中,以帮助保留稀疏性。源镜像是只读的,目标镜像是可写的。目标镜像在迁移过程中链接到源镜像。
您可以在使用新目标镜像时安全地在后台运行此过程。但是,在准备步骤前停止使用目标镜像的所有客户端,以确保更新使用该镜像的客户端以指向新的目标镜像。
重要
krbd
内核模块目前不支持实时迁移。
先决条件
- 停止所有使用该源镜像的客户端。
- 客户端节点的根级别访问权限。
流程
通过创建跨链接源和目标镜像的新目标镜像准备迁移:
语法
rbd migration prepare SOURCE_IMAGE TARGET_IMAGE
替换:
- SOURCE_IMAGE,带有要移动的镜像的名称。使用 POOL/IMAGE_NAME 格式。
- TARGET_IMAGE,带有新镜像的名称。使用 POOL/IMAGE_NAME 格式。
示例
[root@rbd-client ~]# rbd migration prepare pool1/image1 pool2/image2
验证新目标镜像的状态,这应该为
prepared
:语法
rbd status TARGET_IMAGE
示例
[root@rbd-client ~]# rbd status pool2/image2 Watchers: none Migration: source: pool1/image1 (5e2cba2f62e) destination: pool2/image2 (5e2ed95ed806) state: prepared
- (可选)使用新目标镜像名称重新启动客户端。
将源镜像复制到目标镜像:
语法
rbd migration execute TARGET_IMAGE
示例
[root@rbd-client ~]# rbd migration execute pool2/image2
确保迁移已完成:
示例
[root@rbd-client ~]# rbd status pool2/image2 Watchers: watcher=1.2.3.4:0/3695551461 client.123 cookie=123 Migration: source: pool1/image1 (5e2cba2f62e) destination: pool2/image2 (5e2ed95ed806) state: executed
通过删除源镜像和目标镜像之间的跨链接来提交迁移,这也会移除源镜像:
语法
rbd migration commit TARGET_IMAGE
示例
[root@rbd-client ~]# rbd migration commit pool2/image2
如果源镜像是一个或多个克隆的父镜像,请在确保克隆镜像不在使用后使用
--force
选项:示例
[root@rbd-client ~]# rbd migration commit pool2/image2 --force
- 如果您在准备步骤后没有重新启动客户端,请使用新目标镜像名称重启客户端。