5.3. 映射 Ceph Storage 节点磁盘布局


部署容器化 Ceph Storage 时,您必须映射磁盘布局,并为 Ceph OSD 服务指定专用块设备。您可以在之前创建的环境文件中执行此映射,以定义自定义 Ceph 参数: /home/stack/templates/ceph-config.yaml

使用 parameter_defaults 中的 CephAnsibleDisksConfig 资源映射您的磁盘布局。此资源使用以下变量:

Expand
变量必需?默认值(如果未设置)Description

osd_scenario

lvm

注: 默认值为 lvm

lvm 值允许 ceph-ansible 使用 ceph-volume 来配置 OSD、block.db 和 BlueStore WAL 设备。

devices

NONE.必须设置变量。

要用于节点上 OSD 的块设备列表。

dedicated_devices

是(仅在 osd_scenario非并置

devices

devices 参数中的每个条目映射到专用日志块设备的列表。您只能在 osd_scenario=non-collocated 时使用此变量。

dmcrypt

false

设置 OSD 上存储的数据是加密的(true)还是未加密的(false)。

osd_objectstore

bluestore

注: 默认值为 bluestore

设置 Ceph 使用的存储后端。

注意:虽然值默认为 bluestore,但您可以在 collated 或 non-collated 场景中将 osd_scenario 设置为 filestore。您可以在非协调场景中将值设置为 filestore,其中 dedicated_devices 标识日志记录磁盘。您可以在联合场景中将值设置为 filestore,您可以在其中对设备中定义的磁盘进行分区,并将 OSD 数据和日志数据存储在同一设备上。

5.3.1. 使用 BlueStore

流程

  1. 要指定您要用作 Ceph OSD 的块设备,请使用以下片段的变体:

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/sdb
          - /dev/sdc
          - /dev/sdd
          - /dev/nvme0n1
        osd_scenario: lvm
        osd_objectstore: bluestore
    Copy to Clipboard Toggle word wrap
  2. 因为 /dev/nvme0n1 位于执行的设备类中,所以 example parameter_defaults 会生成三个在 /dev/sdb/dev/sdc/dev/sdd 上运行的 OSD。三个 OSD 使用 /dev/nvme0n1 作为 block.db 和 BlueStore WAL 设备。ceph-volume 工具使用 batch 子命令执行此操作。每个 Ceph Storage 节点都会重复相同的配置,并假设硬件统一。如果 block.db 和 BlueStore WAL 数据位于与 OSD 相同的磁盘上,则使用以下方式更改参数默认值:

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/sdb
          - /dev/sdc
          - /dev/sdd
        osd_scenario: lvm
        osd_objectstore: bluestore
    Copy to Clipboard Toggle word wrap

5.3.2. 使用持久名称引用设备

流程

  1. 在某些节点中,磁盘路径(如 /dev/sdb/dev/sdc )可能无法在重启期间指向同一块设备。如果您的 Ceph Storage 节点是这种情况,请使用 /dev/disk/by-path/ 符号链接为每个磁盘指定,以确保在部署过程中一致的块设备映射:

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:10:0
          - /dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:11:0
    
        dedicated_devices:
          - /dev/nvme0n1
          - /dev/nvme0n1
    Copy to Clipboard Toggle word wrap
  2. 可选: 因为您必须在 overcloud 部署前设置 OSD 设备列表,因此可能无法识别和设置磁盘设备的 PCI 路径。在这种情况下,在内省期间为块设备收集 /dev/disk/by-path/symlink 数据。

    在以下示例中,运行第一个命令,从服务器 b08-h03-r620-hci.json 的 undercloud Object Storage 服务(swift)下载内省数据,并将数据保存到名为 b08-h03-r620-hci.json 的文件中。运行第二个命令来对"by-path"使用 grep。此命令的输出包含可用于识别磁盘的唯一 /dev/disk/by-path 值。

    (undercloud) [stack@b08-h02-r620 ironic]$ openstack baremetal introspection data save b08-h03-r620-hci | jq . > b08-h03-r620-hci.json
    (undercloud) [stack@b08-h02-r620 ironic]$ grep by-path b08-h03-r620-hci.json
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:0:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:1:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:3:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:4:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:5:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:6:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:7:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:0:0",
    Copy to Clipboard Toggle word wrap

有关存储设备的命名规则的更多信息,请参阅管理存储设备指南中的持久性命名属性概述

5.3.3. 在高级场景中配置 OSD

在环境文件中,您将列出要在 CephAnsibleDisksConfig 资源的 devices 变量中用于 OSD 的块设备。

当您在没有其他设备配置参数的情况下使用 devices 变量时,ceph-volume lvm batch 通过将更高的性能设备作为较慢的设备的 block.db 来自动优化 OSD 配置。

您可以使用以下步骤配置 设备 以避免在 ceph-volume lvm batch 模式下运行。

5.3.3.1. 使用 block.db 提高性能

使用 block.db 可以通过增加吞吐量并缩短响应时间来提高 Ceph Storage 集群的性能。block.db 是一个数据库,它由数据片段和 BlueStore write-ahead 日志(WAL)组成。

流程

  1. 在环境文件中添加以下内容:

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/sda
          - /dev/sdb
          - /dev/nvme0n1
          - /dev/sdc
          - /dev/sdd
          - /dev/nvme0n2
        osd_scenario: lvm
        osd_objectstore: bluestore
    Copy to Clipboard Toggle word wrap

    这将配置四个 OSD: sdasdbsdcsdd。每个对都有自己的数据库:nv em0n1nvme0n2

    注意

    设备列表中的设备顺序非常重要。列出驱动器,后跟 block.db 和 BlueStore WAL (DB-WAL)设备。在这个示例中,nvme0n1sdasdb 的 DB-WAL,nvme0n2sdcsdd 的 DB-WAL。如需更多信息,请参阅使用 BlueStore

  2. 在部署 overcloud 时,使用 -e 选项包括部署命令中包含新内容的环境文件。

5.3.3.2. 使用专用 write-ahead 日志(WAL)设备

您可以指定专用的 write-ahead 日志(WAL)设备。使用 devicesdedicated_devicesbluestore_wal_devices 意味着您可以将 OSD 的所有组件隔离到单独的设备,从而提高性能。

在以下示例中,另一个额外的字典 bluestore_wal_devices 隔离 NVMe devices nvme0n1nvme0n2 上的 write-ahead 日志。

流程

  1. 在环境文件中添加以下内容:

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/sda
          - /dev/sdb
        dedicated_devices:
          - /dev/sdx
          - /dev/sdy
        bluestore_wal_devices:
          - /dev/nvme0n1
          - /dev/nvme0n2
    Copy to Clipboard Toggle word wrap
  2. 在部署 overcloud 时,使用 -e 选项包括部署命令中包含新内容的环境文件。

5.3.3.3. 使用预先创建的 LVM 来提高控制

在以前的高级场景中,ceph-volume 使用不同类型的设备列表来为 OSD 创建逻辑卷。您还可以在 ceph-volume 运行前创建逻辑卷,然后将 ceph-volume 传递这些逻辑卷的 lvm_volumes 列表。虽然这需要您提前创建逻辑卷,但这意味着您有更精确的控制。由于 director 还负责硬件置备,因此您必须使用第一次引导脚本提前创建这些 LVM。

流程

  1. 创建一个环境文件 /home/stack/templates/firstboot.yaml,它将您的 heat 模板注册为 OS::TripleO::NodeUserData 资源类型,并包含以下内容:

    resource_registry:
      OS::TripleO::NodeUserData: /home/stack/templates/ceph-lvm.yaml
    Copy to Clipboard Toggle word wrap
  2. 创建一个环境文件 /home/stack/templates/ceph-lvm.yaml。添加类似以下示例的列表,其中包含三个物理卷。如果您的设备列表较长,请根据您的要求扩展示例。

    heat_template_version: 2014-10-16
    
    description: >
      Extra hostname configuration
    
    resources:
      userdata:
        type: OS::Heat::MultipartMime
        properties:
          parts:
          - config: {get_resource: ceph_lvm_config}
    
      ceph_lvm_config:
        type: OS::Heat::SoftwareConfig
        properties:
          config: |
            #!/bin/bash -x
            pvcreate /dev/sda
            vgcreate ceph_vg_hdd /dev/sda
            pvcreate /dev/sdb
            vgcreate ceph_vg_ssd /dev/sdb
            pvcreate /dev/nvme0n1
            vgcreate ceph_vg_nvme /dev/nvme0n1
            lvcreate -n ceph_lv_wal1 -L 50G ceph_vg_nvme
            lvcreate -n ceph_lv_db1 -L 500G ceph_vg_ssd
            lvcreate -n ceph_lv_data1 -L 5T ceph_vg_hdd
            lvs
    
    outputs:
      OS::stack_id:
        value: {get_resource: userdata}
    Copy to Clipboard Toggle word wrap
  3. 通过以下方式使用 lvm_volumes 参数而不是 devices 列表。这假设已经创建了卷组和逻辑卷。在这种情况下,一个典型的用例是 WAL 和 DB LV 位于 SSD 上,数据 LV 位于 HDD 上:

    parameter_defaults:
      CephAnsibleDisksConfig:
        osd_objectstore: bluestore
        osd_scenario: lvm
        lvm_volumes:
          - data: ceph_lv_data1
            data_vg: ceph_vg_hdd
            db: ceph_lv_db1
            db_vg: ceph_vg_ssd
            wal: ceph_lv_wal1
            wal_vg: ceph_vg_nvme
    Copy to Clipboard Toggle word wrap
  4. 在部署 overcloud 时,使用 -e 选项包括部署命令中包含新内容的环境文件。

    备注
    只有在 WAL 设备位于性能优于 DB 设备的硬件上,才需要指定单独的 WAL 设备。通常,创建单独的 DB 设备就足够了,然后相同的分区用于 WAL 功能。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat