5.3. 替换 OSD 驱动器
Ceph 是为容错而设计的,这意味着可以在不丢失数据的情况下以 degraded
状态运行。因此,即使数据存储驱动器失败,Ceph 也能运行。在故障驱动器的上下文中,degraded
状态意味着其他 OSD 上存储的数据的额外副本将自动回填到集群中的其他 OSD。不过,如果发生这种情况,请替换失败的 OSD 驱动器,并手动重新创建 OSD。
当驱动器出现故障时,Ceph 将会报告 OSD 为 down
:
HEALTH_WARN 1/3 in osds are down osd.0 is down since epoch 23, last address 192.168.106.220:6800/11080
因为网络或权限问题的出现,Ceph 也可以将 OSD 标记为 down
。详情请参阅关闭 OSD。
现代服务器通常使用热插拔驱动器进行部署,以便您可以将失败的驱动器替换为新的驱动器,而无需关闭节点。整个流程包括这些步骤:
- 从 Ceph 集群移除 OSD。详情请参阅从 Ceph 集群中删除 OSD。
- 替换驱动器。详情请查看替换物理驱动器部分。
- 将 OSD 添加到集群中。详情请参阅将 OSD 添加到 Ceph 集群的步骤。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- Ceph 监控节点的根级别访问权限.
-
至少一个 OSD 为
down
。
从 Ceph 集群中删除 OSD
登录到 Cephadm shell:
示例
[root@host01 ~]# cephadm shell
确定哪个 OSD 为
down
。示例
[ceph: root@host01 /]# ceph osd tree | grep -i down ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF 0 hdd 0.00999 osd.0 down 1.00000 1.00000
将 OSD 标记为
out
,以便集群重新平衡并将其数据复制到其他 OSD。语法
ceph osd out OSD_ID.
示例
[ceph: root@host01 /]# ceph osd out osd.0 marked out osd.0.
注意如果 OSD 为
down
,Ceph 会在 600 秒后自动将其标记为out
,如果它没有根据mon_osd_down_out_interval
参数从 OSD 接收任何 heartbeat 数据包。发生这种情况时,具有故障 OSD 数据副本的其他 OSD 开始回填,以确保集群中存在所需的副本数。在集群回填时,集群将处于degraded
状态。确保失败的 OSD 正在回填。
示例
[ceph: root@host01 /]# ceph -w | grep backfill 2022-05-02 04:48:03.403872 mon.0 [INF] pgmap v10293282: 431 pgs: 1 active+undersized+degraded+remapped+backfilling, 28 active+undersized+degraded, 49 active+undersized+degraded+remapped+wait_backfill, 59 stale+active+clean, 294 active+clean; 72347 MB data, 101302 MB used, 1624 GB / 1722 GB avail; 227 kB/s rd, 1358 B/s wr, 12 op/s; 10626/35917 objects degraded (29.585%); 6757/35917 objects misplaced (18.813%); 63500 kB/s, 15 objects/s recovering 2022-05-02 04:48:04.414397 mon.0 [INF] pgmap v10293283: 431 pgs: 2 active+undersized+degraded+remapped+backfilling, 75 active+undersized+degraded+remapped+wait_backfill, 59 stale+active+clean, 295 active+clean; 72347 MB data, 101398 MB used, 1623 GB / 1722 GB avail; 969 kB/s rd, 6778 B/s wr, 32 op/s; 10626/35917 objects degraded (29.585%); 10580/35917 objects misplaced (29.457%); 125 MB/s, 31 objects/s recovering 2022-05-02 04:48:00.380063 osd.1 [INF] 0.6f starting backfill to osd.0 from (0'0,0'0] MAX to 2521'166639 2022-05-02 04:48:00.380139 osd.1 [INF] 0.48 starting backfill to osd.0 from (0'0,0'0] MAX to 2513'43079 2022-05-02 04:48:00.380260 osd.1 [INF] 0.d starting backfill to osd.0 from (0'0,0'0] MAX to 2513'136847 2022-05-02 04:48:00.380849 osd.1 [INF] 0.71 starting backfill to osd.0 from (0'0,0'0] MAX to 2331'28496 2022-05-02 04:48:00.381027 osd.1 [INF] 0.51 starting backfill to osd.0 from (0'0,0'0] MAX to 2513'87544
在迁移完成后,您应该可以看到放置组状态从
active+clean
变为active, some degraded objects
,最终变为active+clean
。停止 OSD:
语法
ceph orch daemon stop OSD_ID
示例
[ceph: root@host01 /]# ceph orch daemon stop osd.0
从存储集群中移除 OSD:
语法
ceph orch osd rm OSD_ID --replace
示例
[ceph: root@host01 /]# ceph orch osd rm 0 --replace
OSD_ID 被保留。
替换物理驱动器
有关替换物理驱动器的详情,请查看硬件节点的文档。
- 如果驱动器支持热插拔,请将失败的驱动器替换为新驱动器。
- 如果驱动器不可热插拔并且节点包含多个 OSD,您可能需要关闭整个节点并替换物理驱动器。考虑防止集群回填。详情请参阅 Red Hat Ceph Storage 故障排除指南中的停止和启动 重新平衡 章节。
-
当驱动器出现在
/dev/
目录下时,请注意驱动器路径。 - 如果要手动添加 OSD,找到 OSD 驱动器并格式化磁盘。
将 OSD 添加到 Ceph 集群
插入新驱动器后,您可以使用以下选项来部署 OSD:
如果未设置
--unmanaged
参数,OSD 由 Ceph 编排器自动部署。示例
[ceph: root@host01 /]# ceph orch apply osd --all-available-devices
将 OSD 部署到所有可用的设备上,并将
unmanaged
参数设置为true
。示例
[ceph: root@host01 /]# ceph orch apply osd --all-available-devices --unmanaged=true
将 OSD 部署到特定的设备和主机上。
示例
[ceph: root@host01 /]# ceph orch daemon add osd host02:/dev/sdb
确保 CRUSH 层次结构准确:
示例
[ceph: root@host01 /]# ceph osd tree
其它资源
- 请参阅 Red Hat Ceph Storage Operations Guide 中的 Deploying Ceph OSDs on all available devices 部分。
- 请参阅 Red Hat Ceph Storage Operations Guide 中的 Deploying Ceph OSDs on specific devices and hosts 部分。
- 请参阅 Red Hat Ceph Storage Troubleshooting Guide 中的 Down OSDs 部分。
- 请参阅 Red Hat Ceph Storage 安装指南。