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