9.8.5. 使用整个节点替换方法从 FileStore 迁移到 BlueStore
通过将每个存储的数据副本从 FileStore 迁移到 BlueStore,可以逐个节点执行。此迁移可以使用存储集群中的备用节点完成,或者有足够的可用空间从存储集群中清空整个节点,以便将其用作备用节点。理想情况下,节点必须与您要迁移的其他节点大致相同。
前提条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
-
根访问节点。 - 没有数据的空节点。
流程
-
将下面的变量
NEWNODE替换为新节点名称。 -
将以下变量
EXISTING_NODE_TO_CONVERT替换为存储集群中已存在的节点名称。 将下列变量
OSD_ID替换为 OSD 标识号。使用不在存储集群中的新节点。对于在存储集群中使用现有节点,请跳至第 3 步。
将节点添加到 CRUSH 层次结构中:
ceph osd crush add-bucket NEWNODE node
[root@mon ~]# ceph osd crush add-bucket NEWNODE nodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要不要将它附加到 root 用户。
安装 Ceph 软件包:
yum install ceph-osd
[root@mon ~]# yum install ceph-osdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将 Ceph 配置文件(默认为
/etc/ceph/ceph.conf)和密钥环复制到新节点。
- 跳至第 5 步。
如果您使用已在存储集群中已存在的节点,请使用以下命令:
ceph osd crush unlink EXISTING_NODE_TO_CONVERT default
[root@mon ~]# ceph osd crush unlink EXISTING_NODE_TO_CONVERT defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意其中
default是 CRUSH map 中的即时维护器。- 跳至第 8 步。
为所有设备置备新的 BlueStore OSD:
ceph-volume lvm create --bluestore --data /dev/DEVICE
[root@mon ~]# ceph-volume lvm create --bluestore --data /dev/DEVICECopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 OSD 是否加入集群:
ceph osd tree
[root@mon ~]# ceph osd treeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您应当会在节点名称下看到新节点名称及所有 OSD,但 不得将 节点嵌套在层次结构中任何其他节点。
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将新节点交换到集群中的旧节点位置:
ceph osd crush swap-bucket NEWNODE EXISTING_NODE_TO_CONVERT
[root@mon ~]# ceph osd crush swap-bucket NEWNODE EXISTING_NODE_TO_CONVERTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此时,
EXISTING_NODE_TO_CONVERT上的所有数据都将开始迁移到NEWNODE上的 OSD。注意如果旧节点和新节点的总量不同,您可能还会看到一些数据迁移到存储集群中的其他节点,但只要节点的大小类似,这就是一个相对较小的数据。
等待数据迁移完成:
while ! ceph osd safe-to-destroy $(ceph osd ls-tree EXISTING_NODE_TO_CONVERT); do sleep 60 ; done
while ! ceph osd safe-to-destroy $(ceph osd ls-tree EXISTING_NODE_TO_CONVERT); do sleep 60 ; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 登录到
EXISTING_NODE_TO_CONVERT,停止并卸载 now-emptyEXISTING_NODE_TO_CONVERT上的所有旧 OSD:systemctl stop ceph-osd@OSD_ID umount /var/lib/ceph/osd/ceph-OSD_ID
[root@mon ~]# systemctl stop ceph-osd@OSD_ID [root@mon ~]# umount /var/lib/ceph/osd/ceph-OSD_IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 销毁并清除旧的 OSD:
for osd in ceph osd ls-tree EXISTING_NODE_TO_CONVERT; do ceph osd purge $osd --yes-i-really-mean-it ; done
for osd in ceph osd ls-tree EXISTING_NODE_TO_CONVERT; do ceph osd purge $osd --yes-i-really-mean-it ; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 擦除旧的 OSD 设备。这要求您确定手动擦除哪些设备。为每个设备执行以下命令:
ceph-volume lvm zap DEVICE
[root@mon ~]# ceph-volume lvm zap DEVICECopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要成为 EXTREMELY CAREFUL,因为这会销毁设备的内容。在继续之前,不需要在该设备上使用这些数据,即存储集群处于健康状态。
注意如果 OSD 被加密,则卸载
osd-lockbox并在使用dmsetup 删除OSD 前删除加密。注意如果 OSD 包含逻辑卷,则在
ceph-volume lvm zap命令中使用--destroy选项。- 使用 now-empty 旧节点作为新节点,再重复这个过程。