您好!这是一个非常好的问题,也是 Ceph 运维中一个关键的特性。
根据您图片中的信息和您描述的现象(新硬盘会自动变为 OSD),根本原因在于 Ceph 集群(特别是 cephadm
)的“自动化运维(Orchestrator)”功能默认是开启的,并且它有一个默认策略:自动识别和利用所有“可用(Available)”的存储设备。
下面我为您详细解释为什么会发生这种情况以及如何管理它。
核心原因:Ceph 的自动化设备部署策略
-
默认的自动化行为:现代 Ceph(尤其是使用
cephadm
部署的集群)的设计理念是自动化。一旦您将一块新的、干净的(即没有文件系统、分区表等元数据)硬盘接入集群中的主机,并被cephadm
扫描到(ceph orch device ls
), Orchestrator 模块就会认为这是一块“可用”的存储资源。 -
服务规格(Service Specification):Ceph 通过“服务规格”文件(或命令)来定义需要部署什么服务(如 OSD、MDS、MON等)以及如何部署。如果您在部署集群时没有明确指定只能在哪些具体设备上创建 OSD,Ceph 就会采用默认行为。
-
“all-available-devices”策略:最常见的默认策略就是使用所有可用设备。当您执行了像
ceph orch apply osd --all-available-devices
这样的命令后,就等于给 Ceph 下了一条持续的指令:“请确保我集群中所有标记为 ‘Available: Yes’ 的设备都被创建为 OSD,现在和将来发现的都一样”。
结合您的图片分析
在您的图片中,所有设备的 AVAILABLE
列都是 No
,并且拒绝原因(图中未完全显示,通常是 ceph orch device ls -f json-pretty
查看)是“已有文件系统”或“空间不足”。这说明这些磁盘已经被占用了,所以 Ceph 不会自动使用它们。
但是,当您插入一块全新的、没有任何内容的硬盘时:
cephadm
守护进程会定期扫描或通过您的--refresh
命令触发扫描,发现这块新硬盘。- 扫描后,这块新硬盘的
AVAILABLE
列会显示为Yes
。 - Ceph Orchestrator 检测到有新的“可用”设备出现,并且它记得您之前下过的“apply osd”指令(即使用所有可用设备)。
- 于是,它就会自动地在后台执行流程,擦除(zap)这块新硬盘并将其部署为一个新的 OSD,完全无需您手动干预。
简单比喻:这就像是您告诉一个机器人:“把我家所有空着的花盆都种上花。” 之后,每当您放一个新的空花盆到院子里,这个机器人就会自动过来把它种上花,而不需要您再下一次命令。
如何管理和控制这种行为?
如果您不希望 Ceph 自动使用每一块新硬盘,您有以下几种选择:
1. 【推荐】使用明确的设备列表部署 OSD
这是最精确的控制方法。您可以明确指定使用哪些设备。
-
步骤一:列出设备,确认设备路径和ID
ceph orch device ls
(确认新硬盘的状态是
Available: Yes
) -
步骤二:使用特定命令将特定设备**部署为 OSD
- 方法A:使用设备路径(如
/dev/sdx
)ceph orch daemon add osd <hostname>:/dev/sdx # 例如:ceph orch daemon add osd ceph01:/dev/sdf
- 方法B:使用设备ID(更可靠,设备路径可能会变,但ID通常不会)
从ceph orch device ls
输出中找到新硬盘的DEVICE ID
(例如QEMU_HARDDISK_DRIVE-scsi8
)。ceph orch daemon add osd <hostname>:/dev/disk/by-id/<device_id> # 例如:ceph orch daemon add osd ceph01:/dev/disk/by-id/QEMU_HARDDISK_DRIVE-scsi8
- 方法A:使用设备路径(如
2. 更改默认的 OSD 部署方法
如果您之前应用了 --all-available-devices
策略,可以将其移除,转而采用更精确的方法。
-
检查当前的 OSD 部署规则:
ceph orch ls --service-type osd
这个命令会显示出当前已应用的 OSD 部署规格,您很可能会看到一条规则使用了
all-available-devices: true
。 -
移除旧的自动化规则(如果存在):
您需要先停止这条规则,然后再用新的精确指令来添加 OSD。ceph orch rm osd.all-available-devices --force # 或者使用其具体的服务名,根据上一条命令的输出而定
注意: 此操作不会删除已存在的 OSD,只会阻止 Ceph 未来自动部署新磁盘。
3. 【临时禁用】暂停整个集群的自动化操作
如果您正在进行维护,不希望 Ceph 自动做任何操作,可以暂停 Orchestrator。
- 暂停自动化:
ceph orch pause
- 恢复自动化:
在暂停状态下,您可以安全地添加硬盘,而 Ceph 不会自动部署它们。等您准备好后,再恢复自动化并手动部署。ceph orch resume
总结
- 为什么会自动部署? 因为您或部署脚本很可能在早期执行过
ceph orch apply osd --all-available-devices
,这是一个“一劳永逸”的自动化指令。 - 如何解决? 您不需要关闭这个功能,而是应该改变使用习惯:在添加新硬盘前,先通过明确的命令
ceph orch daemon add osd <hostname>:<device>
来告诉 Ceph 您的精确意图。或者,彻底移除全自动策略,完全采用手动管理。
希望这能解答您的疑惑!