4.7. 迁移池
有时,需要将所有对象从一个池迁移到另一个池。这是在需要更改无法修改特定池中的参数的情况下完成的。例如,需要减少池的 PG 数量。
重要
Ceph 块设备描述的迁移方法比此处记录的迁移方法更高。使用 cppool 不保留所有快照和快照相关的元数据,从而导致数据异常副本。例如,复制 RBD 池不会完全复制镜像。在这种情况下,snaps 不存在,且无法正常工作。cppool 也不会保留某些 librados 用户可能依赖的 user_version
字段。
如果迁移池是必要的,并且您的用户工作负载包含 Ceph 块设备以外的镜像,请继续按照这里介绍的步骤之一。
先决条件
如果使用
rados cppool
命令:- 需要对池进行只读访问。
-
只有当您没有 RBD 镜像及其 snaps 以及 librados 消耗的
user_version
时,才使用此命令。
- 如果使用本地驱动器 RADOS 命令,请验证是否有足够的集群空间可用。随着池复制因子,存在两个、三个或更多的数据副本。
流程
方法一 - 推荐的直接方法
使用 rados cppool
命令复制所有对象。
重要
复制过程中需要对池的只读访问权限。
语法
ceph osd pool create NEW_POOL PG_NUM [ <other new pool parameters> ] rados cppool SOURCE_POOL NEW_POOL ceph osd pool rename SOURCE_POOL NEW_SOURCE_POOL_NAME ceph osd pool rename NEW_POOL SOURCE_POOL
示例
[ceph: root@host01 /]# ceph osd pool create pool1 250 [ceph: root@host01 /]# rados cppool pool2 pool1 [ceph: root@host01 /]# ceph osd pool rename pool2 pool3 [ceph: root@host01 /]# ceph osd pool rename pool1 pool2
方法 2 - 使用本地驱动器
使用
rados export
和rados 导入
命令和一个临时本地目录来保存所有导出的数据。语法
ceph osd pool create NEW_POOL PG_NUM [ <other new pool parameters> ] rados export --create SOURCE_POOL FILE_PATH rados import FILE_PATH NEW_POOL
示例
[ceph: root@host01 /]# ceph osd pool create pool1 250 [ceph: root@host01 /]# rados export --create pool2 <path of export file> [ceph: root@host01 /]# rados import <path of export file> pool1
- 必需。停止到源池的所有 I/O。
必需。重新同步所有修改的对象。
语法
rados export --workers 5 SOURCE_POOL FILE_PATH rados import --workers 5 FILE_PATH NEW_POOL
示例
[ceph: root@host01 /]# rados export --workers 5 pool2 <path of export file> [ceph: root@host01 /]# rados import --workers 5 <path of export file> pool1