ceph-volume不时扫描集群中的每个主机,以确定哪些设备存在以及它们是否有资格用作 OSD。
要打印由 cephadm 发现的设备列表,请运行以下命令:
ceph orch device ls [--hostname=...] [--wide] [--refresh]
例子:
Hostname Path Type Serial Size Health Ident Fault Available
srv-01 /dev/sdb hdd 15P0A0YFFRD6 300G Unknown N/A N/A No
srv-01 /dev/sdc hdd 15R0A08WFRD6 300G Unknown N/A N/A No
srv-01 /dev/sdd hdd 15R0A07DFRD6 300G Unknown N/A N/A No
srv-01 /dev/sde hdd 15P0A0QDFRD6 300G Unknown N/A N/A No
srv-02 /dev/sdb hdd 15R0A033FRD6 300G Unknown N/A N/A No
srv-02 /dev/sdc hdd 15R0A05XFRD6 300G Unknown N/A N/A No
srv-02 /dev/sde hdd 15R0A0ANFRD6 300G Unknown N/A N/A No
srv-02 /dev/sdf hdd 15R0A06EFRD6 300G Unknown N/A N/A No
srv-03 /dev/sdb hdd 15R0A0OGFRD6 300G Unknown N/A N/A No
srv-03 /dev/sdc hdd 15R0A0P7FRD6 300G Unknown N/A N/A No
srv-03 /dev/sdd hdd 15R0A0O7FRD6 300G Unknown N/A N/A No
使用该--wide选项可提供与设备相关的所有详细信息,包括设备可能不适合用作 OSD 的任何原因。
在上面的示例中,您可以看到名为“Health”、“Ident”和“Fault”的字段。此信息通过与libstoragemgmt集成提供。默认情况下,此集成被禁用(因为libstoragemgmt可能不是 100% 与您的硬件兼容)。要cephadm包含这些字段,请启用 cephadm 的“增强设备扫描”选项,如下所示;
ceph config set mgr mgr/cephadm/device_enhanced_scan true
**警告:尽管 libstoragemgmt 库执行标准 SCSI 查询调用,但不能保证您的固件完全实现这些标准。这可能会导致行为不稳定,甚至在某些较旧的硬件上发生总线重置。因此,建议您在启用此功能之前,先测试您的硬件与 libstoragemgmt 的兼容性,以避免意外中断服务。**
测试兼容性的方法有很多,但最简单的可能是使用 cephadm shell 直接调用 libstoragemgmt - cephadm shell lsmcli ldl。如果您的硬件受支持,您应该会看到如下内容:
Path | SCSI VPD 0x83 | Link Type | Serial Number | Health Status
----------------------------------------------------------------------------
/dev/sda | 50000396082ba631 | SAS | 15P0A0R0FRD6 | Good
/dev/sdb | 50000396082bbbf9 | SAS | 15P0A0YFFRD6 | Good
启用 libstoragemgmt 支持后,输出将如下所示:
# ceph orch device ls
Hostname Path Type Serial Size Health Ident Fault Available
srv-01 /dev/sdb hdd 15P0A0YFFRD6 300G Good Off Off No
srv-01 /dev/sdc hdd 15R0A08WFRD6 300G Good Off Off No
:
在此示例中,libstoragemgmt 已确认驱动器的运行状况以及与驱动器机箱上的标识和故障 LED 交互的能力。有关与这些 LED 交互的更多信息,请参阅设备管理。
笔记: 当前版本的libstoragemgmt (1.8.8) 仅支持基于 SCSI、SAS 和 SATA 的本地磁盘。没有对 NVMe 设备 (PCIe) 的官方支持
为了部署 OSD,必须有一个可用于部署 OSD 的存储设备。
运行以下命令以显示所有集群主机上的存储设备清单:
ceph orch device ls
如果满足以下所有条件,则认为存储设备可用:
设备不能有分区。
设备不得具有任何 LVM 状态。
不得挂载该设备。
设备不得包含文件系统。
设备不得包含 Ceph BlueStore OSD。
设备必须大于 5 GB。
Ceph 不会在不可用的设备上配置 OSD。
有几种方法可以创建新的 OSD:
ceph orch apply osd --all-available-devices
ceph orch daemon add osd **:**
例如:
ceph orch daemon add osd host1:/dev/sdb
ceph orch apply -i spec.yml
该--dry-run标志使编排器在不实际创建 OSD 的情况下呈现将要发生的事情的预览。
例如:
ceph orch apply osd --all-available-devices --dry-run
NAME HOST DATA DB WAL
all-available-devices node1 /dev/vdb - -
all-available-devices node2 /dev/vdc - -
all-available-devices node3 /dev/vdd - -
ceph orch apply的效果是持久的。这意味着在ceph orch apply命令完成后添加到系统的驱动器将被自动找到并添加到集群中。这也意味着在ceph orch apply命令完成后变为可用的驱动器(例如通过 zapping)将被自动找到并添加到集群中。
我们将检查以下命令的效果:
ceph orch apply osd --all-available-devices
运行上述命令后:
要禁用在可用设备上自动创建 OSD,请使用以下 unmanaged参数:
如果您想避免这种行为(禁用在可用设备上自动创建 OSD),请使用以下unmanaged参数:
ceph orch apply osd --all-available-devices --unmanaged=true
笔记: 记住这三个事实:
对于 cephadm,另请参阅禁用守护程序的自动部署。
从集群中移除 OSD 涉及两个步骤:
以下命令执行这两个步骤:
ceph orch osd rm [--replace] [--force]
例子:
ceph orch osd rm 0
预期输出:
Scheduled OSD(s) for removal
无法安全销毁的 OSD 将被拒绝。
您可以使用以下命令查询 OSD 操作的状态:
ceph orch osd rm status
预期输出:
OSD_ID HOST STATE PG_COUNT REPLACE FORCE STARTED_AT
2 cephadm-dev done, waiting for purge 0 True False 2020-07-17 13:01:43.147684
3 cephadm-dev draining 17 False True 2020-07-17 13:01:45.162158
4 cephadm-dev started 42 False True 2020-07-17 13:01:45.162158
当 OSD 上没有留下任何 PG 时,它将被停用并从集群中移除。
笔记: 删除 OSD 后,如果您擦除已删除 OSD 使用的设备中的 LVM 物理卷,则会创建一个新的 OSD。有关这方面的更多信息,请阅读声明状态unmanaged中的参数。
可以使用以下命令停止排队的 OSD 删除:
ceph orch osd rm stop
例子:
ceph orch osd rm stop 4
预期输出:
Stopped OSD(s) removal
这会重置 OSD 的初始状态并将其从移除队列中移除。
orch osd rm --replace [--force]
例子:
ceph orch osd rm 4 --replace
预期输出:
Scheduled OSD(s) for replacement
这与“删除 OSD”部分中的过程相同,但有一个例外:OSD 不会从 CRUSH 层次结构中永久删除,而是分配一个“已销毁”标志。
笔记: 将替换已移除 OSD 的新 OSD 必须与已移除的 OSD 在同一主机上创建。
保留 OSD ID
'destroyed' 标志用于确定在下一次 OSD 部署中将重用哪些 OSD id。
如果您使用 OSD Specs 进行 OSD 部署,您新添加的磁盘将被分配其替换对应的 OSD id。这假定新磁盘仍然与 OSD Specs 匹配。
使用该--dry-run标志来确保该 ceph orch apply osd 命令执行您想要的操作。该--dry-run标志向您显示命令的结果将是什么,而不进行您指定的更改。当您对命令将执行您想要的操作感到满意时,请运行不带--dry-run标志的命令。
提示: 您的 OSD Spec 的名称可以使用命令ceph orch ls检索
或者,您可以使用您的 OSD Spec 文件:
ceph orch apply -i --dry-run
预期输出:
NAME HOST DATA DB WAL
node1 /dev/vdb - -
当此输出反映您的意图时,请省略该--dry-run标志以执行部署。
擦除(zap)设备,以便可以重复使用。zap调用远程主机ceph-volume zap。
ceph orch device zap
示例命令:
ceph orch device zap my_hostname /dev/sdx
笔记: 如果未设置 unmanaged 标志,cephadm 会自动部署与 OSD Spec 匹配的驱动器。例如,如果您在创建 OSD 时使用该all-available-devices选项,则当您zap使用设备时,cephadm orchestrator 会自动在设备中创建新的 OSD。要禁用此行为,请参阅声明状态。
OSD 守护进程将根据 osd_memory_target配置选项调整它们的内存消耗(默认为几千兆字节)。如果 Ceph 部署在不与其他服务共享内存的专用节点上,cephadm 可以根据 RAM 总量和部署的 OSD 数量自动调整每个 OSD 的内存消耗。
警告: Cephadm 默认设置osd_memory_target_autotune为true不适合超融合基础架构。
Cephadm 将从系统总 RAM 的 一小部分osd_memory_target_autotune(mgr/cephadm/autotune_memory_target_ratio默认为.7)
最终目标反映在配置数据库中,选项如下:
WHO MASK LEVEL OPTION VALUE
osd host:foo basic osd_memory_target 126092301926
osd host:bar basic osd_memory_target 6442450944
从ceph orch ps MEM LIMIT列的输出中可以看到每个守护程序消耗的限制和当前内存:
NAME HOST PORTS STATUS REFRESHED AGE MEM USED MEM LIMIT VERSION IMAGE ID CONTAINER ID
osd.1 dael running (3h) 10s ago 3h 72857k 117.4G 17.0.0-3781-gafaed750 7015fda3cd67 9e183363d39c
osd.2 dael running (81m) 10s ago 81m 63989k 117.4G 17.0.0-3781-gafaed750 7015fda3cd67 1f0cc479b051
osd.3 dael running (62m) 10s ago 62m 64071k 117.4G 17.0.0-3781-gafaed750 7015fda3cd67 ac5537492f27
要从内存自动调整中排除 OSD,请禁用该 OSD 的自动调整选项并设置特定的内存目标。例如,
ceph config set osd.123 osd_memory_target_autotune false
ceph config set osd.123 osd_memory_target 16G
Service Specification类型osd是一种描述集群布局的方法,使用磁盘的属性。服务规范为用户提供了一种抽象的方式来告诉 Ceph 哪些磁盘应该以哪些配置变成 OSD,而无需知道设备名称和路径的细节。
服务规范使得定义 yaml 或 json 文件成为可能,这些文件可用于减少创建 OSD 所涉及的手动工作量。
例如,而不是运行以下命令:
ceph orch daemon add osd **:**
对于每个设备和每个主机,我们可以定义一个 yaml 或 json 文件来描述布局。这是最基本的例子。
创建一个名为osd_spec.yml的文件:
service_type: osd
service_id: default_drive_group # custom name of the osd spec
placement:
host_pattern: '*' # which hosts to target
spec:
data_devices: # the type of devices you are applying specs to
all: true # a filter, check below for a full list
这意味着 :
1.将任何可用设备(ceph-volume 决定 'available' 是什么)转换为匹配 glob 模式 '*' 的所有主机上的 OSD。(glob 模式与来自主机 ls的注册主机匹配)下面提供了有关 host_pattern 的更详细的部分。
2.然后像这样将它传递创建osd:
ceph orch apply -i /path/to/osd_spec.yml
该指令将发布给所有匹配的主机,并将部署这些 OSD。
all比过滤器指定的设置更复杂的设置是可能的。有关详细信息,请参阅过滤器。
可以将--dry-run标志传递给apply osd命令以显示建议布局的概要。
例子
ceph orch apply -i /path/to/osd_spec.yml --dry-run
笔记: 默认情况下使用AND(逻辑与)应用过滤器。这意味着驱动器必须满足所有过滤条件才能被选中。可以通过在 OSD 规范中设置 filter_logic: OR 来调整此行为。
过滤器用于将磁盘分配给组,使用它们的属性对它们进行分组。
这些属性基于 ceph-volume 的磁盘查询。您可以使用以下命令检索有关属性的信息:
ceph-volume inventory
供应商或型号可以针对特定磁盘:
model: disk_model_name
要么:
vendor: disk_vendor_name
特定磁盘可以通过Size定位:
size: size_spec
尺寸规格
尺寸规格可以有以下几种形式:
LOW:HIGH
:HIGH
LOW:
EXACT
具体例子:
包含精确大小的磁盘
size: '10G'
要包含给定大小范围内的磁盘:
size: '10G:40G'
要包含大小小于或等于 10G 的磁盘:
size: ':10G'
要包含大小等于或大于 40G 的磁盘:
size: '40G:'
大小不必专门以千兆字节 (G) 为单位指定。
支持其他大小单位:兆字节(M)、千兆字节(G) 和太字节(T)。还支持为字节附加 (B):MB, GB, TB.
这对磁盘的“ROTATIONAL”属性起作用。
rotational: 0 | 1
这将占用所有“可用”的磁盘
笔记: 这是 data_devices 部分独有的。
all: true
如果您指定了一些有效的过滤器,但想限制它们匹配的磁盘数量,请使用该limit指令:
limit: 2
例如,如果您使用vendor来匹配来自VendorA 但只想使用前两个的所有磁盘,则可以使用limit:
data_devices:
vendor: VendorA
limit: 2
笔记: 限制是最后的手段,如果可以避免,则不应使用。
您可以使用多种可选设置来更改 OSD 的部署方式。您可以将这些选项添加到 OSD 规范的基本级别以使其生效。
这个例子将部署所有启用加密的 OSD。
service_type: osd
service_id: example_osd_spec
placement:
host_pattern: '*'
spec:
data_devices:
all: true
encrypted: true
在 DriveGroupSpecs 中查看完整列表
类 ceph.deployment.drive_group.DriveGroupSpec(*args: Any, **kwargs: Any)
以 ceph-volume 理解的相同形式描述驱动器组。
block_db_size: 可选[Union[int, str]]
设置(或覆盖)“bluestore_block_db_size”值,以字节为单位
block_wal_size: 可选[Union[int, str]]
设置(或覆盖)“bluestore_block_wal_size”值,以字节为单位
data_devices
一种ceph.deployment.drive_group.DeviceSelection
data_directories
字符串列表,包含应该支持 OSD 的路径
db_devices
一种ceph.deployment.drive_group.DeviceSelection
db_slots
每个 DB 设备有多少个 OSD
encrypted
true或false
filter_logic
我们用来将磁盘与过滤器匹配的逻辑。默认为“and”
journal_devices
一种ceph.deployment.drive_group.DeviceSelection
journal_size: 可选[Union[int, str]]
以字节为单位设置 journal_size
objectstore
filestore或bluestore
osd_id_claims
可选:主机映射 -> 应替换的 osd_id 列表参见OSD 替换
osds_per_device
每个“DATA”设备的 osd 守护进程数。要充分利用 nvme 设备,需要多个 osd。
preview_only
如果这应该被视为“预览”规范
wal_devices
一种ceph.deployment.drive_group.DeviceSelection
wal_slots
每个 WAL 设备有多少个 OSD
具有相同设置的所有节点
20 HDDs
Vendor: VendorA
Model: HDD-123-foo
Size: 4TB
2 SSDs
Vendor: VendorB
Model: MC-55-44-ZX
Size: 512GB
这是一个常见的设置,可以很容易地描述:
service_type: osd
service_id: osd_spec_default
placement:
host_pattern: '*'
spec:
data_devices:
model: HDD-123-foo # Note, HDD-123 would also be valid
db_devices:
model: MC-55-44-XZ # Same here, MC-55-44 is valid
但是,我们可以通过减少驱动器核心属性的过滤器来改进它:
service_type: osd
service_id: osd_spec_default
placement:
host_pattern: '*'
spec:
data_devices:
rotational: 1
db_devices:
rotational: 0
现在,我们强制将所有旋转设备声明为“数据设备”,所有非旋转设备将用作 shared_devices (wal, db)
如果您知道超过 2TB 的驱动器将始终是较慢的数据设备,您还可以按大小过滤:
service_type: osd
service_id: osd_spec_default
placement:
host_pattern: '*'
spec:
data_devices:
size: '2TB:'
db_devices:
size: ':2TB'
笔记: 上述所有 OSD 规范同样有效。您要使用哪一个取决于您的品味以及您希望节点布局改变多少。
这里我们有两个不同的设置
20 HDDs
Vendor: VendorA
Model: HDD-123-foo
Size: 4TB
12 SSDs
Vendor: VendorB
Model: MC-55-44-ZX
Size: 512GB
2 NVMEs
Vendor: VendorC
Model: NVME-QQQQ-987
Size: 256GB
这可以用两种布局来描述。
service_type: osd
service_id: osd_spec_hdd
placement:
host_pattern: '*'
spec:
data_devices:
rotational: 1
db_devices:
model: MC-55-44-XZ
limit: 2 # db_slots is actually to be favoured here, but it's not implemented yet
---
service_type: osd
service_id: osd_spec_ssd
placement:
host_pattern: '*'
spec:
data_devices:
model: MC-55-44-XZ
db_devices:
vendor: VendorC
这将通过将所有 HDD 用作 data_devices 并将两个 SSD 分配为专用 db/wal 设备来创建所需的布局。剩余的 SSD(8) 将是 data_devices,它们将“VendorC”NVME 分配为专用的 db/wal 设备。
假设集群有不同类型的主机,每个主机具有相似的磁盘布局,建议应用仅匹配一组主机的不同 OSD 规范。通常,您将拥有多个具有相同布局的主机的规范。
服务 id 作为唯一键:如果应用了具有已应用服务 id 的新 OSD 规范,则现有 OSD 规范将被取代。cephadm 现在将根据新的规范定义创建新的 OSD 守护进程。现有的 OSD 守护进程不会受到影响。请参阅声明性状态。
节点 1-5
20 HDDs
Vendor: Intel
Model: SSD-123-foo
Size: 4TB
2 SSDs
Vendor: VendorA
Model: MC-55-44-ZX
Size: 512GB
节点 6-10
5 NVMEs
Vendor: Intel
Model: SSD-123-foo
Size: 4TB
20 SSDs
Vendor: VendorA
Model: MC-55-44-ZX
Size: 512GB
您可以使用布局中的“placement”键来定位某些节点。
service_type: osd
service_id: disk_layout_a
placement:
label: disk_layout_a
spec:
data_devices:
rotational: 1
db_devices:
rotational: 0
---
service_type: osd
service_id: disk_layout_b
placement:
label: disk_layout_b
spec:
data_devices:
model: MC-55-44-XZ
db_devices:
model: SSD-123-foo
这将根据放置键将不同的 OSD 规范应用于不同的主机。请参阅守护程序放置
笔记: 假设每台主机都有唯一的磁盘布局,每个 OSD 规范需要有不同的服务 id
所有以前的案例都将 WAL 与 DB 放在一起。但是,如果可行的话,也可以在专用设备上部署 WAL。
20 HDDs
Vendor: VendorA
Model: MC-55-44-ZX
Size: 4TB
2 SSDs
Vendor: VendorB
Model: SSD-123-foo
Size: 512GB
2 NVMEs
Vendor: VendorC
Model: NVME-QQQQ-987
Size: 256GB
这种情况下的 OSD 规范如下所示(使用模型过滤器):
service_type: osd
service_id: osd_spec_default
placement:
host_pattern: '*'
spec:
data_devices:
model: MC-55-44-XZ
db_devices:
model: SSD-123-foo
wal_devices:
model: NVME-QQQQ-987
也可以直接在特定主机中指定设备路径,如下所示:
service_type: osd
service_id: osd_using_paths
placement:
hosts:
- Node01
- Node02
spec:
data_devices:
paths:
- /dev/sdb
db_devices:
paths:
- /dev/sdc
wal_devices:
paths:
- /dev/sdd
这可以通过其他过滤器轻松完成,例如尺寸或供应商。
如果主机的操作系统被重新安装,现有的 OSD 需要重新激活。对于这个用例,cephadm 为 activate 提供了一个包装器,用于激活主机上所有现有的 OSD。
ceph cephadm osd activate ...
这将扫描所有现有磁盘的 OSD 并部署相应的守护进程。
作者:Varden
出处:Varden - 博客园
本文内容如有雷同,请联系作者!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。