2.2. 磁盘失败
Ceph 为容错而设计,这意味着 Ceph 可在不丢失数据的情况下以 降级状态 运行。即使数据存储驱动器出现故障,Ceph 仍然可以运行。降级状态 表示,存储在其他 OSD 上的数据的额外副本将自动回填到存储集群中的其他 OSD。当 OSD 标记为 down 时,这可能意味着驱动器失败。
当驱动器出现故障时,最初的 OSD 状态将 停机,但仍 在 存储集群中。网络问题也可以将 OSD 标记为 down,即使它确实是 。首先检查环境中出现的任何网络问题。如果网络检查正常,则 OSD 驱动器可能会失败。
现代服务器通常使用热插拔驱动器进行部署,从而可以拉取失败的驱动器并将其替换为新的驱动器,而无需关闭节点。但是,在 Ceph 中,您还必须删除由软件定义的 OSD 部分。
2.2.1. 替换失败的 OSD 磁盘 复制链接链接已复制到粘贴板!
替换 OSD 的一般步骤涉及从存储集群中移除 OSD,替换驱动器,然后重新创建 OSD。
在替换包含 BlueStore OSD 数据库分区的 BlueStore block.db 磁盘时,红帽仅支持使用 Ansible 重新部署所有 OSD。损坏的 block.db 文件将影响到这个 block.db 文件中包含的所有 OSD。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 失败的磁盘。
步骤
检查存储集群健康状况:
# ceph health识别 CRUSH 层次结构中的 OSD 位置:
# ceph osd tree | grep -i down在 OSD 节点上,尝试启动 OSD:
# systemctl start ceph-osd@$OSD_ID如果命令表示 OSD 已在运行,则可能存在一个心跳或网络问题。如果无法重启 OSD,则驱动器可能会失败。
注意如果 OSD 已经
停机,则 OSD 最终将标记为。这是 Ceph Storage 的正常行为。当 OSD 标记为 时,带有故障 OSD 数据副本的其他 OSD 将开始回填,以确保存储集群中存在所需的副本数。在存储集群进行回填时,集群将处于降级状态。对于容器化 Ceph 部署,尝试通过引用与 OSD 关联的驱动器来启动 OSD 容器:
# systemctl start ceph-osd@$OSD_DRIVE如果命令表示 OSD 已在运行,则可能存在一个心跳或网络问题。如果无法重启 OSD,则驱动器可能会失败。
注意与 OSD 关联的驱动器可以通过 将容器 OSD ID 映射到驱动器 来确定。
检查失败的 OSD 的挂载点:
注意对于容器化部署 Ceph,如果 OSD 停机,容器将停机,并且将卸载 OSD 驱动器,因此您无法运行
df检查其挂载点。使用另一种方法来确定 OSD 驱动器是否失败。例如,在容器节点的驱动器上运行smartctl。# df -h如果无法重启 OSD,您可以检查 挂载点。如果挂载点不再显示,您可以尝试重新挂载 OSD 驱动器并重启 OSD。如果无法恢复挂载点,则可能具有失败的 OSD 驱动器。
使用
smartctl实用程序 cab 帮助确定驱动器是否运行正常。例如:# yum install smartmontools # smartctl -H /dev/$DRIVE如果驱动器失败,则需要替换它。
停止 OSD 进程:
# systemctl stop ceph-osd@$OSD_ID如果使用 FileStore,将日志刷新到磁盘:
# ceph osd -i $$OSD_ID --flush-journal
对于容器化 Ceph 部署,通过引用与 OSD 关联的驱动器来停止 OSD 容器:
# systemctl stop ceph-osd@$OSD_DRIVE从存储集群中移除 OSD:
# ceph osd out $OSD_ID确保失败的 OSD 是回填:
# ceph -w从 CRUSH map 移除 OSD:
# ceph osd crush remove osd.$OSD_ID注意只有在您永久删除 OSD 而非重新部署时才需要这一步。
删除 OSD 的身份验证密钥:
# ceph auth del osd.$OSD_ID验证 OSD 的密钥没有被列出:
# ceph auth list从存储集群中移除 OSD:
# ceph osd rm osd.$OSD_ID卸载故障驱动器路径:
注意对于容器化 Ceph 部署,如果 OSD 停机,容器将停机,并且 OSD 驱动器将被卸载。在这种情况下,不卸载这一步,可以跳过此步骤。
# umount /var/lib/ceph/osd/$CLUSTER_NAME-$OSD_ID替换物理驱动器。如需节点,请参阅硬件供应商的文档。如果驱动器可热交换,只需将失败的驱动器替换为新驱动器。如果驱动器不热交换,且节点包含多个 OSD,那么 MIGHT 需要让节点更换物理驱动器。如果您需要临时关闭节点,您可以将集群设置为
noout以防止回填:# ceph osd set noout在替换了驱动器并且使节点及其 OSD 重新上线后,请删除
noout设置:# ceph osd unset noout允许
/dev/目录下显示新驱动器,并在继续操作前记录驱动器路径。- 查找 OSD 驱动器并格式化磁盘。
重新创建 OSD:
检查 CRUSH 层次结构,以确保准确:
# ceph osd tree如果您对 CRUSH 层次结构中 OSD 的位置不满意,您可能通过
move命令移动:# ceph osd crush move $BUCKET_TO_MOVE $BUCKET_TYPE=$PARENT_BUCKET- 验证 OSD 是否在线。
2.2.2. 在保留 OSD ID 时替换 OSD 驱动器 复制链接链接已复制到粘贴板!
在替换故障 OSD 驱动器时,您可以保留原始 OSD ID 和 CRUSH map 条目。
ceph-volume lvm 命令默认为 OSD 的 BlueStore。要使用 FileStore OSD,然后使用 --filestore、--data 和 --journal 选项。
如需了解更多详细信息 ,请参阅准备 OSD 数据和 Journal Drives 部分。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 失败的磁盘。
步骤
销毁 OSD:
ceph osd destroy $OSD_ID --yes-i-really-mean-it示例
$ ceph osd destroy 1 --yes-i-really-mean-it另外,如果之前使用了替换磁盘,则需要
缩小该磁盘:ceph-volume lvm zap $DEVICE示例
$ ceph-volume lvm zap /dev/sdb使用现有 OSD ID 创建新 OSD:
ceph-volume lvm create --osd-id $OSD_ID --data $DEVICE示例
$ ceph-volume lvm create --osd-id 1 --data /dev/sdb