注意

本文档适用于 Ceph 开发版本。

prepare

在运行之前ceph-volume lvm prepare,我们建议您配置一个prepare

prepare添加元数据到逻辑卷,但以其他方式不会修改它们。

Note

这是部署 OSD 的两步过程中的第一步。如果您更喜欢仅使用一个命令来部署 OSD,请参阅创建.

prepare使用LVM 标签来为逻辑卷分配几块元数据。以这种方式标记的卷更容易识别,并且更容易与 Ceph 一起使用。LVM 标签通过它们在 Ceph 集群中扮演的角色来标识逻辑卷(例如:BlueStore 数据或 BlueStore WAL+DB)。

BlueStore是默认后端。Ceph 允许更改后端,这可以通过使用以下标志和参数来完成:

bluestore

Bluestore是新 OSD 的默认后端。Bluestore 支持以下配置:

  • 一个块设备、一个块.wal 设备和一个块.db 设备

  • 一个块设备和一个块.wal 设备

  • 一个块设备和一个块.db 设备

  • 一个单个块设备

The bluestore子命令接受物理块设备、物理块设备上的分区或逻辑卷作为各种设备参数的参数。如果提供了物理块设备,将创建一个逻辑卷。如果提供的卷组名称以ceph开头,如果它尚不存在,则将创建它,如果它已经存在,则将覆盖并重用它。这允许更简单的方法来使用 LVM,但代价是灵活性:没有选项或配置可用于更改逻辑卷的创建方式。

The block使用--data标志指定,在其最简单的用例中,它看起来像:

ceph-volume lvm prepare --bluestore --data vg/lv

原始设备可以按相同的方式指定:

ceph-volume lvm prepare --bluestore --data /path/to/device

要启用加密--dmcrypt标志:

ceph-volume lvm prepare --bluestore --dmcrypt --data vg/lv

从 Ceph Squid 开始,您可以选择为创建的 LUKS2 设备进行 TPM2 令牌注册:--with-tpm标志:

ceph-volume lvm prepare --bluestore --dmcrypt --with-tpm --data vg/lv

如果需要block.db设备或block.wal设备,可以使用--block.db--block.wal指定。这些可以是物理设备、分区或逻辑卷。block.dbblock.wal对于 bluestore 是可选的。

对于两者block.dbblock.wal,分区可以直接使用,因此不会被转换为逻辑卷。

在创建 OSD 目录时,进程使用一个tmpfs挂载来保存 OSD 所需的文件。这些文件由ceph-osd --mkfs创建,并且是短暂的。

block设备创建了一个符号链接,对于block.dbblock.wal是可选的。对于具有默认名称和 OSD ID 为 0 的集群,目录看起来像这样:

ls -l /var/lib/ceph/osd/ceph-0
lrwxrwxrwx. 1 ceph ceph 93 Oct 20 13:05 block -> /dev/ceph-be2b6fbd-bcf2-4c51-b35d-a35a162a02f0/osd-block-25cf0a05-2bc6-44ef-9137-79d65bd7ad62
lrwxrwxrwx. 1 ceph ceph 93 Oct 20 13:05 block.db -> /dev/sda1
lrwxrwxrwx. 1 ceph ceph 93 Oct 20 13:05 block.wal -> /dev/ceph/osd-wal-0
-rw-------. 1 ceph ceph 37 Oct 20 13:05 ceph_fsid
-rw-------. 1 ceph ceph 37 Oct 20 13:05 fsid
-rw-------. 1 ceph ceph 55 Oct 20 13:05 keyring
-rw-------. 1 ceph ceph  6 Oct 20 13:05 ready
-rw-------. 1 ceph ceph 10 Oct 20 13:05 type
-rw-------. 1 ceph ceph  2 Oct 20 13:05 whoami

在上述情况下,一个设备用于block,所以ceph-volume使用以下约定创建了卷组和逻辑卷:

  • 卷组名称:ceph-{cluster fsid}(如果卷组已经存在:ceph-{random uuid})

  • 逻辑卷名称:osd-block-{osd_fsid}

filestore

警告

Filestore 在 Reef 发布中已被弃用,不再受支持。

Filestore<filestore>是为文件存储后端准备逻辑卷的 OSD 后端。-支持的 OSD。

Filestore<filestore>使用逻辑卷存储 OSD 数据,并使用物理设备、分区或逻辑卷存储日志。如果使用物理设备创建文件存储后端,将在该物理设备上创建逻辑卷。如果提供的卷组名称以ceph开头,如果它尚不存在,则将创建它,如果它已经存在,则将覆盖并重用它。这些卷不需要特殊准备,但请确保满足 OSD 数据和日志的最小大小要求。

使用以下命令创建基本的文件存储 OSD:

ceph-volume lvm prepare --filestore --data <data block device>

使用此命令部署具有外部日志的文件存储:

ceph-volume lvm prepare --filestore --data <data block device> --journal <journal block device>

使用此命令启用加密,并请注意需要--dmcrypt标志:

ceph-volume lvm prepare --filestore --dmcrypt --data <data block device> --journal <journal block device>

数据块设备和日志各自可以采用三种形式之一:

  • 物理块设备

  • 物理块设备上的分区

  • 逻辑卷

如果您使用逻辑卷部署文件存储,则在命令中传递的值must应该是volume_group/logical_volume_name格式。由于逻辑卷名称不强制唯一,使用这种格式是一个重要的保护措施,以防止意外选择错误的卷(并覆盖其数据)。

如果您使用分区部署文件存储,则分区must应该包含一个PARTUUID,该卷可以被blkid发现。这确保了无论设备名称(或路径)如何,都可以正确识别该分区。

例如,要使用逻辑卷作为 OSD 数据,并使用分区/dev/sdc1作为日志,请运行类似以下形式的命令:

ceph-volume lvm prepare --filestore --data volume_group/logical_volume_name --journal /dev/sdc1

或者,要使用裸设备用于数据,并使用逻辑卷用于日志:

ceph-volume lvm prepare --filestore --data /dev/sdc --journal volume_group/journal_lv

在请求集群提供新的 OSD 时使用生成的 UUID。这两条信息(OSD ID 和 OSD UUID)对于标识特定的 OSD 是必要的,并且将在整个激活过程中 later 使用。

使用以下约定创建 OSD 数据目录:

/var/lib/ceph/osd/<cluster name>-<osd id>

要将日志卷链接到挂载的数据卷,请使用此命令:

ln -s /path/to/journal /var/lib/ceph/osd/<cluster_name>-<osd-id>/journal

要使用 OSD 的引导密钥获取 monmap,请使用此命令:

/usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyring \
/var/lib/ceph/bootstrap-osd/ceph.keyring mon getmap -o \
/var/lib/ceph/osd/<cluster name>-<osd id>/activate.monmap

要填充已挂载的 OSD 目录,请使用此ceph-osd command:

ceph-osd --cluster ceph --mkfs --mkkey -i <osd id> --monmap \
/var/lib/ceph/osd/<cluster name>-<osd id>/activate.monmap --osd-data \
/var/lib/ceph/osd/<cluster name>-<osd id> --osd-journal \
/var/lib/ceph/osd/<cluster name>-<osd id>/journal --osd-uuid <osd uuid> \
--keyring /var/lib/ceph/osd/<cluster name>-<osd id>/keyring --setuser ceph \
--setgroup ceph

命令。以上所有步骤中的信息都用于上述命令。

分区

ceph-volume lvm目前不会从整个设备创建分区。如果使用设备分区,唯一的要求是它们包含PARTUUID,并且它可以通过blkid发现。两者fdiskparted都会自动为新的分区创建该内容。

例如,使用新的未格式化驱动器/dev/sdd在此情况下,我们可以使用parted创建一个新的分区。首先我们列出设备信息:

parted --script /dev/sdd print
Model: VBOX HARDDISK (scsi)
Disk /dev/sdd: 11.5GB
Sector size (logical/physical): 512B/512B
Disk Flags:

该设备甚至还没有标签,因此我们可以使用parted在创建分区之前创建一个gpt标签,并再次使用parted print:

parted --script /dev/sdd mklabel gpt
parted --script /dev/sdd print
Model: VBOX HARDDISK (scsi)
Disk /dev/sdd: 11.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

验证。现在让我们创建一个单个分区,并稍后验证blkid是否可以找到PARTUUID需要的ceph-volume:

parted --script /dev/sdd mkpart primary 1 100%
blkid /dev/sdd1
/dev/sdd1: PARTLABEL="primary" PARTUUID="16399d72-1e1f-467d-96ee-6fe371a7d0d4"

现有 OSD

对于希望使用此新系统并且已经在其中运行 OSD 的现有集群,需要考虑以下几点:

警告

此过程将强制格式化数据设备,如果有的话,将销毁现有数据。

  • OSD 路径应遵循此约定:

    /var/lib/ceph/osd/<cluster name>-<osd id>
    
  • 最好没有其他机制来挂载卷,并且应该被删除(例如 fstab 挂载点)

现有 OSD 的一次性过程,其 ID 为 0,并使用"ceph"集群名称,如下所示(以下命令将销毁 OSD 中的任何数据 in the OSD):

ceph-volume lvm prepare --filestore --osd-id 0 --osd-fsid E3D291C1-E7BF-4984-9794-B60D9FA139CB

命令行工具不会联系监视器来生成 OSD ID,并且除了在它上面存储元数据以便以后启动之外,还会格式化 LVM 设备(有关详细元数据描述,请参阅元数据).

Crush 设备类

要为 OSD 设置 crush 设备类,请使用--crush-device-class标志指示 cephadm 移除主机以及 CRUSH 桶。

ceph-volume lvm prepare --bluestore --data vg/lv --crush-device-class foo

multipath支持

multipath设备如果lvm配置正确,则受支持。

交给 LVM

大多数 Linux 发行版应该在其 LVM2 软件包中默认配置multipath_component_detection = 1。使用此设置LVM忽略任何多路径组件设备,并且ceph-volume将相应地不接触这些设备。

使用过滤器

如果此设置不可用,必须在filter表达式。必须不能同时使用多路径设备和其多路径组件。lvm.conf. ceph-volume中提供正确的

存储元数据

以下标签作为准备过程的一部分,无论卷类型(日志或数据)或 OSD 对象存储如何,都会应用这些标签:

  • cluster_fsid

  • encrypted

  • osd_fsid

  • osd_id

  • crush_device_class

对于bluestore这些标签将被添加:

  • block_device

  • block_uuid

  • db_device

  • db_uuid

  • wal_device

  • wal_uuid

Note

完整的 lvm 标签约定,请参阅标签 API

总结

总结一下prepare过程 forbluestore:

  1. 接受原始物理设备、物理设备上的分区或逻辑卷作为参数。

  2. 在任何原始物理设备上创建逻辑卷。

  3. 为 OSD 生成 UUID

  4. 请求监视器获取 OSD ID,重用生成的 UUID

  5. OSD 数据目录在 tmpfs 挂载上创建。

  6. block, block.wal, and block.db如果定义,则将它们链接。

  7. 获取用于激活的 monmap

  8. 数据目录由ceph-osd

  9. 填充。逻辑卷使用 lvm 标签分配所有 Ceph 元数据。

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.