注意

本文档适用于 Ceph 开发版本。

添加/删除 OSDs

当集群运行时,可以添加或删除 OSD。

添加 OSD

可以将 OSD 添加到集群中以扩展集群的容量和弹性。ceph-osd daemon running on one storage drive within a host machine. But if your host machine has multiple storage drives, you may map one ceph-osd daemon for each drive on the machine.

检查集群的容量是个好主意,这样您就知道何时接近容量限制。near full ratio, then you should add OSDs to expand your cluster’s capacity.

警告

在添加 OSD 之前,不要让您的集群达到其 8affb6: 。full ratio before adding an OSD. OSD failures that occur after the cluster reaches its near full ratio might cause the cluster to exceed its full ratio.

Deploying your Hardware

如果您在添加新的 OSD 时也添加了新的主机,请参阅硬件建议了解 OSD 硬件的最低建议。文件系统建议.

接下来,将您的 OSD 主机添加到集群的机架中,将主机连接到网络,并确保主机具有网络连接。网络配置参考.

安装所需的软件

如果您的集群是手动部署的,您需要手动安装 Ceph 软件包。手动安装 Ceph

添加 OSD(手动)

以下步骤设置了一个ceph-osd守护进程,配置此 OSD 以使用一个驱动器,并配置集群以将数据分配给 OSD。

正如以下步骤将所示,添加 OSD 包括为其创建元数据目录,配置数据存储驱动器,将 OSD 添加到集群,然后将其添加到 CRUSH 映射。

当您将 OSD 添加到 CRUSH 映射时,您需要考虑为新的 OSD 分配的权重。

提示

Ceph 在池中具有统一的硬件效果最佳。

  1. 通过运行以下格式的命令来创建新的 OSD。

    ceph osd create [{uuid} [{id}]]
    

    如果指定了可选参数 {id},它将用作 OSD ID。

    警告

    显式指定{id}参数是不推荐的。{id}参数留空,我们确保 Ceph 使用可用的最小 ID 号码,并避免这些问题。

  2. 通过运行以下格式的命令来创建新的 OSD 的默认目录:

    ssh {new-osd-host}
    sudo mkdir /var/lib/ceph/osd/ceph-{osd-number}
    
  3. 如果 OSD 将创建在不同于 OS 驱动器的驱动器上,请使用先前步骤中销毁的 OSD 的 ID 准备它以用于 Ceph。

    ssh {new-osd-host}
    sudo mkfs -t {fstype} /dev/{drive}
    sudo mount -o user_xattr /dev/{hdd} /var/lib/ceph/osd/ceph-{osd-number}
    
  4. 通过运行以下格式的命令来初始化 OSD 数据目录:

    ssh {new-osd-host}
    ceph-osd -i {osd-num} --mkfs --mkkey
    

    在运行ceph-osd.

  5. 之前,请确保目录为空。

    ceph auth add osd.{osd-num} osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-{osd-num}/keyring
    

    此命令的此表示形式ceph-{osd-num}在列出的路径中,因为许多集群具有名称cephceph,则需要将字符串ceph in ceph-{osd-num}替换为您的集群名称。cluster1,则命令中的路径应为/var/lib/ceph/osd/cluster1-{osd-num}/keyring.

  6. 通过运行以下命令将 OSD 添加到 CRUSH 映射。ceph osd crush add可以将 OSD 添加到 CRUSH 层次结构的任何位置。重要:如果您只指定根桶,命令将直接将 OSD 连接到根,但 CRUSH 规则期望 OSD 位于主机内部。

    ceph osd crush add {id-or-name} {weight}  [{bucket-type}={bucket-name} ...]
    

    请注意,还有另一种方法可以将新的 OSD 添加到 CRUSH 映射:解编译 CRUSH 映射,将 OSD 添加到设备列表,将主机作为桶(如果它不在 CRUSH 映射中),将设备作为主机中的条目,为设备分配权重,重新编译 CRUSH 映射,并设置 CRUSH 映射。添加/移动 OSD

替换OSD

Note

如果本节中的步骤对您不起作用,请尝试cephadm文档中的说明:替换OSD.

有时需要替换 OSD:例如,当磁盘发生故障时,或者当管理员想要用新的后端重新配置 OSD(例如,在从 Filestore 切换到 BlueStore 时)。删除 OSD不同,因为在 OSD 被销毁以进行替换后,替换的 OSD 的 ID 和 CRUSH 映射条目必须保持完整。

  1. 确保销毁 OSD 是安全的:

    while ! ceph osd safe-to-destroy osd.{id} ; do sleep 10 ; done
    
  2. 销毁 OSD:

    ceph osd destroy {id} --yes-i-really-mean-it
    
  3. 可选: 如果您计划使用的磁盘不是新磁盘,并且以前用于其他目的,请擦除磁盘:

    ceph-volume lvm zap /dev/sdX
    
  4. 使用先前步骤中销毁的 OSD 的 ID 准备磁盘以进行替换:

    ceph-volume lvm prepare --osd-id {id} --data /dev/sdX
    
  5. 最后,激活 OSD:

    ceph-volume lvm activate {id} {fsid}
    

或者,您可以选择不执行最后两个步骤(准备磁盘和激活 OSD),而是通过运行单个以下格式的命令重新创建 OSD:

ceph-volume lvm create --osd-id {id} --data /dev/sdX

启动 OSD

添加到 Ceph 后,OSD 位于集群中。downinservice ceph,或者从其主机机器运行以下格式的命令:

sudo systemctl start ceph-osd@{osd-num}

启动 OSD 后,它被视为upin.

观察数据迁移

添加新的 OSD 到 CRUSH 映射后,Ceph 开始通过迁移放置组 (PG) 到新的 OSD 来重新平衡集群。ceph工具观察此过程,请运行以下命令:

ceph -w

或:

watch ceph status

PG 状态将首先从active+cleantoactive, some degraded objects变更,然后迁移完成后返回到active+clean

删除 OSD(手动)

在集群运行时可以手动删除 OSD:您可能想要这样做以减小集群的大小,或者在进行硬件更换时。ceph-osd daemon running on one storage drive within a host machine. Alternatively, if your host machine has multiple storage drives, you might need to remove multiple ceph-osd守护进程:每个驱动器一个守护进程。

警告

在开始删除 OSD 的过程之前,请确保您的集群没有接近其full ratiofull ratio.

Taking the OSDoutof the Cluster

OSD 通常upin在从集群中删除之前。outof the cluster,以便 Ceph 可以开始重新平衡并将其数据复制到其他 OSD。outof the cluster,请运行以下格式的命令:

ceph osd out {osd-num}

观察数据迁移

使 OSD 从集群中out后,Ceph 开始通过将放置组迁移出已删除的 OSD 来重新平衡集群。ceph工具观察此过程,请运行以下命令:

ceph -w

PG 状态将变为active+cleantoactive, some degraded objects,然后迁移完成后将返回到active+clean

Note

在某些情况下,执行outOSD 的操作可能会导致 CRUSH 遇到某个角落情况,其中一些 PG 停留在active+remapped状态。in

ceph osd in {osd-num}

使 OSD 回到其初始状态后,不要再次标记 OSDout0

ceph osd crush reweight osd.{osd-num} 0

重新加权 OSD 后,观察数据迁移并确认其已成功完成。out和将 OSD 重新加权到0之间的区别在于包含 OSD 的桶。out标记时,桶的权重不会改变。0时,桶的权重会更新(即,OSD 的权重会从桶的总权重中减去)。

停止 OSD

使 OSDoutof the cluster 后,OSD 可能仍然在运行。upout

ssh {osd-host}
sudo systemctl stop ceph-osd@{osd-num}

停止 OSD 后,它是down.

删除 OSD

以下步骤从集群映射中删除 OSD,删除 OSD 的身份验证密钥,从 OSD 映射中删除 OSD,并从ceph.conf文件中删除 OSD。

  1. 首先让集群忘记 OSD。purge 子命令the procedure linked here

    ceph osd purge {id} --yes-i-really-mean-it
    
  2. 导航到保存集群主ceph.conf文件的主机:

    ssh {admin-host}
    cd /etc/ceph
    vim ceph.conf
    
  3. 从您的ceph.conf文件中删除 OSD 条目(如果存在这样的条目):

    [osd.1]
        host = {hostname}
    
  4. 将更新的ceph.conf文件从主机上保存集群主ceph.conf的位置复制到集群中其他主机的/etc/ceph目录。

如果您的 Ceph 集群早于 Luminous,您将无法使用ceph osd purge命令。

  1. 从 CRUSH 映射中删除 OSD,以便它不再接收数据(更多详情,请参阅移除一个 OSD):

    ceph osd crush remove {name}
    

  2. 删除 OSD 身份验证密钥:

    ceph auth del osd.{osd-num}
    
  3. 删除 OSD:

    ceph osd rm {osd-num}
    

    例如:

    ceph osd rm 1
    

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.