迁移Ceph OSD守护进程至新服务规格的技术咨询
你好!咱们先把你遇到的场景和问题理清楚,再一步步说解决方案:
最开始你用了一个全局的OSD服务规格,会把所有SSD(非旋转磁盘)都分配给OSD部署,配置是这样的:
service_type: osd service_id: dashboard-tintin-7634852880 service_name: osd.dashboard-tintin-7634852880 placement: host_pattern: '*' spec: data_devices: rotational: false filter_logic: AND objectstore: bluestore
后来为了更精准控制单台服务器的磁盘分配,你给host1单独做了个新的OSD服务规格:
service_type: osd service_id: dashboard-tintin-1715222958508 service_name: osd.dashboard-tintin-1715222958508 placement: host_pattern: 'host1' spec: data_devices: rotational: false filter_logic: AND objectstore: bluestore
在Ceph Dashboard的「Services」页面里,你发现旧的OSD守护进程还是归旧规格管,于是试着删旧规格,结果收到了这个警告:
If osd.dashboard-tintin-7634852880 is removed the the following OSDs will remain, --force to proceed anyway ...
我猜你现在的疑问是:删了旧规格后,这些遗留的OSD会出问题吗?怎么把它们转到新规格下面管理?
先搞懂核心逻辑
Ceph的服务规格(Service Spec)是用来定义怎么部署新OSD的规则,但已经跑起来的OSD是独立于规格存在的。删了旧规格后,那些原来由旧规格部署的OSD不会被自动删掉,只是不再受旧规格的管理——简单说就是,以后有新SSD符合旧规格条件的话,不会自动部署OSD,但已经在跑的OSD会正常工作。
具体操作建议
先确认新规格的覆盖范围
你的新规格只针对host1,那其他主机的OSD如果还需要自动管理的话,要么给每个主机单独做规格,要么再搞个新的全局规格(如果需要),不然其他主机以后没法自动部署新OSD哦。把遗留OSD转到新规格下管理
如果这些遗留OSD是在host1上的,你可以手动把它们关联到新规格:- 用CLI的话,执行这个命令(把
<osd-id>换成实际的OSD编号):ceph orch osd update <osd-id> --service-name osd.dashboard-tintin-1715222958508 - 或者在Dashboard里找到对应的OSD,编辑它的配置,把关联的服务规格改成新的那个。
要是这些OSD是在其他主机上的,你要么给对应主机做新规格,要么如果不需要自动管理了,就不用动它们,它们会继续正常运行,只是以后不会自动扩OSD。
- 用CLI的话,执行这个命令(把
删除旧规格的注意事项
- 警告里的意思是:删了旧规格后,这些OSD会变成“无主”状态(不受任何服务规格管理),但不会停止运行。如果你只是想换用新规格管理,先把OSD转到新规格,再删旧规格更稳妥,不用加
--force。 - 要是你确定这些OSD以后不需要任何规格管理,也不会再通过规格自动部署新OSD,那可以加
--force强制删除旧规格:ceph orch rm osd.dashboard-tintin-7634852880 --force
- 警告里的意思是:删了旧规格后,这些OSD会变成“无主”状态(不受任何服务规格管理),但不会停止运行。如果你只是想换用新规格管理,先把OSD转到新规格,再删旧规格更稳妥,不用加
验证操作结果
做完之后,你可以用这个命令看看OSD的状态和关联的服务规格:
ceph orch osd ls --detail
也可以在Dashboard的「OSDs」和「Services」页面确认,确保需要管理的OSD都已经关联到新规格了。
备注:内容来源于stack exchange,提问作者Tintin

