注意
本文档适用于 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 在池中具有统一的硬件效果最佳。
通过运行以下格式的命令来创建新的 OSD。
ceph osd create [{uuid} [{id}]]
如果指定了可选参数 {id},它将用作 OSD ID。
警告
显式指定
{id}
参数是不推荐的。{id}
参数留空,我们确保 Ceph 使用可用的最小 ID 号码,并避免这些问题。通过运行以下格式的命令来创建新的 OSD 的默认目录:
ssh {new-osd-host} sudo mkdir /var/lib/ceph/osd/ceph-{osd-number}
如果 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}
通过运行以下格式的命令来初始化 OSD 数据目录:
ssh {new-osd-host} ceph-osd -i {osd-num} --mkfs --mkkey
在运行
ceph-osd
.之前,请确保目录为空。
ceph auth add osd.{osd-num} osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-{osd-num}/keyring
此命令的此表示形式
ceph-{osd-num}
在列出的路径中,因为许多集群具有名称ceph
。ceph
,则需要将字符串ceph
inceph-{osd-num}
替换为您的集群名称。cluster1
,则命令中的路径应为/var/lib/ceph/osd/cluster1-{osd-num}/keyring
.通过运行以下命令将 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 映射条目必须保持完整。
确保销毁 OSD 是安全的:
while ! ceph osd safe-to-destroy osd.{id} ; do sleep 10 ; done
销毁 OSD:
ceph osd destroy {id} --yes-i-really-mean-it
可选: 如果您计划使用的磁盘不是新磁盘,并且以前用于其他目的,请擦除磁盘:
ceph-volume lvm zap /dev/sdX
使用先前步骤中销毁的 OSD 的 ID 准备磁盘以进行替换:
ceph-volume lvm prepare --osd-id {id} --data /dev/sdX
最后,激活 OSD:
ceph-volume lvm activate {id} {fsid}
或者,您可以选择不执行最后两个步骤(准备磁盘和激活 OSD),而是通过运行单个以下格式的命令重新创建 OSD:
ceph-volume lvm create --osd-id {id} --data /dev/sdX
启动 OSD
添加到 Ceph 后,OSD 位于集群中。down
和in
。service ceph
,或者从其主机机器运行以下格式的命令:
sudo systemctl start ceph-osd@{osd-num}
启动 OSD 后,它被视为up
和in
.
观察数据迁移
添加新的 OSD 到 CRUSH 映射后,Ceph 开始通过迁移放置组 (PG) 到新的 OSD 来重新平衡集群。ceph工具观察此过程,请运行以下命令:
ceph -w
或:
watch ceph status
PG 状态将首先从active+clean
toactive, 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 ratio
。full ratio
.
Taking the OSDout
of the Cluster
OSD 通常up
和in
在从集群中删除之前。out
of the cluster,以便 Ceph 可以开始重新平衡并将其数据复制到其他 OSD。out
of the cluster,请运行以下格式的命令:
ceph osd out {osd-num}
观察数据迁移
使 OSD 从集群中out
后,Ceph 开始通过将放置组迁移出已删除的 OSD 来重新平衡集群。ceph工具观察此过程,请运行以下命令:
ceph -w
PG 状态将变为active+clean
toactive, some degraded
objects
,然后迁移完成后将返回到active+clean
。
Note
在某些情况下,执行out
OSD 的操作可能会导致 CRUSH 遇到某个角落情况,其中一些 PG 停留在active+remapped
状态。in
:
ceph osd in {osd-num}
使 OSD 回到其初始状态后,不要再次标记 OSDout
。0
:
ceph osd crush reweight osd.{osd-num} 0
重新加权 OSD 后,观察数据迁移并确认其已成功完成。out
和将 OSD 重新加权到0
之间的区别在于包含 OSD 的桶。out
标记时,桶的权重不会改变。0
时,桶的权重会更新(即,OSD 的权重会从桶的总权重中减去)。
停止 OSD
使 OSDout
of the cluster 后,OSD 可能仍然在运行。up
和out
。
ssh {osd-host} sudo systemctl stop ceph-osd@{osd-num}
停止 OSD 后,它是down
.
删除 OSD
以下步骤从集群映射中删除 OSD,删除 OSD 的身份验证密钥,从 OSD 映射中删除 OSD,并从ceph.conf
文件中删除 OSD。
首先让集群忘记 OSD。purge 子命令。the procedure linked here:
ceph osd purge {id} --yes-i-really-mean-it
导航到保存集群主
ceph.conf
文件的主机:ssh {admin-host} cd /etc/ceph vim ceph.conf
从您的
ceph.conf
文件中删除 OSD 条目(如果存在这样的条目):[osd.1] host = {hostname}
将更新的
ceph.conf
文件从主机上保存集群主ceph.conf
的位置复制到集群中其他主机的/etc/ceph
目录。
如果您的 Ceph 集群早于 Luminous,您将无法使用ceph osd purge
命令。
从 CRUSH 映射中删除 OSD,以便它不再接收数据(更多详情,请参阅移除一个 OSD):
ceph osd crush remove {name}
)
删除 OSD 身份验证密钥:
ceph auth del osd.{osd-num}
删除 OSD:
ceph osd rm {osd-num}
例如:
ceph osd rm 1
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.