Ceph入门到精通-Ceph 服务管理之OSD服务

Ceph 服务管理之OSD服务

列出设备

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,必须有一个可用于部署 OSD 的存储设备。

运行以下命令以显示所有集群主机上的存储设备清单:

ceph orch device ls

如果满足以下所有条件,则认为存储设备可用:

  • 设备不能有分区。

  • 设备不得具有任何 LVM 状态。

  • 不得挂载该设备。

  • 设备不得包含文件系统。

  • 设备不得包含 Ceph BlueStore OSD。

  • 设备必须大于 5 GB。

Ceph 不会在不可用的设备上配置 OSD。

创建新的 OSD

有几种方法可以创建新的 OSD:

  • 告诉 Ceph 使用任何可用和未使用的存储设备:
ceph orch apply osd --all-available-devices
  • 从特定主机上的特定设备创建 OSD:
ceph orch daemon add osd **:**

例如:

ceph orch daemon add osd host1:/dev/sdb
  • 您可以使用高级 OSD 服务规范根据设备的属性对设备进行分类。这可能有助于更清楚地了解哪些设备可供使用。属性包括设备类型(SSD 或 HDD)、设备型号名称、大小以及设备所在的主机:
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。
  • 如果您移除一个 OSD 并清理 LVM 物理卷,则会自动创建一个新的 OSD。

要禁用在可用设备上自动创建 OSD,请使用以下 unmanaged参数:

如果您想避免这种行为(禁用在可用设备上自动创建 OSD),请使用以下unmanaged参数:

ceph orch apply osd --all-available-devices --unmanaged=true

笔记: 记住这三个事实:

  • ceph orch apply的默认行为导致 cephadm 不断协调。这意味着一旦检测到新驱动器,cephadm 就会创建 OSD。
  • 设置unmanaged: True禁用 OSD 的创建。如果设置unmanaged: True,即使您应用新的 OSD 服务也不会发生任何事情。
  • ceph orch daemon add创建 OSD,但不添加 OSD 服务。

对于 cephadm,另请参阅禁用守护程序的自动部署。

移除 OSD

从集群中移除 OSD 涉及两个步骤:

  1. 从集群中撤出所有归置组 (PG)
  2. 从集群中移除无 PG OSD

以下命令执行这两个步骤:

ceph orch osd rm  [--replace] [--force]

例子:

ceph orch osd rm 0

预期输出:

Scheduled OSD(s) for removal

无法安全销毁的 OSD 将被拒绝。

监控 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 移除

可以使用以下命令停止排队的 OSD 删除:

ceph orch osd rm stop 

例子:

ceph orch osd rm stop 4

预期输出:

Stopped OSD(s) removal

这会重置 OSD 的初始状态并将其从移除队列中移除。

更换 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标志以执行部署。

擦除设备(ZAPPING 设备)

擦除(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 守护进程将根据 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

高级 OSD 服务规范

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”属性起作用。

rotational: 0 | 1
  • 1匹配所有旋转的磁盘
  • 0匹配所有非旋转磁盘(SSD、NVME 等)

ALL(全部)

这将占用所有“可用”的磁盘

笔记: 这是 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 规范同样有效。您要使用哪一个取决于您的品味以及您希望节点布局改变多少。

单个主机的多个 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
  • 20 个 HDD 应该共享 2 个 SSD
  • 10 个 SSD 应该共享 2 个 NVMes

这可以用两种布局来描述。

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 与 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

如果主机的操作系统被重新安装,现有的 OSD 需要重新激活。对于这个用例,cephadm 为 activate 提供了一个包装器,用于激活主机上所有现有的 OSD。

ceph cephadm osd activate ...

这将扫描所有现有磁盘的 OSD 并部署相应的守护进程。

作者:Varden

出处:Varden - 博客园

本文内容如有雷同,请联系作者!

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

你可能感兴趣的:(java,linux,运维,ceph)