块设备指南


Red Hat Ceph Storage 3

管理、创建、配置和使用 Red Hat Ceph Storage 块设备

Red Hat Ceph Storage Documentation Team

摘要

本文档描述了如何管理、创建、配置和使用 Red Hat Ceph Storage 块设备。

第 1 章 概述

块是字节序列,例如 512 字节数据块。基于块的存储接口是使用旋转介质存储数据的最常见的方式,例如:

  • 硬盘、
  • CDs,
  • 软盘,
  • 甚至传统的 9-track 磁带。

大量块设备使虚拟块设备成为与 Red Hat Ceph Storage 等大量数据存储系统交互的理想候选者。

Ceph 块设备(也称为可靠的自主分布式对象存储(RADOS)块设备(RBD)是精简配置、可调整大小,并在 Ceph 存储集群中的多个对象存储设备(OSD)上存储数据条带。Ceph 块设备利用 RADOS 功能,例如:

  • 创建快照,
  • 复制,
  • 和一致性。

Ceph 块设备使用 librbd 库与 OSD 交互。

Ceph 块设备为内核虚拟机(KVM) (如快速仿真器(QEMU))和基于云的计算系统(如 OpenStack 和 CloudStack)提供高性能,它们依赖于 libvirt 和 QEMU 实用程序与 Ceph 块设备集成。您可以使用同一集群同时运行 Ceph 对象网关和 Ceph 块设备。

重要

要使用 Ceph 块设备,必须有权访问正在运行的 Ceph 存储集群。有关安装 Red Hat Ceph Storage 的详情,请查看 Red Hat Enterprise LinuxUbuntu 安装指南

第 2 章 块设备命令

rbd 命令允许您创建、列出、内省和删除块设备镜像。您还可以使用它克隆镜像、创建快照、将镜像回滚到快照,查看快照等。

2.1. 先决条件

在使用 Ceph 块设备和 rbd 命令之前,您必须满足两个先决条件:

重要

手动安装 Ceph 块设备 章节还提供有关在客户端节点上挂载和使用 Ceph 块设备的信息。仅在为 Ceph Storage 集群中的块设备创建镜像后在客户端节点上执行这些步骤。详情请查看 第 2.4 节 “创建块设备镜像”

2.2. 显示帮助

使用 rbd help 命令显示特定 rbd 命令及其子命令的帮助信息:

[root@rbd-client ~]# rbd help <command> <subcommand>
Copy to Clipboard Toggle word wrap

示例

显示 snap list 命令的帮助信息:

[root@rbd-client ~]# rbd help snap list
Copy to Clipboard Toggle word wrap
注意

-h 选项仍然显示所有可用命令的帮助信息。

2.3. 创建块设备池

在使用块设备客户端之前,请确保 rbd 的池存在,并且已启用并初始化。要创建 rbd 池,请执行以下操作:

[root@rbd-client ~]# ceph osd pool create {pool-name} {pg-num} {pgp-num}
[root@rbd-client ~]# ceph osd pool application enable {pool-name} rbd
[root@rbd-client ~]# rbd pool init -p {pool-name}
Copy to Clipboard Toggle word wrap
注意

必须先创建一个池,然后才能将它指定为来源。如需了解更多详细信息,请参阅 Red Hat Ceph Storage 3 的存储策略指南中的池 章节。 https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/3/html-single/storage_strategies_guide/#pools-1

2.4. 创建块设备镜像

在添加块设备到节点之前,在 Ceph 存储集群中为其创建镜像。要创建块设备镜像,请执行以下命令:

[root@rbd-client ~]# rbd create <image-name> --size <megabytes> --pool <pool-name>
Copy to Clipboard Toggle word wrap

例如,要创建一个名为 data 的 1GB 镜像,该镜像将信息存储在名为 stack 的池中,请运行:

[root@rbd-client ~]# rbd create data --size 1024 --pool stack
Copy to Clipboard Toggle word wrap
注意
在创建镜像之前,确保存在 rbd 的池。如需了解更多详细信息,请参阅创建块设备池

2.5. 列出块设备镜像

若要列出 rbd 池中的块设备,可执行下列命令(rbd 是默认的池名称):

[root@rbd-client ~]# rbd ls
Copy to Clipboard Toggle word wrap

要列出特定池中的块设备,请执行以下操作,但将 {poolname} 替换为池的名称:

[root@rbd-client ~]# rbd ls {poolname}
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd ls swimmingpool
Copy to Clipboard Toggle word wrap

2.6. 检索镜像信息

要从特定镜像检索信息,请执行以下操作,但将 {image-name} 替换为镜像的名称:

[root@rbd-client ~]# rbd --image {image-name} info
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd --image foo info
Copy to Clipboard Toggle word wrap

要从池中的镜像检索信息,请执行以下操作,但将 {image-name} 替换为镜像名称,并将 {pool-name} 替换为池的名称:

[root@rbd-client ~]# rbd --image {image-name} -p {pool-name} info
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd --image bar -p swimmingpool info
Copy to Clipboard Toggle word wrap

2.7. 调整块设备镜像大小

Ceph 块设备镜像已精简调配。在开始将数据保存到其中之前,它们不会实际使用任何物理存储。但是,它们具有您通过 --size 选项设置的最大容量。

增加或减少 Ceph 块设备镜像的最大大小:

[root@rbd-client ~]# rbd resize --image <image-name> --size <size>
Copy to Clipboard Toggle word wrap

2.8. 删除块设备镜像

要删除块设备,请执行以下操作,但将 {image-name} 替换为您要删除的镜像的名称:

[root@rbd-client ~]# rbd rm {image-name}
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd rm foo
Copy to Clipboard Toggle word wrap

要从池中删除块设备,请执行以下操作,但将 {image-name} 替换为要删除的镜像名称,并将 {pool-name} 替换为池的名称:

[root@rbd-client ~]# rbd rm {image-name} -p {pool-name}
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd rm bar -p swimmingpool
Copy to Clipboard Toggle word wrap

2.9. 将块设备镜像移动到垃圾箱中

RADOS 块设备 (RBD) 镜像可以使用 rbd trash 命令移到回收站中。此命令提供的选项比 rbd rm 命令更多。

镜像移到回收站后,可以稍后将其从回收站中删除。这有助于避免意外删除。

执行以下操作将镜像移到回收站中:

[root@rbd-client ~]# rbd trash move {image-spec}
Copy to Clipboard Toggle word wrap

镜像位于回收站中后,会为它分配一个唯一镜像 ID。如果您需要使用任何垃圾选项,则需要此镜像 ID 来指定镜像。执行 rbd trash list,以列出回收站中镜像的 ID 列表。此命令还会返回镜像的预删除名称。

此外,还有一个可选的 --image-id 参数,可用于 rbd inforbd snap 命令。将 --image-idrbd info 命令搭配使用,查看垃圾箱中的镜像属性,并使用 rbd snap 从回收站中删除镜像的快照。

从垃圾箱中删除镜像

要从回收站中删除镜像,请执行以下操作:

[root@rbd-client ~]# rbd trash remove [{pool-name}/] {image-id}
Copy to Clipboard Toggle word wrap
重要

从回收站中删除镜像后,它将无法被恢复。

delay Trash Removal

使用 --delay 选项设置镜像从回收站中删除前的时间。执行以下命令,但将 {time} 替换为在镜像删除前要等待的秒数(默认为 0):

[root@rbd-client ~]# rbd trash move [--delay {time}] {image-spec}
Copy to Clipboard Toggle word wrap

启用 --delay 选项后,除非强制,否则无法从指定时间段中的回收站中删除镜像。

从垃圾箱中恢复镜像

只要镜像尚未从回收站中删除,就可以使用 rbd trash restore 命令恢复镜像。

执行 rbd trash restore 命令以恢复镜像:

[root@rbd-client ~]# rbd trash restore [{pool-name}/] {image-id}
Copy to Clipboard Toggle word wrap

2.10. 启用和禁用镜像功能

您可以在现有镜像上启用或禁用镜像功能,如 fast-diffexclusive-lockobject-mapjournaling

启用功能:

[root@rbd-client ~]# rbd feature enable <pool-name>/<image-name> <feature-name>
Copy to Clipboard Toggle word wrap

禁用一个功能:

[root@rbd-client ~]# rbd feature disable <pool-name>/<image-name> <feature-name>
Copy to Clipboard Toggle word wrap

例子

  • data 池中的 image1 镜像上启用 exclusive-lock 功能:

    [root@rbd-client ~]# rbd feature enable data/image1 exclusive-lock
    Copy to Clipboard Toggle word wrap
  • data 池中禁用 image2 镜像的 fast-diff 功能:

    [root@rbd-client ~]# rbd feature disable data/image2 fast-diff
    Copy to Clipboard Toggle word wrap
重要

启用 fast-diffobject-map 功能后,重建对象映射:

[root@rbd-client ~]# rbd object-map rebuild <pool-name>/<image-name>
Copy to Clipboard Toggle word wrap
注意

deep flatten 功能只能在现有的镜像上禁用,而不能启用。要使用 deep flatten 功能,需要在创建镜像时启用它。

2.11. 使用镜像元数据

Ceph 支持以键值对的形式添加自定义镜像元数据添。这些键值对没有严格的格式限制。

此外,通过使用元数据,您可以为特定镜像设置 RBD 配置参数。详情请参阅 覆盖部分镜像 的默认配置。

使用 rbd image-meta 命令处理元数据。

设置镜像元数据

设置新的元数据键值对:

[root@rbd-client ~]# rbd image-meta set <pool-name>/<image-name> <key> <value>
Copy to Clipboard Toggle word wrap

示例

  • last_update 键设置为 data 池中 dataset 镜像的 2016-06-06 值:

    [root@rbd-client ~]# rbd image-meta set data/dataset last_update 2016-06-06
    Copy to Clipboard Toggle word wrap

删除镜像元数据

删除元数据键值对:

[root@rbd-client ~]# rbd image-meta remove <pool-name>/<image-name> <key>
Copy to Clipboard Toggle word wrap

示例

  • data 池中的 dataset 镜像中删除 last_update 键值对:

    [root@rbd-client ~]# rbd image-meta remove data/dataset last_update
    Copy to Clipboard Toggle word wrap

获取键的值

查看一个键的值:

[root@rbd-client ~]# rbd image-meta get <pool-name>/<image-name> <key>
Copy to Clipboard Toggle word wrap

示例

  • 查看 last_update 键的值:

    [root@rbd-client ~]# rbd image-meta get data/dataset last_update
    Copy to Clipboard Toggle word wrap

列出镜像元数据

显示镜像中的所有元数据:

[root@rbd-client ~]# rbd image-meta list <pool-name>/<image-name>
Copy to Clipboard Toggle word wrap

示例

  • 列出 data 池中 dataset 镜像上设置的元数据:

    [root@rbd-client ~]# rbd data/dataset image-meta list
    Copy to Clipboard Toggle word wrap

覆盖 Particular 镜像的默认配置

要覆盖特定镜像的 Ceph 配置文件中设置的 RBD 镜像配置设置,请将 conf_ 前缀的配置参数设置为镜像元数据:

[root@rbd-client ~]# rbd image-meta set <pool-name>/<image-name> conf_<parameter> <value>
Copy to Clipboard Toggle word wrap

示例

  • data 池中 dataset 镜像禁用 RBD 缓存:

    [root@rbd-client ~]# rbd image-meta set data/dataset conf_rbd_cache false
    Copy to Clipboard Toggle word wrap

如需可能 的配置选项的列表,请参阅块设备配置参考

第 3 章 快照

快照是镜像在特定时间点上状态的只读副本。Ceph 块设备的其中一个高级功能是您可以创建镜像的快照来保留镜像状态的历史记录。Ceph 还支持快照分层,允许您快速轻松地克隆镜像(如虚拟机镜像)。Ceph 支持使用 rbd 命令和许多更高级别的接口进行块设备快照,包括 QEMUlibvirtOpenStackCloudStack

重要

要使用 RBD 快照,您必须有一个正在运行的 Ceph 集群。

注意

如果在镜像中 I/O 仍在进行时进行快照,则快照可能没有获得镜像的准确或最新的数据,且快照可能需要克隆到新镜像中。因此,建议在生成镜像快照前停止 I/O。如果镜像包含文件系统,则执行快照之前文件系统必须处于一致状态。您可以使用 fsfreeze 命令停止 I/O。详情请查看 fsfreeze (8) 手册页。对于虚拟机,qemu-guest-agent 可用于在创建快照时自动冻结文件系统。

3.1. Cephx 备注

启用 cephx (默认为 )后,您必须指定用户名或 ID,以及包含用户对应密钥的密钥环的路径。您还可以添加 CEPH_ARGS 环境变量以避免重新输入以下参数:

[root@rbd-client ~]# rbd --id {user-ID} --keyring=/path/to/secret [commands]
[root@rbd-client ~]# rbd --name {username} --keyring=/path/to/secret [commands]
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd --id admin --keyring=/etc/ceph/ceph.keyring [commands]
[root@rbd-client ~]# rbd --name client.admin --keyring=/etc/ceph/ceph.keyring [commands]
Copy to Clipboard Toggle word wrap
提示

将用户和 secret 添加到 CEPH_ARGS 环境变量,以便您不需要每次输入它们。

3.2. 快照基础

以下流程演示了如何在命令行中使用 rbd 命令创建、列出和删除快照。

3.2.1. 创建快照

要使用 rbd 创建快照,请指定 snap create 选项、池名称和镜像名称:

[root@rbd-client ~]# rbd --pool {pool-name} snap create --snap {snap-name} {image-name}
[root@rbd-client ~]# rbd snap create {pool-name}/{image-name}@{snap-name}
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd --pool rbd snap create --snap snapname foo
[root@rbd-client ~]# rbd snap create rbd/foo@snapname
Copy to Clipboard Toggle word wrap

3.2.2. 列出快照

要列出镜像的快照,请指定池名称和镜像名称:

[root@rbd-client ~]# rbd --pool {pool-name} snap ls {image-name}
[root@rbd-client ~]# rbd snap ls {pool-name}/{image-name}
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd --pool rbd snap ls foo
[root@rbd-client ~]# rbd snap ls rbd/foo
Copy to Clipboard Toggle word wrap

3.2.3. 回滚快照

要使用 rbd 回滚到快照,请指定 snap rollback 选项、池名称、镜像名称和 snap 名称:

rbd --pool {pool-name} snap rollback --snap {snap-name} {image-name}
rbd snap rollback {pool-name}/{image-name}@{snap-name}
Copy to Clipboard Toggle word wrap

例如:

rbd --pool rbd snap rollback --snap snapname foo
rbd snap rollback rbd/foo@snapname
Copy to Clipboard Toggle word wrap
注意

将镜像回滚到快照意味着使用快照中的数据覆盖镜像的当前版本。执行回滚所需的时间会随着镜像大小的增加而增加。从快照克隆快于将镜像回滚到照要,这是返回到预先存在状态的首选方法。

3.2.4. 删除快照

要使用 rbd 删除快照,请指定 snap rm 选项、池名称、镜像名称和快照名称:

[root@rbd-client ~]# rbd --pool <pool-name> snap rm --snap <snap-name> <image-name>
[root@rbd-client ~]# rbd snap rm <pool-name-/<image-name>@<snap-name>
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd --pool rbd snap rm --snap snapname foo
[root@rbd-client ~]# rbd snap rm rbd/foo@snapname
Copy to Clipboard Toggle word wrap
重要

如果镜像具有任何克隆,克隆的镜像会保留对父镜像快照的引用。要删除父镜像快照,您必须首先扁平化子镜像。详情请参阅 扁平化克隆的镜像

注意

Ceph OSD 守护进程异步删除数据,因此删除快照不会立即释放磁盘空间。

3.2.5. 清除快照

要使用 rbd 删除镜像的所有快照,请指定 snap purge 选项和镜像名称:

[root@rbd-client ~]# rbd --pool {pool-name} snap purge {image-name}
[root@rbd-client ~]# rbd snap purge {pool-name}/{image-name}
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd --pool rbd snap purge foo
[root@rbd-client ~]# rbd snap purge rbd/foo
Copy to Clipboard Toggle word wrap

3.2.6. 重命名快照

重新命名快照:

[root@rbd-client ~]# rbd snap rename <pool-name>/<image-name>@<original-snapshot-name> <pool-name>/<image-name>@<new-snapshot-name>
Copy to Clipboard Toggle word wrap

示例

data 池中 dataset 镜像的 snap1 快照重命名为 snap2

[root@rbd-client ~]# rbd snap rename data/dataset@snap1 data/dataset@snap2
Copy to Clipboard Toggle word wrap

执行 rbd help snap rename 命令,以显示重命名快照的更多详细信息。

3.3. 分层

Ceph 支持创建许多块设备快照的写时复制 (COW) 或读时复制 (COR) 克隆。快照分层使得 Ceph 块设备客户端能够非常快速地创建镜像。例如,您可以使用写入它的 Linux 虚拟机创建块设备镜像;然后,快照,保护快照,并创建尽可能多的克隆。快照是只读的,因此克隆快照可以简化语义-使快速创建克隆成为可能。

注意

术语 parentchild 表示 Ceph 块设备快照(父),以及从快照克隆的对应镜像(子级)。这些术语对于以下命令行用法非常重要。

每个克隆的镜像(子级)存储对其父镜像的引用,这使得克隆的镜像能够打开父快照并读取它。当克隆扁平化时,当快照中的信息完全复制到克隆时,会删除此引用。有关 扁平化 的详情,请参考 第 3.3.6 节 “扁平化克隆的镜像”

快照克隆的行为与任何其他 Ceph 块设备镜像完全相同。您可以读取、写入、克隆和调整克隆的镜像大小。克隆的镜像没有特殊限制。但是,快照的克隆会指向快照,因此在克隆快照前,必须会对其进行保护。

快照的克隆可以是写时复制 (COW) 或读时复制 (COR) 克隆。在必须显式启用读取时复制 (COR) 时,始终为克隆启用写时复制 (COW)。当数据写入到克隆中的未分配对象时,写时复制 (COW) 将数据从父项复制到克隆。当父进程从克隆中未分配的对象读取时,从父进程复制数据到克隆。如果克隆中尚不存在对象,则仅从父项读取数据。RADOS 块设备将大型镜像分成多个对象(默认为 4 MB),所有写时复制(COW)和写时复制(COR)操作发生在完整对象(即向克隆写入 1 字节)操作,如果之前的 COW/COR 操作中不存在目标对象,则会导致从父对象读取 4 MB 对象并写入克隆。

是否启用读取时复制 (COR),任何通过从克隆读取底层对象无法满足的读取都将重新路由到父对象。由于父数量实际上没有限制(这意味着您可以克隆克隆),因此这个重新路由将继续,直到找到对象或您到达基础父镜像。如果启用了读取时复制 (COR),克隆中任何未直接满足的读取会导致从父项读取完整的对象并将该数据写入克隆,以便克隆本身可以满足相同的扩展读取,而无需从父级读取。

这基本上是一个按需、按对象扁平化的操作。当克隆位于来自它的父级(在另一个地理位置的不同池中)的高延迟连接中时,这特别有用。读时复制 (COR) 可降低读分化延迟。前几个读取具有高延迟,因为它将导致从父项读取额外的数据(例如,您从克隆中读取 1 字节,但现在 4 MB 需要从父项读取并写入克隆),但将来的所有读取都将从克隆本身提供。

要从快照创建写时复制(COR)克隆,您必须通过在 ceph.conf 文件的 [global][client] 部分下添加 rbd_clone_copy_on_read = true 来显式启用此功能。

3.3.1. 分层入门

Ceph 块设备分层是一个简单的过程。您必须有一个镜像。您必须创建镜像的快照。您必须保护快照。执行这些步骤后,您可以开始克隆快照。

克隆的镜像具有对父快照的引用,并包含池 ID、镜像 ID 和快照 ID。包含池 ID 意味着您可以将快照从一个池克隆到另一个池中的镜像。

  1. 镜像模板: 块设备分层的常见用例是创建一个 master 镜像和作为克隆的模板的快照。例如,用户可以为 RHEL7 发行版创建镜像,并为其创建快照。用户可以定期更新镜像并创建新快照(如 yum updateyum upgrade,后跟 rbd snap create)。随着镜像竞争,用户可以克隆任何一个快照。
  2. 扩展模板: 更高级的用例包括扩展模板镜像,其提供比基础镜像更多的信息。例如,用户可以克隆镜像(如虚拟机模板),并安装其他软件(如数据库、内容管理系统、分析系统等),然后对扩展的镜像进行快照,就像基础镜像一样更新。
  3. 模板池: 一种使用块设备分层的方法是创建一个池,其中包含用作模板的主镜像,以及这些模板的快照。然后,您可以为用户扩展只读权限,以便他们可以克隆快照,而无需在池中写入或执行。
  4. 镜像迁移/恢复: 一种使用块设备分层的方法是将数据从一个池中迁移或恢复到另一个池中。

3.3.2. 保护快照

克隆访问父快照。如果用户意外删除父快照,则所有克隆都会中断。为防止数据丢失,您必须在 克隆快照 前保护快照。要做到这一点,请运行以下命令:

[root@rbd-client ~]# rbd --pool {pool-name} snap protect --image {image-name} --snap {snapshot-name}
[root@rbd-client ~]# rbd snap protect {pool-name}/{image-name}@{snapshot-name}
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd --pool rbd snap protect --image my-image --snap my-snapshot
[root@rbd-client ~]# rbd snap protect rbd/my-image@my-snapshot
Copy to Clipboard Toggle word wrap
注意

您无法删除受保护的快照。

3.3.3. 克隆快照

要克隆快照,您需要指定父池、镜像和快照;以及子池和镜像名称。您必须保护快照,然后才能克隆快照。要做到这一点,请运行以下命令:

[root@rbd-client ~]# rbd --pool {pool-name} --image {parent-image} --snap {snap-name} --dest-pool {pool-name} --dest {child-image}

[root@rbd-client ~]# rbd clone {pool-name}/{parent-image}@{snap-name}  {pool-name}/{child-image-name}
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd clone rbd/my-image@my-snapshot rbd/new-image
Copy to Clipboard Toggle word wrap
注意

您可以将一个池的快照克隆到另一个池中的镜像。例如,您可以将只读镜像和快照维护为一个池中的模板,并在另一个池中维护可写克隆。

3.3.4. 取消保护快照

您必须先取消保护快照,然后才能删除快照。此外,您不得删除从克隆引用的快照。您必须扁平化快照的每个克隆,然后才能删除快照。要做到这一点,请运行以下命令:

[root@rbd-client ~]#rbd --pool {pool-name} snap unprotect --image {image-name} --snap {snapshot-name}

[root@rbd-client ~]# rbd snap unprotect {pool-name}/{image-name}@{snapshot-name}
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd --pool rbd snap unprotect --image my-image --snap my-snapshot

[root@rbd-client ~]# rbd snap unprotect rbd/my-image@my-snapshot
Copy to Clipboard Toggle word wrap

3.3.5. 列出快照的 Children

要列出快照的子项,请执行以下操作:

rbd --pool {pool-name} children --image {image-name} --snap {snap-name}
rbd children {pool-name}/{image-name}@{snapshot-name}
Copy to Clipboard Toggle word wrap

例如:

rbd --pool rbd children --image my-image --snap my-snapshot
rbd children rbd/my-image@my-snapshot
Copy to Clipboard Toggle word wrap

3.3.6. 扁平化克隆的镜像

克隆的镜像保留对父快照的引用。当您从子克隆中删除引用到父快照时,您有效地通过将信息从快照复制到克隆来"扁平化"镜像。克隆所需的时间随着快照的大小而增加。

要删除与子镜像关联的父镜像快照,您必须首先扁平化子镜像:

[root@rbd-client ~]# rbd --pool <pool-name> flatten --image <image-name>
[root@rbd-client ~]# rbd flatten <pool-name>/<image-name>
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd --pool rbd flatten --image my-image
[root@rbd-client ~]# rbd flatten rbd/my-image
Copy to Clipboard Toggle word wrap

由于扁平化的镜像包含快照的所有信息,因此扁平化的镜像将占用比分层克隆更多的存储空间。

注意

如果镜像上启用 深度扁平化(deep flatten)功能,则默认情况下镜像克隆与其父级解除关联。

第 4 章 块设备镜像

RADOS 块设备(RBD)镜像是在两个或多个 Ceph 集群间异步复制 Ceph 块设备镜像的过程。镜像可确保镜像的所有更改的时间点一致副本,包括读取和写入、块设备调整大小、快照、克隆和扁平化。

镜像使用强制专用锁定和 RBD 日志功能,按照镜像发生的顺序记录对镜像的所有修改。这样可确保镜像的崩溃一致性镜像可用。在将镜像镜像到对等集群前,您必须启用日志。详情请查看 第 4.1 节 “启用日志”

由于它是存储在主池和次要池中与获取镜像的块设备关联的镜像,因此 主池和次要池的 CRUSH 层次结构应具有相同的存储容量和性能特征。另外,主站点和次站点之间的网络连接应该有足够的带宽,以确保镜像在没有太多延迟的情况下进行。

重要

支持镜像块设备镜像的主要和次要池的 CRUSH 层次结构必须具有相同的容量和性能特性,并且必须具有足够的带宽才能确保镜像无延迟。例如,如果您对主集群中的镜像有 X MiB/s 平均写入吞吐量,则网络必须支持到二级站点的网络连接中的 N114 X 吞吐量,再加上 Y% 安全因素来镜像 N 镜像。

镜像主要用于从灾难中恢复。根据您使用的镜像类型,请参阅通过 单向镜像从灾难中恢复,或者通过双向镜像从灾难中恢复https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/3/html-single/block_device_guide/#recovering-from-a-disaster-with-one-way-mirroring-block

rbd-mirror 守护进程

rbd-mirror 守护进程负责将镜像从一个 Ceph 集群同步到另一个集群。

根据复制类型,rbd-mirror 在单个集群或参与镜像的所有集群中运行:

  • 单向复制(One-way Replication)

    • 当数据从主集群镜像到充当备份的二级集群时,rbd-mirror 仅在次要集群中运行。RBD 镜像可能有多个次要站点。
  • 双向复制(Two-way Replication)

    • 双向复制在主集群中添加一个 rbd-mirror 守护进程,使得镜像可以在集群上降级并提升到次要集群中。然后可以对次要群集上的镜像进行更改,然后按照相反方向(从次要到主要)进行复制。两个集群都必须运行 rbd-mirror,才能在任一集群上提升和降级镜像。目前,仅在两个站点间支持双向复制。

rbd-mirror 软件包提供 rbd-mirror

重要

在双向复制中,rbd-mirror 的每个实例必须能够同时连接到其他 Ceph 集群。此外,两个数据中心站点之间网络必须具有足够的带宽才能处理镜像。

警告

仅为每个 Ceph 集群运行单个 rbd-mirror 守护进程。

镜像模式

镜像基于对等集群内的每个池配置。Ceph 支持两种模式,具体取决于池中的镜像是什么:

池模式
启用了日志记录功能的池中的所有镜像都会被镜像(mirror)。详情请查看 配置池镜像
镜像模式
只有池中的特定镜像子集才会被镜像,您必须单独为每个镜像启用镜像(mirror)。详情请查看 配置镜像镜像

镜像状态

镜像是否可以修改取决于其状态:

  • 可以修改处于主要状态的镜像
  • 处于非主要状态的镜像无法修改

镜像在镜像上首次启用镜像时自动提升为主版本。升级可能发生:

可以降级主镜像并提升非主镜像。详情请查看 第 4.3 节 “镜像配置”

4.1. 启用日志

您可以启用 RBD 日志功能:

  • 创建镜像时
  • 在已经存在的镜像上动态
重要

日志取决于必须启用的 exclusive-lock 功能。请查看以下步骤。

要在创建镜像时启用日志,请使用 --image-feature 选项:

rbd create <image-name> --size <megabytes> --pool <pool-name> --image-feature <feature>
Copy to Clipboard Toggle word wrap

例如:

# rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journaling
Copy to Clipboard Toggle word wrap

要在之前创建的镜像上启用日志,请使用 rbd feature enable 命令:

rbd feature enable <pool-name>/<image-name> <feature-name>
Copy to Clipboard Toggle word wrap

例如:

# rbd feature enable data/image1 exclusive-lock
# rbd feature enable data/image1 journaling
Copy to Clipboard Toggle word wrap

要默认在所有新镜像上启用日志,请在 Ceph 配置文件中添加以下设置:

rbd default features = 125
Copy to Clipboard Toggle word wrap

4.2. 池配置

本章演示了如何执行以下任务:

在两个对等集群中执行以下命令。

在池中启用镜像

在池上启用镜像:

rbd mirror pool enable <pool-name> <mode>
Copy to Clipboard Toggle word wrap

例子

启用名为 data 的整个池的镜像:

# rbd mirror pool enable data pool
Copy to Clipboard Toggle word wrap

在名为 data 的池上启用镜像模式镜像:

# rbd mirror pool enable data image
Copy to Clipboard Toggle word wrap

详情请参阅 镜像模式

禁用池中的镜像

在池上禁用镜像:

rbd mirror pool disable <pool-name>
Copy to Clipboard Toggle word wrap

示例

禁用名为 data 的池的镜像:

# rbd mirror pool disable data
Copy to Clipboard Toggle word wrap

在禁用镜像前,删除对等集群。详情请查看 第 4.2 节 “池配置”

注意

当您禁用对池的镜像时,您还会在池中在镜像模式中单独启用镜像的镜像禁用它。详情请参阅 镜像配置

添加 Cluster Peer

要让 rbd-mirror 守护进程发现其对等集群,您必须将 peer 注册到池:

rbd --cluster <cluster-name> mirror pool peer add <pool-name> <peer-client-name>@<peer-cluster-name> -n <client-name>
Copy to Clipboard Toggle word wrap

示例

要将 site-a 集群添加为 site-b 集群的对等点,请从 site-b 集群中的客户端节点运行以下命令:

# rbd --cluster site-b mirror pool peer add data client.site-a@site-a -n client.site-b
Copy to Clipboard Toggle word wrap
查看有关 Peers 的信息

查看对等点的信息:

rbd mirror pool info <pool-name>
Copy to Clipboard Toggle word wrap

示例

# rbd mirror pool info data
Mode: pool
Peers:
  UUID                                 NAME   CLIENT
  7e90b4ce-e36d-4f07-8cbc-42050896825d site-a client.site-a
Copy to Clipboard Toggle word wrap
删除 Cluster Peer

删除镜像对等集群:

rbd mirror pool peer remove <pool-name> <peer-uuid>
Copy to Clipboard Toggle word wrap

指定池名称和同级通用唯一标识符 (UUID)。若要查看对等 UUID,可使用 rbd mirror pool info 命令。

示例

# rbd mirror pool peer remove data 7e90b4ce-e36d-4f07-8cbc-42050896825d
Copy to Clipboard Toggle word wrap
获取池的镜像状态

获取镜像池概述:

rbd mirror pool status <pool-name>
Copy to Clipboard Toggle word wrap

示例

获取 数据池 的状态:

# rbd mirror pool status data
health: OK
images: 1 total
Copy to Clipboard Toggle word wrap

要输出池中每个镜像的状态详情,请使用 --verbose 选项。

4.3. 镜像配置

本章演示了如何执行以下任务:

仅在单个集群中执行以下命令。

启用镜像镜像

启用特定镜像的镜像:

  1. 在两个对等集群中以镜像模式启用整个池的镜像。详情请查看 第 4.2 节 “池配置”
  2. 然后,为池中的特定镜像显式启用镜像:

    rbd mirror image enable <pool-name>/<image-name>
    Copy to Clipboard Toggle word wrap

示例

data 池中的 image2 镜像启用镜像功能:

# rbd mirror image enable data/image2
Copy to Clipboard Toggle word wrap
禁用镜像镜像

禁用特定镜像的镜像:

rbd mirror image disable <pool-name>/<image-name>
Copy to Clipboard Toggle word wrap

示例

禁用 data 池中 image2 镜像的镜像:

# rbd mirror image disable data/image2
Copy to Clipboard Toggle word wrap
镜像提升和降级

将镜像降级为非主要镜像:

rbd mirror image demote <pool-name>/<image-name>
Copy to Clipboard Toggle word wrap

示例

降级 data 池中的 image2 镜像:

# rbd mirror image demote data/image2
Copy to Clipboard Toggle word wrap

将镜像提升为主要步骤:

rbd mirror image promote <pool-name>/<image-name>
Copy to Clipboard Toggle word wrap

示例

提升 data 池中的 image2 镜像:

# rbd mirror image promote data/image2
Copy to Clipboard Toggle word wrap

根据您使用的镜像类型,请参阅通过 单向镜像从灾难中恢复,或者通过双向镜像从灾难中恢复https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/3/html-single/block_device_guide/#recovering-from-a-disaster-with-one-way-mirroring-block

使用 --force 选项强制提升非主镜像:

# rbd mirror image promote --force data/image2
Copy to Clipboard Toggle word wrap

当降级无法传播到对等 Ceph 集群时,请使用强制提升,例如因为集群失败或通信中断。详情请查看 Non-Orderly Shutdown 后故障转移

注意

不要强制提升仍在同步的非主镜像,因为镜像在提升后无效。

镜像重新同步

请求主镜像重新同步:

rbd mirror image resync <pool-name>/<image-name>
Copy to Clipboard Toggle word wrap

示例

请求 data 池中 image2 镜像的重新同步:

# rbd mirror image resync data/image2
Copy to Clipboard Toggle word wrap

如果两个对等集群之间状态不一致,rbd-mirror 守护进程不会尝试镜像导致不一致的镜像。有关修复此问题的详情,请参考从灾难中恢复的部分。根据您使用的镜像类型,请参阅通过 单向镜像从灾难中恢复,或者通过双向镜像从灾难中恢复https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/3/html-single/block_device_guide/#recovering-from-a-disaster-with-one-way-mirroring-block

获取单个镜像的镜像状态

获取已镜像镜像的状态:

rbd mirror image status <pool-name>/<image-name>
Copy to Clipboard Toggle word wrap

示例

获取 data 池中 image2 镜像的状态:

# rbd mirror image status data/image2
image2:
  global_id:   703c4082-100d-44be-a54a-52e6052435a5
  state:       up+replaying
  description: replaying, master_position=[object_number=0, tag_tid=3, entry_tid=0], mirror_position=[object_number=0, tag_tid=3, entry_tid=0], entries_behind_master=0
  last_update: 2019-04-23 13:39:15
Copy to Clipboard Toggle word wrap

4.4. 配置一次性镜像

单向镜像意味着一个集群中的主镜像会在次要集群中复制。在辅助集群中,复制的镜像不是主镜像;即块设备客户端无法写入镜像。

注意

单向镜像支持多个次要站点。要在多个次要站点上配置单向镜像,请在每个次要集群中重复以下步骤。

注意

单向镜像适合维护镜像的崩溃一致性副本。单向镜像可能并不适用于所有情况,如使用次要镜像与 OpenStack 自动故障转移和故障恢复,因为在使用单向镜像时集群无法故障恢复。在这些情况下,使用双向镜像。详情请查看 第 4.5 节 “配置两个镜像功能”

以下流程假设:

  • 您有两个集群,您想要将镜像从主集群复制到二级集群。就这个过程而言,我们将把主镜像作为 site-a 集群和您要复制镜像的集群作为 site-b 集群来区分两个集群。有关安装 Ceph 存储集群的详情,请参考 Red Hat Enterprise Linux 安装指南Ubuntu 安装指南
  • site-b 集群附加了一个客户端节点,其中 rbd-mirror 守护进程将运行。此守护进程将连接到 site-a 集群,将镜像同步到 site-b 集群。有关安装 Ceph 客户端的详情,请参考 Red Hat Enterprise Linux 安装指南 或 Ubuntu 安装指南
  • 两个集群中都创建具有相同名称的池。在以下示例中,池命名为 data。详情请参阅 存储策略指南中的 章节 或 Red Hat Ceph Storage 3。
  • 该池包含您要镜像的镜像,并在它们上启用日志。在以下示例中,镜像名为 image1image2。详情请参阅 启用日志

配置块设备镜像的方法有两种:

  • 池镜像 :要镜像池中的所有镜像,请使用 配置池镜像 流程。
  • 镜像镜像 : 要在池中镜像选择镜像,请使用 配置镜像镜像 流程。

配置池镜像

  1. 确保 数据池 中的所有镜像都启用了专用锁定和日志。详情请查看 第 4.1 节 “启用日志”
  2. site-b 集群的客户端节点上,安装 rbd-mirror 软件包。软件包由 Red Hat Ceph Storage 3 Tools 存储库提供。

    Red Hat Enterprise Linux

    # yum install rbd-mirror
    Copy to Clipboard Toggle word wrap

    Ubuntu

    $ sudo apt-get install rbd-mirror
    Copy to Clipboard Toggle word wrap
  3. site-b 集群的客户端节点上,通过在适当的文件中添加 CLUSTER 选项来指定集群名称。在 Red Hat Enterprise Linux 上,更新 /etc/sysconfig/ceph 文件,并在 Ubuntu 中相应地更新 /etc/default/ceph 文件:

    CLUSTER=site-b
    Copy to Clipboard Toggle word wrap
  4. 在这两个集群中,创建具有访问 数据池 权限的用户,并将其密钥环输出到 < cluster-name>.client.<user-name>.keyring 文件。

    1. site-a 集群中的 monitor 主机上,创建 client.site-a 用户,并将密钥环输出到 site-a.client.site-a.keyring 文件:

      # ceph auth get-or-create client.site-a mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-a.client.site-a.keyring
      Copy to Clipboard Toggle word wrap
    2. site-b 集群中的 monitor 主机上,创建 client.site-b 用户,并将密钥环输出到 site-b.client.site-b.keyring 文件:

      # ceph auth get-or-create client.site-b mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-b.client.site-b.keyring
      Copy to Clipboard Toggle word wrap
  5. 将 Ceph 配置文件和新创建的 RBD 密钥环文件从 site-a 监控节点复制到 site-b 监控和客户端节点:

    # scp /etc/ceph/ceph.conf <user>@<site-b_mon-host-name>:/etc/ceph/site-a.conf
    # scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-b_mon-host-name>:/etc/ceph/
    
    # scp /etc/ceph/ceph.conf <user>@<site-b_client-host-name>:/etc/ceph/site-a.conf
    # scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-b_client-host-name>:/etc/ceph/
    Copy to Clipboard Toggle word wrap
    注意

    将 Ceph 配置文件从 site-a 监控节点传输到 site-b 监视器和客户端节点的 scp 命令,将文件重命名为 site-a.conf。密钥环文件名保持不变。

  6. site-b 集群客户端节点上创建一个名为 site-b.conf 的符号链接,指向 ceph.conf

    # cd /etc/ceph
    # ln -s ceph.conf site-b.conf
    Copy to Clipboard Toggle word wrap
  7. site-b 客户端节点上启用并启动 rbd-mirror 守护进程:

    systemctl enable ceph-rbd-mirror.target
    systemctl enable ceph-rbd-mirror@<client-id>
    systemctl start ceph-rbd-mirror@<client-id>
    Copy to Clipboard Toggle word wrap

    <client-id > 更改为 rbd-mirror 守护进程要使用的 Ceph Storage 集群用户。用户必须具有对集群的适当 cephx 访问权限。如需更多信息,请参阅 Red Hat Ceph Storage 3 管理指南中的用户管理一 章。

    根据使用 site-b 的前导示例,运行以下命令:

    # systemctl enable ceph-rbd-mirror.target
    # systemctl enable ceph-rbd-mirror@site-b
    # systemctl start ceph-rbd-mirror@site-b
    Copy to Clipboard Toggle word wrap
  8. site-a 集群的监控节点上运行以下命令来启用位于 site-a 集群上的 数据池 镜像:

    # rbd mirror pool enable data pool
    Copy to Clipboard Toggle word wrap

    确保成功启用了镜像:

    # rbd mirror pool info data
    Mode: pool
    Peers: none
    Copy to Clipboard Toggle word wrap
  9. site-b 集群中的客户端节点运行以下命令来将 site-a 集群添加为 site-b 集群的对等点:

    # rbd --cluster site-b mirror pool peer add data client.site-a@site-a -n client.site-b
    Copy to Clipboard Toggle word wrap

    确保已成功添加 peer:

    # rbd mirror pool info data
    Mode: pool
    Peers:
      UUID                                 NAME   CLIENT
      7e90b4ce-e36d-4f07-8cbc-42050896825d site-a client.site-a
    Copy to Clipboard Toggle word wrap
  10. 一段时间后,检查 image1image2 镜像的状态。如果它们处于 up+replaying 状态,则镜像可以正常工作。从 site-b 集群中的监控节点运行以下命令:

    # rbd mirror image status data/image1
    image1:
      global_id:   7d486c3f-d5a1-4bee-ae53-6c4f1e0c8eac
      state:       up+replaying
      description: replaying, master_position=[object_number=3, tag_tid=1, entry_tid=3], mirror_position=[object_number=3, tag_tid=1, entry_tid=3], entries_behind_master=0
      last_update: 2019-04-22 13:19:27
    Copy to Clipboard Toggle word wrap
    # rbd mirror image status data/image2
    image2:
      global_id:   703c4082-100d-44be-a54a-52e6052435a5
      state:       up+replaying
      description: replaying, master_position=[object_number=3, tag_tid=1, entry_tid=3], mirror_position=[], entries_behind_master=3
      last_update: 2019-04-22 13:19:19
    Copy to Clipboard Toggle word wrap

配置镜像镜像

  1. 确保 数据 池中的所选镜像启用了专用锁定和日志。详情请查看 第 4.1 节 “启用日志”
  2. 按照 配置池镜像 步骤中的步骤 2 - 7。
  3. site-a 集群中的监控节点中,启用 数据池 的镜像镜像:

    # rbd mirror pool enable data image
    Copy to Clipboard Toggle word wrap

    确保成功启用了镜像:

    # rbd mirror pool info data
    Mode: image
    Peers: none
    Copy to Clipboard Toggle word wrap
  4. site-b 集群上的客户端节点中,将 site-a 集群添加为对等集群:

    # rbd --cluster site-b mirror pool peer add data client.site-a@site-a -n client.site-b
    Copy to Clipboard Toggle word wrap

    确保已成功添加 peer:

    # rbd mirror pool info data
    Mode: image
    Peers:
      UUID                                 NAME   CLIENT
      9c1da891-b9f4-4644-adee-6268fe398bf1 site-a client.site-a
    Copy to Clipboard Toggle word wrap
  5. site-a 集群的监控节点中,明确启用 image1image2 镜像的镜像镜像:

    # rbd mirror image enable data/image1
    Mirroring enabled
    # rbd mirror image enable data/image2
    Mirroring enabled
    Copy to Clipboard Toggle word wrap
  6. 一段时间后,检查 image1image2 镜像的状态。如果它们处于 up+replaying 状态,则镜像可以正常工作。从 site-b 集群中的监控节点运行以下命令:

    # rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+replaying
      description: replaying, master_position=[object_number=3, tag_tid=1, entry_tid=3], mirror_position=[object_number=3, tag_tid=1, entry_tid=3], entries_behind_master=0
      last_update: 2019-04-12 17:24:04
    Copy to Clipboard Toggle word wrap
    # rbd mirror image status data/image2
    image2:
      global_id:   596f41bc-874b-4cd4-aefe-4929578cc834
      state:       up+replaying
      description: replaying, master_position=[object_number=3, tag_tid=1, entry_tid=3], mirror_position=[object_number=3, tag_tid=1, entry_tid=3], entries_behind_master=0
      last_update: 2019-04-12 17:23:51
    Copy to Clipboard Toggle word wrap

4.5. 配置两个镜像功能

双向镜像允许您在两个集群之间以任一方向复制镜像。它不允许您从任一集群中写入同一镜像,并更改传播。镜像从集群提升或降级,以更改从中写入的位置,以及它同步的位置。

以下流程假设:

  • 您有两个集群,您想要以任一方向在它们间复制镜像。在以下示例中,集群被称为 site-asite-b 集群。有关安装 Ceph 存储集群的详情,请参考 Red Hat Enterprise Linux 安装指南Ubuntu 安装指南
  • 两个集群都附加了运行 rbd-mirror 守护进程的客户端节点。site-b 集群上的守护进程将连接到 site-a 集群,将镜像同步到 site-b,而 site-a 集群上的守护进程将连接到 site-b 集群,将镜像同步到 site-a。有关安装 Ceph 客户端的详情,请参考 Ubuntu 的 Red Hat Enterprise Linux 或安装指南
  • 两个集群中都创建具有相同名称的池。在以下示例中,池命名为 data。详情请参阅 存储策略指南中的 章节 或 Red Hat Ceph Storage 3。
  • 该池包含您要镜像的镜像,并在它们上启用日志。在以下示例中,镜像名为 image1image2。详情请参阅 启用日志

配置块设备镜像的方法有两种:

  • 池镜像 :要镜像池中的所有镜像,请遵循下面立即 配置池镜像
  • 镜像镜像 : 要在池中镜像选择镜像,请遵循 配置镜像镜像(mirror )。

配置池镜像

  1. 确保 数据池 中的所有镜像都启用了专用锁定和日志。详情请查看 第 4.1 节 “启用日志”
  2. 按照配置单向镜像 中的等同的 配置池部分中的第 2 - 7 步设置镜像 ( mirror)的方法
  3. site-a 集群的客户端节点上,安装 rbd-mirror 软件包。软件包由 Red Hat Ceph Storage 3 Tools 存储库提供。

    Red Hat Enterprise Linux

    # yum install rbd-mirror
    Copy to Clipboard Toggle word wrap

    Ubuntu

    $ sudo apt-get install rbd-mirror
    Copy to Clipboard Toggle word wrap
  4. site-a 集群的客户端节点上,通过在适当的文件中添加 CLUSTER 选项来指定集群名称。在 Red Hat Enterprise Linux 上,更新 /etc/sysconfig/ceph 文件,并在 Ubuntu 中相应地更新 /etc/default/ceph 文件:

    CLUSTER=site-a
    Copy to Clipboard Toggle word wrap
  5. site-b Ceph 配置文件和 RBD 密钥环文件从 site-b 监控器复制到 site-a 监控和客户端节点:

    # scp /etc/ceph/ceph.conf <user>@<site-a_mon-host-name>:/etc/ceph/site-b.conf
    # scp /etc/ceph/site-b.client.site-b.keyring root@<site-a_mon-host-name>:/etc/ceph/
    # scp /etc/ceph/ceph.conf user@<site-a_client-host-name>:/etc/ceph/site-b.conf
    # scp /etc/ceph/site-b.client.site-b.keyring user@<site-a_client-host-name>:/etc/ceph/
    Copy to Clipboard Toggle word wrap
    注意

    将 Ceph 配置文件从 site-b 监控节点传输到 site-a 监控和客户端节点的 scp 命令,将文件重命名为 site-b.conf。密钥环文件名保持不变。

  6. site-a RBD 密钥环文件从 site-a 监控节点复制到 site-a 客户端节点:

    # scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-a_client-host-name>:/etc/ceph/
    Copy to Clipboard Toggle word wrap
  7. site-a 集群客户端节点上创建一个名为 site-a.conf 的符号链接,指向 ceph.conf

    # cd /etc/ceph
    # ln -s ceph.conf site-a.conf
    Copy to Clipboard Toggle word wrap
  8. site-a 客户端节点上启用并启动 rbd-mirror 守护进程:

    systemctl enable ceph-rbd-mirror.target
    systemctl enable ceph-rbd-mirror@<client-id>
    systemctl start ceph-rbd-mirror@<client-id>
    Copy to Clipboard Toggle word wrap

    其中 <client-id > 是 rbd-mirror 守护进程将使用的 Ceph Storage 集群用户。用户必须具有对集群的适当 cephx 访问权限。如需更多信息,请参阅 Red Hat Ceph Storage 3 管理指南中的用户管理一 章。

    根据使用 site-a 的前导示例,运行以下命令:

    # systemctl enable ceph-rbd-mirror.target
    # systemctl enable ceph-rbd-mirror@site-a
    # systemctl start ceph-rbd-mirror@site-a
    Copy to Clipboard Toggle word wrap
  9. site-b 集群的监控节点上运行以下命令来启用位于 site-b 集群上的 数据池 镜像:

    # rbd mirror pool enable data pool
    Copy to Clipboard Toggle word wrap

    确保成功启用了镜像:

    # rbd mirror pool info data
    Mode: pool
    Peers: none
    Copy to Clipboard Toggle word wrap
  10. site-a 集群中的客户端节点运行以下命令来将 site-b 集群添加为 site-a 集群的对等点:

    # rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-a
    Copy to Clipboard Toggle word wrap

    确保已成功添加 peer:

    # rbd mirror pool info data
    Mode: pool
    Peers:
      UUID                                 NAME   CLIENT
      dc97bd3f-869f-48a5-9f21-ff31aafba733 site-b client.site-b
    Copy to Clipboard Toggle word wrap
  11. site-a 集群上的客户端节点检查镜像状态。

    # rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-16 15:45:31
    Copy to Clipboard Toggle word wrap
    # rbd mirror image status data/image2
    image1:
      global_id:   596f41bc-874b-4cd4-aefe-4929578cc834
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-16 15:55:33
    Copy to Clipboard Toggle word wrap

    镜像应处于 up+stopped 状态。在这里,up 表示 rbd-mirror 守护进程正在运行,stopped 意味着镜像不是从另一集群复制的目标。这是因为镜像是这个集群上的主要镜像。

    注意

    在以前的版本中,当设置单向镜像时,将镜像配置为复制到 site-b。这可以通过在 site-b 客户端节点上安装 rbd-mirror 来实现,以便它可以从 site-a 升级到 site-b。此时,site-a 集群已准备好镜像到,但镜像不处于需要它的状态。如果 site-a 上的镜像被降级且 site-b 上的镜像被提升,则以其他方向进行镜像。有关如何提升和降级镜像的详情,请参考 镜像配置

配置镜像镜像

  1. 如果尚未设置镜像,则设置一个镜像。

  2. 按照配置两个镜像 中的 配置池镜像一节中的 第 3 - 7 步操作。本节位于上面。
  3. site-a 集群中的客户端节点运行以下命令来将 site-b 集群添加为 site-a 集群的对等点:

    # rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-a
    Copy to Clipboard Toggle word wrap

    确保已成功添加 peer:

    # rbd mirror pool info data
    Mode: pool
    Peers:
      UUID                                 NAME   CLIENT
      dc97bd3f-869f-48a5-9f21-ff31aafba733 site-b client.site-b
    Copy to Clipboard Toggle word wrap
  4. site-a 集群上的客户端节点检查镜像状态。

    # rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-16 15:45:31
    Copy to Clipboard Toggle word wrap
    # rbd mirror image status data/image2
    image1:
      global_id:   596f41bc-874b-4cd4-aefe-4929578cc834
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-16 15:55:33
    Copy to Clipboard Toggle word wrap

    镜像应处于 up+stopped 状态。在这里,up 表示 rbd-mirror 守护进程正在运行,stopped 意味着镜像不是从另一集群复制的目标。这是因为镜像是这个集群上的主要镜像。

    注意

    在以前的版本中,当设置单向镜像时,将镜像配置为复制到 site-b。这可以通过在 site-b 客户端节点上安装 rbd-mirror 来实现,以便它可以从 site-a 升级到 site-b。此时,site-a 集群已准备好镜像到,但镜像不处于需要它的状态。如果 site-a 上的镜像被降级且 site-b 上的镜像被提升,则以其他方向进行镜像。有关如何提升和降级镜像的详情,请参考 镜像配置

4.6. 延迟复制

无论您使用的是单向复制还是双向复制,您都可以延迟 RADOS 块设备 (RBD) 镜像镜像之间的复制。如果您要在复制到次要镜像之前恢复对主镜像的更改,您可能需要实施延迟复制。

要实现延迟复制,目标集群中的 rbd-mirror 守护进程应该设置 rbd mirror replay delay = <minimum delay in seconds&gt; 配置设置。此设置可以在 rbd-mirror 守护进程使用的 ceph.conf 文件中全局应用,也可以在单个镜像基础上应用。

要使用特定镜像的延迟复制,在主镜像上运行以下 rbd CLI 命令:

rbd image-meta set  <image-spec> conf_rbd_mirroring_replay_delay <minimum delay in seconds>
Copy to Clipboard Toggle word wrap

例如,要在池 vms 中的镜像 vm-1 上设置 10 分钟最小复制延迟:

rbd image-meta set vms/vm-1 conf_rbd_mirroring_replay_delay 600
Copy to Clipboard Toggle word wrap

4.7. 使用单向镜像从灾难中恢复

要使用单向镜像功能,可以从灾难中恢复,请使用以下步骤:它们演示了如何在主集群终止后切换到次要集群,以及如何故障恢复。关闭可以按照一定顺序进行,也可以不按照一定顺序进行。

在以下示例中,主集群称为 site-a 集群,辅助集群称为 site-b 集群。此外,集群同时有一个含有两个镜像、image1image2 的数据池。

重要

单向镜像支持多个次要站点。如果使用额外的次集群,请选择一个二级集群来切换到它。在故障恢复期间从同一集群同步。

先决条件

顺序关闭后故障转移

  1. 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。请参阅 Red Hat OpenStack Platform 13 存储指南中的 块存储和 章节。
  2. site-a 集群中的监控节点中运行以下命令来降级位于 site-a 集群中的主镜像:

    # rbd mirror image demote data/image1
    # rbd mirror image demote data/image2
    Copy to Clipboard Toggle word wrap
  3. site-b 集群中的监控节点中运行以下命令来提升位于 site-b 集群中的非主镜像:

    # rbd mirror image promote data/image1
    # rbd mirror image promote data/image2
    Copy to Clipboard Toggle word wrap
  4. 经过一段时间后,检查 site-b 集群中监控节点中的镜像状态。它们应当显示 up+stopped 状态,描述应该显示 状态:

    # rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-17 13:18:36
    # rbd mirror image status data/image2
    image2:
      global_id:   596f41bc-874b-4cd4-aefe-4929578cc834
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-17 13:18:36
    Copy to Clipboard Toggle word wrap

Non-Orderly Shutdown 后故障转移

  1. 验证主集群是否已停机。
  2. 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。请参阅 Red Hat OpenStack Platform 10 存储指南中的 块存储和卷 章节。
  3. site-b 集群中的监控节点提升非主镜像。使用 --force 选项,因为降级无法传播到 site-a 集群:

    # rbd mirror image promote --force data/image1
    # rbd mirror image promote --force data/image2
    Copy to Clipboard Toggle word wrap
  4. 检查 site-b 集群中监控节点的镜像状态。它们应当显示 up+stopping_replay 状态,描述应显示 force promoted

    # rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopping_replay
      description: force promoted
      last_update: 2019-04-17 13:25:06
    # rbd mirror image status data/image2
    image2:
      global_id:   596f41bc-874b-4cd4-aefe-4929578cc834
      state:       up+stopping_replay
      description: force promoted
      last_update: 2019-04-17 13:25:06
    Copy to Clipboard Toggle word wrap

准备故障恢复

当以前的主集群恢复时,无法将其恢复。

如果两个集群最初只配置为单向镜像,则必须配置主集群以进行镜像,以便按照相反方向复制镜像。

  1. site-a 集群的客户端节点上,安装 rbd-mirror 软件包。软件包由 Red Hat Ceph Storage 3 Tools 存储库提供。

    Red Hat Enterprise Linux

    # yum install rbd-mirror
    Copy to Clipboard Toggle word wrap

    Ubuntu

    $ sudo apt-get install rbd-mirror
    Copy to Clipboard Toggle word wrap
  2. site-a 集群的客户端节点上,通过在适当的文件中添加 CLUSTER 选项来指定集群名称。在 Red Hat Enterprise Linux 上,更新 /etc/sysconfig/ceph 文件,并在 Ubuntu 中相应地更新 /etc/default/ceph 文件:

    CLUSTER=site-b
    Copy to Clipboard Toggle word wrap
  3. site-b Ceph 配置文件和 RBD 密钥环文件从 site-b 监控器复制到 site-a 监控和客户端节点:

    # scp /etc/ceph/ceph.conf <user>@<site-a_mon-host-name>:/etc/ceph/site-b.conf
    # scp /etc/ceph/site-b.client.site-b.keyring root@<site-a_mon-host-name>:/etc/ceph/
    # scp /etc/ceph/ceph.conf user@<site-a_client-host-name>:/etc/ceph/site-b.conf
    # scp /etc/ceph/site-b.client.site-b.keyring user@<site-a_client-host-name>:/etc/ceph/
    Copy to Clipboard Toggle word wrap
    注意

    将 Ceph 配置文件从 site-b 监控节点传输到 site-a 监控和客户端节点的 scp 命令,将文件重命名为 site-a.conf。密钥环文件名保持不变。

  4. site-a RBD 密钥环文件从 site-a 监控节点复制到 site-a 客户端节点:

    # scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-a_client-host-name>:/etc/ceph/
    Copy to Clipboard Toggle word wrap
  5. site-a 客户端节点上启用并启动 rbd-mirror 守护进程:

    systemctl enable ceph-rbd-mirror.target
    systemctl enable ceph-rbd-mirror@<client-id>
    systemctl start ceph-rbd-mirror@<client-id>
    Copy to Clipboard Toggle word wrap

    <client-id > 更改为 rbd-mirror 守护进程要使用的 Ceph Storage 集群用户。用户必须具有对集群的适当 cephx 访问权限。如需更多信息,请参阅 Red Hat Ceph Storage 3 管理指南中的用户管理一 章。

    根据使用 site-a 的前导示例,命令将是:

    # systemctl enable ceph-rbd-mirror.target
    # systemctl enable ceph-rbd-mirror@site-a
    # systemctl start ceph-rbd-mirror@site-a
    Copy to Clipboard Toggle word wrap
  6. site-a 集群的客户端节点中,将 site-b 集群添加为对等集群:

    # rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-a
    Copy to Clipboard Toggle word wrap

    如果您使用多个次要集群,则必须添加选择故障转移到的二级集群,并从中恢复。

  7. site-a 集群中的一个监控节点中,验证 site-b 集群是否已成功添加为对等集群:

    # rbd mirror pool info -p data
    Mode: image
    Peers:
      UUID                                 NAME   CLIENT
      d2ae0594-a43b-4c67-a167-a36c646e8643 site-b client.site-b
    Copy to Clipboard Toggle word wrap

failback

当以前的主集群恢复时,无法将其恢复。

  1. site-a 集群中的监控节点中确定镜像是否仍然是主镜像:

    # rbd info data/image1
    # rbd info data/image2
    Copy to Clipboard Toggle word wrap

    在命令的输出中,查找 mirroring primary: truemirroring primary: false 以确定状态。

  2. site-a 集群中的监控节点运行以下命令来降级列为主镜像:

    # rbd mirror image demote data/image1
    Copy to Clipboard Toggle word wrap
  3. 如果未按顺序关闭,则仅重新同步镜像。在 site-a 集群的监控节点上运行以下命令,以重新同步从 site-bsite-a 的镜像:

    # rbd mirror image resync data/image1
    Flagged image for resync from primary
    # rbd mirror image resync data/image2
    Flagged image for resync from primary
    Copy to Clipboard Toggle word wrap
    1. 一段时间后,通过验证镜像是否处于 up+replaying 状态确保完成镜像重新同步。通过在 site-a 集群中的监控节点上运行以下命令来检查其状态:

      # rbd mirror image status data/image1
      # rbd mirror image status data/image2
      Copy to Clipboard Toggle word wrap
  4. site-b 集群的监控节点中运行以下命令来降级 site-b 集群中的镜像:

    # rbd mirror image demote data/image1
    # rbd mirror image demote data/image2
    Copy to Clipboard Toggle word wrap
    注意

    如果有多个次要集群,则只需要从提升它的二级集群完成。

  5. site-a 集群的监控节点上运行以下命令来提升位于 site-a 集群上的以前主镜像:

    # rbd mirror image promote data/image1
    # rbd mirror image promote data/image2
    Copy to Clipboard Toggle word wrap
  6. 检查 site-a 集群中监控节点的镜像状态。它们应当显示 up+stopped 状态,描述应该为 local image is primary:

    # rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-22 11:14:51
    # rbd mirror image status data/image2
    image2:
      global_id:   596f41bc-874b-4cd4-aefe-4929578cc834
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-22 11:14:51
    Copy to Clipboard Toggle word wrap

删除双向镜像

在上面的 准备故障恢复 部分中,将双向镜像功能配置为启用从 site-b 集群到 site-a 集群的同步。在故障恢复完成后,可以禁用这些功能。

  1. site-a 集群中删除 site-b 集群作为对等集群:

    $ rbd mirror pool peer remove data client.remote@remote --cluster local
    # rbd --cluster site-a mirror pool peer remove data client.site-b@site-b -n client.site-a
    Copy to Clipboard Toggle word wrap
  2. site-a 客户端中停止并禁用 rbd-mirror 守护进程:

    systemctl stop ceph-rbd-mirror@<client-id>
    systemctl disable ceph-rbd-mirror@<client-id>
    systemctl disable ceph-rbd-mirror.target
    Copy to Clipboard Toggle word wrap

    例如:

    # systemctl stop ceph-rbd-mirror@site-a
    # systemctl disable ceph-rbd-mirror@site-a
    # systemctl disable ceph-rbd-mirror.target
    Copy to Clipboard Toggle word wrap

4.8. 使用双向镜像从灾难中恢复

要使用双向镜像功能,可以从灾难中恢复,请使用以下步骤:它们演示了如何在主集群终止后切换到次要集群中的镜像数据,以及如何故障恢复。关闭可以按照一定顺序进行,也可以不按照一定顺序进行。

在以下示例中,主集群称为 site-a 集群,辅助集群称为 site-b 集群。此外,集群同时有一个含有两个镜像、image1image2 的数据池。

先决条件

顺序关闭后故障转移

  1. 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。请参阅 Red Hat OpenStack Platform 10 存储指南中的 块存储和卷 章节。
  2. site-a 集群中的监控节点中运行以下命令来降级位于 site-a 集群中的主镜像:

    # rbd mirror image demote data/image1
    # rbd mirror image demote data/image2
    Copy to Clipboard Toggle word wrap
  3. site-b 集群中的监控节点中运行以下命令来提升位于 site-b 集群中的非主镜像:

    # rbd mirror image promote data/image1
    # rbd mirror image promote data/image2
    Copy to Clipboard Toggle word wrap
  4. 经过一段时间后,检查 site-b 集群中监控节点中的镜像状态。它们应当显示 up+stopped 状态,并列为主要状态:

    # rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-17 16:04:37
    # rbd mirror image status data/image2
    image2:
      global_id:   596f41bc-874b-4cd4-aefe-4929578cc834
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-17 16:04:37
    Copy to Clipboard Toggle word wrap
  5. 恢复对镜像的访问。此步骤取决于哪些客户端使用该镜像。

Non-Orderly Shutdown 后故障转移

  1. 验证主集群是否已停机。
  2. 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。请参阅 Red Hat OpenStack Platform 10 存储指南中的 块存储和卷 章节。
  3. site-b 集群中的监控节点提升非主镜像。使用 --force 选项,因为降级无法传播到 site-a 集群:

    # rbd mirror image promote --force data/image1
    # rbd mirror image promote --force data/image2
    Copy to Clipboard Toggle word wrap
  4. 检查 site-b 集群中监控节点的镜像状态。它们应当显示 up+stopping_replay 状态,描述应显示 force promoted

    # rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopping_replay
      description: force promoted
      last_update: 2019-04-17 13:25:06
    # rbd mirror image status data/image2
    image2:
      global_id:   596f41bc-874b-4cd4-aefe-4929578cc834
      state:       up+stopping_replay
      description: force promoted
      last_update: 2019-04-17 13:25:06
    Copy to Clipboard Toggle word wrap

failback

当以前的主集群恢复时,无法将其恢复。

  1. 再次检查 site-b 集群中监控节点的镜像状态。它们应该显示 up-stopped 状态,描述应该会指出 local image is primary

    # rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-22 17:37:48
    # rbd mirror image status data/image2
    image2:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-22 17:38:18
    Copy to Clipboard Toggle word wrap
  2. site-a 集群中的监控节点中确定镜像是否仍然是主镜像:

    # rbd info data/image1
    # rbd info data/image2
    Copy to Clipboard Toggle word wrap

    在命令的输出中,查找 mirroring primary: truemirroring primary: false 以确定状态。

  3. site-a 集群中的监控节点运行以下命令来降级列为主镜像:

    # rbd mirror image demote data/image1
    Copy to Clipboard Toggle word wrap
  4. 如果未按顺序关闭,则仅重新同步镜像。在 site-a 集群的监控节点上运行以下命令,以重新同步从 site-bsite-a 的镜像:

    # rbd mirror image resync data/image1
    Flagged image for resync from primary
    # rbd mirror image resync data/image2
    Flagged image for resync from primary
    Copy to Clipboard Toggle word wrap
  5. 一段时间后,通过验证镜像是否处于 up+replaying 状态确保完成镜像重新同步。通过在 site-a 集群中的监控节点上运行以下命令来检查其状态:

    # rbd mirror image status data/image1
    # rbd mirror image status data/image2
    Copy to Clipboard Toggle word wrap
  6. site-b 集群的监控节点中运行以下命令来降级 site-b 集群中的镜像:

    # rbd mirror image demote data/image1
    # rbd mirror image demote data/image2
    Copy to Clipboard Toggle word wrap
    注意

    如果有多个次要集群,则只需要从提升它的二级集群完成。

  7. site-a 集群的监控节点上运行以下命令来提升位于 site-a 集群上的以前主镜像:

    # rbd mirror image promote data/image1
    # rbd mirror image promote data/image2
    Copy to Clipboard Toggle word wrap
  8. 检查 site-a 集群中监控节点的镜像状态。它们应当显示 up+stopped 状态,描述应该为 local image is primary:

    # rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-22 11:14:51
    # rbd mirror image status data/image2
    image2:
      global_id:   596f41bc-874b-4cd4-aefe-4929578cc834
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-22 11:14:51
    Copy to Clipboard Toggle word wrap

4.9. 使用镜像更新实例

当使用带有异步更新的 Ceph 块设备镜像更新集群时,请按照更新的安装说明操作。然后,重新启动 Ceph 块设备实例。

注意

在重启实例时不需要按照一定顺序进行。红帽建议重启实例,使其指向主镜像池,然后实例指向镜像池。

第 5 章 Librbd (Python)

rbd python 模块提供对 RBD 镜像的类文件访问。要使用此内置工具,必须导入 rbdrados 模块。

创建并写入镜像

  1. 连接到 RADOS 并打开 IO 上下文:

    cluster = rados.Rados(conffile='my_ceph.conf')
    cluster.connect()
    ioctx = cluster.open_ioctx('mypool')
    Copy to Clipboard Toggle word wrap
  2. 实例化一个 :class:rbd.RBD 对象,用于创建镜像:

    rbd_inst = rbd.RBD()
    size = 4 * 1024**3  # 4 GiB
    rbd_inst.create(ioctx, 'myimage', size)
    Copy to Clipboard Toggle word wrap
  3. 要在镜像上执行 I/O,请实例化一个 :class:rbd.Image 对象:

    image = rbd.Image(ioctx, 'myimage')
    data = 'foo' * 200
    image.write(data, 0)
    Copy to Clipboard Toggle word wrap

    这会将"foo"写入镜像的前 600 字节。请注意,数据不能是 :type:unicode - librbd 不知道如何处理比 :c:type:char 更宽的字符。

  4. 关闭镜像、IO 上下文和与 RADOS 的连接:

    image.close()
    ioctx.close()
    cluster.shutdown()
    Copy to Clipboard Toggle word wrap

    为了安全起见,每个调用都必须位于单独的 :finally 中 :

    import rados
    import rbd
    
    cluster = rados.Rados(conffile='my_ceph_conf')
    try:
        ioctx = cluster.open_ioctx('my_pool')
        try:
            rbd_inst = rbd.RBD()
            size = 4 * 1024**3  # 4 GiB
            rbd_inst.create(ioctx, 'myimage', size)
            image = rbd.Image(ioctx, 'myimage')
            try:
                data = 'foo' * 200
                image.write(data, 0)
            finally:
                image.close()
        finally:
            ioctx.close()
    finally:
        cluster.shutdown()
    Copy to Clipboard Toggle word wrap

    这可能会有问题,RadosIoctxImage 类可以用作自动关闭或关闭的上下文管理器。使用它们作为上下文管理器时,上述示例如下:

    with rados.Rados(conffile='my_ceph.conf') as cluster:
        with cluster.open_ioctx('mypool') as ioctx:
            rbd_inst = rbd.RBD()
            size = 4 * 1024**3  # 4 GiB
            rbd_inst.create(ioctx, 'myimage', size)
            with rbd.Image(ioctx, 'myimage') as image:
                data = 'foo' * 200
                image.write(data, 0)
    Copy to Clipboard Toggle word wrap

第 6 章 内核模块操作

重要

要使用内核模块操作,您必须有一个正在运行的 Ceph 集群。

重要

Linux 发行版上的客户端从 Red Hat Enterprise Linux (RHEL)以外被允许,但不受支持。如果使用这些客户端时,集群中发现的问题(例如 MDS),红帽会解决这些问题,但如果发现原因位于客户端端,则该问题必须由内核供应商解决。

6.1. 获取镜像列表

要挂载块设备镜像,首先返回镜像列表。

要做到这一点,请执行以下操作:

[root@rbd-client ~]# rbd list
Copy to Clipboard Toggle word wrap

6.2. 映射块设备

使用 rbd 将镜像名称映射到内核模块。您必须指定镜像名称、池名称和用户名。RBD 将加载 RBD 内核模块(如果尚未加载)。

要做到这一点,请执行以下操作:

[root@rbd-client ~]# rbd map {image-name} --pool {pool-name} --id {user-name}
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd map --pool rbd myimage --id admin
Copy to Clipboard Toggle word wrap

如果使用 cephx 身份验证,还必须指定一个 secret。它可以来自密钥环或包含机密的文件。

要做到这一点,请执行以下操作:

[root@rbd-client ~]# rbd map --pool rbd myimage --id admin --keyring /path/to/keyring
[root@rbd-client ~]# rbd map --pool rbd myimage --id admin --keyfile /path/to/file
Copy to Clipboard Toggle word wrap

6.3. 显示映射的块设备

要使用 rbd 命令显示映射到内核模块的块设备镜像,请指定 showmapped 选项。

要做到这一点,请执行以下操作:

[root@rbd-client ~]# rbd showmapped
Copy to Clipboard Toggle word wrap

6.4. 取消映射块设备

要使用 rbd 命令取消映射块设备镜像,请指定 unmap 选项和设备名称(与块设备镜像名称相同)。

要做到这一点,请执行以下操作:

[root@rbd-client ~]# rbd unmap /dev/rbd/{poolname}/{imagename}
Copy to Clipboard Toggle word wrap

例如:

[root@rbd-client ~]# rbd unmap /dev/rbd/rbd/foo
Copy to Clipboard Toggle word wrap

第 7 章 块设备配置参考

7.1. 常规设置

rbd_op_threads
描述
块设备操作线程数量。
类型
整数
默认
1
警告

不要更改 rbd_op_threads 的默认值,因为将其设置为大于 1 的数字可能会导致数据损坏。

rbd_op_thread_timeout
描述
块设备操作线程的超时时间(以秒为单位)。
类型
整数
默认
60
rbd_non_blocking_aio
描述
如果为 true,Ceph 将处理来自 worker 线程的块设备异步 I/O 操作,以防止阻止。
类型
布尔值
默认
true
rbd_concurrent_management_ops
描述
处理中并发管理操作的最大数量(例如,删除或调整镜像大小)。
类型
整数
默认
10
rbd_request_timed_out_seconds
描述
维护请求超时前的秒数。
类型
整数
默认
30
rbd_clone_copy_on_read
描述
当设置为 true 时,会启用读时复制克隆。
类型
布尔值
默认
false
rbd_enable_alloc_hint
描述
如果为 true,则启用分配提示,块设备将向 OSD 后端发出提示,以指示预期的大小对象。
类型
布尔值
默认
true
rbd_skip_partial_discard
描述
如果为 true,则块设备在尝试丢弃对象内的范围时将跳过零范围。
类型
布尔值
默认
false
rbd_tracing
描述
将这个选项设置为 true 以启用 Linux Trace Toolkit Next Generation User Space Tracer (LTTng-UST) 追踪点。详情请参阅 使用 RBD Replay 功能跟踪 RADOS 块设备(RBD) 工作负载。
类型
布尔值
默认
false
rbd_validate_pool
描述
将此选项设置为 true,以验证空池以实现 RBD 兼容性。
类型
布尔值
默认
true
rbd_validate_names
描述
将此选项设置为 true 以验证镜像规格。
类型
布尔值
默认
true

7.2. 默认设置

可以通过创建镜像来覆盖默认设置。Ceph 将创建格式为 2 的镜像,没有条带化。

rbd_default_format
描述
如果没有指定其他格式,则使用默认格式 (2)格式 1 是新镜像的原始格式,兼容所有版本的 librbd 和内核模块,但不支持克隆等较新的功能。从版本 3.11 开始,rbd 和内核模块支持格式 2(条带除外)。格式 2 添加了对克隆的支持,且更易于扩展,以在未来允许更多功能。
类型
整数
默认
2
rbd_default_order
描述
如果没有指定其他顺序,默认的顺序。
类型
整数
默认
22
rbd_default_stripe_count
描述
如果未指定任何其他条带数,默认的条带数。更改默认值需要条带 v2 功能。
类型
64-bit Unsigned 整数
默认
0
rbd_default_stripe_unit
描述
如果未指定其他条带单元,默认条带单元。将单元从 0 (即对象大小)改为其他值需要条带 v2 功能。
类型
64-bit Unsigned 整数
默认
0
rbd_default_features
描述

创建块设备镜像时启用的默认功能。此设置仅适用于格式 2 镜像。设置为:

1: Layering support.分层允许您使用克隆。

2: Striping v2 support.条带化可在多个对象之间分散数据。条带有助于并行处理连续读/写工作负载。

4: Exclusive locking support.启用后,它要求客户端在进行写入前获得对象锁定。

8: Object map support.块设备是精简配置的 - 这代表仅存储实际存在的数据。对象映射支持有助于跟踪实际存在的对象(将数据存储在驱动器上)。启用对象映射支持可加快克隆或导入和导出稀疏填充镜像的 I/O 操作。

16: Fast-diff support.Fast-diff 支持取决于对象映射支持和专用锁定支持。它向对象映射中添加了另一个属性,这可以更快地生成镜像快照和快照的实际数据使用量之间的差别。

32: Deep-flatten support.深度扁平使 rbd flatten 除了镜像本身外还作用于镜像的所有快照。如果没有它,镜像的快照仍会依赖于父级,因此在快照被删除之前,父级将无法删除。深度扁平化使得父级独立于克隆,即使它们有快照。

64: Journaling support.日志记录会按照镜像发生的顺序记录对镜像的所有修改。这样可确保远程镜像的 crash-consistent 镜像在本地可用

启用的功能是数字设置的总和。

类型
整数
默认

61 - 启用了分层、专用锁定、对象映射、fast-diff 和 deep-flatten

重要

当前的默认设置不兼容 RBD 内核驱动程序或较旧的 RBD 客户端。

rbd_default_map_options
描述
大多数选项主要用于调试和基准测试。详情请参阅 map Options 下的 man rbd
类型
字符串
默认
""

7.3. 缓存设置

Ceph 块设备的用户空间实施(即 librbd)无法利用 Linux 页面缓存,因此它包含自己的内存缓存,称为 RBD 缓存。RBD 缓存的行为与行为良好的硬盘缓存一样。当操作系统发送障碍或清空请求时,所有脏数据都会写入 OSD。这意味着,使用回写缓存的安全性与使用带有正确发送清除的虚拟机(即 Linux 内核 >= 2.6.32)的良好物理硬盘一样安全。缓存使用最早使用 (LRU) 算法,在回写模式中,它可以联合相邻的请求来获得更好的吞吐量。

Ceph 支持 RBD 的回写缓存。若要启用它,请将 rbd cache = true 添加到 ceph.conf 文件的 [client] 部分。默认情况下,librbd 不执行任何缓存。写入和读取直接进入存储集群,只有数据处于所有副本的磁盘中时写入才会返回。启用缓存后,写入会立即返回,除非存在超过 rbd cache max dirty unflushed 字节。在这种情况下,写入会触发回写和块,直到清空了足够字节。

Ceph 支持 RBD 的直写缓存。您可以设置缓存的大小,您可以设置从回写缓存切换到通过缓存进行写入的目标和限制。要启用直写模式,请将 rbd cache max dirty 设置为 0。这意味着,只有在数据处于所有副本的磁盘上时写入才会返回,但读取可能来自缓存。缓存位于客户端上的内存中,每个 RBD 镜像都有自己的内存中。由于缓存对客户端而言是本地的,如果其他人访问该镜像,则没有一致性。在 RBD 上运行 GFS 或 OCFS 不适用于启用缓存。

RBD 的 ceph.conf 文件设置应在配置文件的 [client] 部分中设置。设置包括:

RBD 缓存
描述
为 RADOS 块设备 (RBD) 启用缓存。
类型
布尔值
必需
默认
true
RBD 缓存大小
描述
以字节为单位的 RBD 缓存大小。
类型
64 位整数
必填
默认
32 MiB
RBD 缓存最大脏
描述
以字节为单位的 限制,达到时缓存将触发回写。如果为 0,则使用直写缓存。
类型
64 位整数
必填
约束
必须小于 rbd 缓存大小
默认
24 MiB
RBD 缓存目标脏
描述
缓存开始将数据写入数据存储前的 脏目标。不要阻止写入到缓存。
类型
64 位整数
必填
约束
必须小于 rbd cache max dirty
默认
16 MiB
RBD 缓存最大脏年龄
描述
在开始回写前,脏数据在缓存中的秒数。
类型
浮点值
必填
默认
1.0
rbd_cache_max_dirty_object
描述
对象的脏限制 - 设为 0,用于从 rbd_cache_size 自动计算。
类型
整数
默认
0
rbd_cache_block_writes_upfront
描述
如果为 true,它将在 aio_write 调用完成前阻止写入缓存。如果为 false,它将在调用 aio_completion 之前阻止。
类型
布尔值
默认
false
RBD 缓存写入,直到清除
描述
以直写模式开始,并在收到第一个 flush 请求后切换到回写模式。如果 rbd 上运行的虚拟机太旧而无法发送清空,如 Linux 中的 virtio 驱动程序 2.6.32 之前,启用此设置比较保守,但安全设置。
类型
布尔值
必需
默认
true

7.4. 父/Child Reads 设置

rbd_balance_snap_reads
描述
Ceph 通常从Primary OSD 读取对象。由于读取不可变,您可以启用此功能来平衡 Primary OSD 和副本之间的 snap 读取。
类型
布尔值
默认
false
rbd_localize_snap_reads
描述
虽然 rbd_balance_snap_reads 将随机化副本以读取快照,如果启用了 rbd_localize_snap_reads,则块设备将查找 CRUSH map 来查找最接近(本地)OSD 以读取快照。
类型
布尔值
默认
false
rbd_balance_parent_reads
描述
Ceph 通常从Primary OSD 读取对象。由于读取不可变,您可以启用此功能来平衡 Primary OSD 和副本之间的父读取。
类型
布尔值
默认
false
rbd_localize_parent_reads
描述
虽然 rbd_balance_parent_reads 将随机化副本以读取父项,如果您启用了 rbd_localize_parent_reads,块设备将查找 CRUSH map 来查找最接近(本地)OSD 以读取父项。
类型
布尔值
默认
true

7.5. read-ahead 设置

RBD 支持 read-ahead/prefetching 来优化小顺序读取。在虚拟机的情况下,这通常由客户机操作系统处理,但启动加载器可能不会产生高效的读取问题。如果禁用缓存,则会自动禁用 read-ahead。

RBD readahead 触发器请求
描述
触发 read-ahead 所需的连续读取请求数。
类型
整数
必需
默认
10
RBD readahead max bytes
描述
read-ahead 请求的最大大小.如果为零,则禁用 read-ahead。
类型
64 位整数
必填
默认
512 KiB
RBD readahead 在字节后禁用
描述
从 RBD 镜像读取了这一字节后,对该镜像禁用 read-ahead,直到关闭为止。这允许客户机操作系统在启动后接管读头。如果为零,则启用 read-ahead。
类型
64 位整数
必填
默认
50 MiB

7.6. 将设置列入黑名单

rbd_blacklist_on_break_lock
描述
是否将锁定中断的客户端列入黑名单.
类型
布尔值
默认
true
rbd_blacklist_expire_seconds
描述
OSD 默认列入黑名单的秒数 - 设置为 0。
类型
整数
默认
0

7.7. 日志设置

rbd_journal_order
描述
转换到计算日志对象最大大小的位数。该值介于 1264 之间。
类型
32-bit Unsigned 整数
默认
24
rbd_journal_splay_width
描述
活动日志对象的数量。
类型
32-bit Unsigned 整数
默认
4
rbd_journal_commit_age
描述
提交时间间隔(以秒为单位)。
类型
双精确浮动点数
默认
5
rbd_journal_object_flush_interval
描述
每个日志对象每个待处理提交的最大数量。
类型
整数
默认
0
rbd_journal_object_flush_bytes
描述
每个日志对象最多待处理字节数。
类型
整数
默认
0
rbd_journal_object_flush_age
描述
等待提交的最大时间间隔(以秒为单位)。
类型
双精确浮动点数
默认
0
rbd_journal_pool
描述
为日志对象指定池。
类型
字符串
默认
""

第 8 章 使用 iSCSI 网关

iSCSI 网关将 Red Hat Ceph Storage 与 iSCSI 标准集成,以提供高可用性(HA) iSCSI 目标,将 RADOS 块设备(RBD)镜像导出为 SCSI 磁盘。iSCSI 协议允许客户端(启动器)通过 TCP/IP 网络向 SCSI 存储设备(目标)发送 SCSI 命令。这允许异构客户端(如 Microsoft Windows)访问 Red Hat Ceph Storage 集群。

每个 iSCSI 网关运行 Linux IO 目标内核子系统(LIO)来提供 iSCSI 协议支持。LIO 利用用户空间透传(TCMU)与 Ceph 的 librbd 库交互,将 RBD 镜像公开给 iSCSI 客户端。利用 Ceph 的 iSCSI 网关,您可以有效地运行完全集成的块存储基础架构,其具备传统存储区域网络 (SAN) 的所有功能和好处。

图 8.1. Ceph iSCSI 网关 HA 设计

8.1. iSCSI 目标的要求

Red Hat Ceph Storage 高可用性 (HA) iSCSI 网关解决方案对用于检测故障 OSD 的网关节点、内存容量和定时器设置数量的要求。

所需节点数

至少安装两个 iSCSI 网关节点。要提高弹性和 I/O 处理,可以最多安装四个 iSCSI 网关节点。

内存要求

RBD 镜像的内存占用量可能会增大到较大的大小。iSCSI 网关节点上映射的每个 RBD 镜像使用大约 90 MB 内存。确保 iSCSI 网关节点有足够的内存来支持每个映射的 RBD 镜像。

检测关闭 OSD

Ceph 监控器或 OSD 没有特定的 iSCSI 网关选项,但务必要降低检测故障 OSD 的默认计时器,以减少启动器超时的可能性。按照 较低计时器设置来检测下线 OSD 中的说明,以减少启动器超时的可能性。

8.2. 降低检测下线 OSD 的计时器设置

有时,需要降低检测下线 OSD 的定时器设置。例如,在将 Red Hat Ceph Storage 用作 iSCSI 网关时,您可以通过降低检测下线 OSD 的计时器设置来降低启动器超时的可能性。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。

流程

  1. 将 Ansible 配置为使用新的计时器设置。

    1. group_vars/all.yml 文件中添加 ceph_conf_overrides 部分,或者编辑任何现有的 ceph_conf_overrides 部分,使其包含以 osd 开头的行:

      ceph_conf_overrides:
           osd:
             osd_client_watch_timeout: 15
             osd_heartbeat_grace: 20
             osd_heartbeat_interval: 5
      Copy to Clipboard Toggle word wrap

      site.yml Ansible playbook 针对 OSD 节点运行时,上述设置将添加到其 ceph.conf 配置文件中。

    2. 使用 Ansible 更新 ceph.conf 文件,并在所有 OSD 节点上重新启动 OSD 守护进程。在 Ansible admin 节点上运行以下命令:

      [user@admin ceph-ansible]$ ansible-playbook --limit osds site.yml
      Copy to Clipboard Toggle word wrap
  2. 验证定时器设置与 ceph_conf_overrides 中设置的相同:

    在一个或多个 OSD 上,使用 ceph daemon 命令查看设置:

    # ceph daemon osd.OSD_ID config get osd_client_watch_timeout
    # ceph daemon osd.OSD_ID config get osd_heartbeat_grace
    # ceph daemon osd.OSD_ID config get osd_heartbeat_interval
    Copy to Clipboard Toggle word wrap

    Example:

    [root@osd1 ~]# ceph daemon osd.0 config get osd_client_watch_timeout
    {
        "osd_client_watch_timeout": "15"
    }
    [root@osd1 ~]#  ceph daemon osd.0 config get osd_heartbeat_grace
    {
        "osd_heartbeat_grace": "20"
    }
    [root@osd1 ~]# ceph daemon osd.0 config get osd_heartbeat_interval
    {
        "osd_heartbeat_interval": "5"
    }
    Copy to Clipboard Toggle word wrap
  3. 可选:如果无法立即重启 OSD 守护进程,请从 Ceph 监控节点或直接在所有 OSD 节点上进行在线更新。在您能够重新启动 OSD 守护进程后,如上所述,使用 Ansible 将新的计时器设置添加到 ceph.conf 中,以便在重启后保留设置。

    • 从 monitor 节点在线更新 OSD 计时器设置:

      # ceph tell osd.OSD_ID injectargs '--osd_client_watch_timeout 15'
      # ceph tell osd.OSD_ID injectargs '--osd_heartbeat_grace 20'
      # ceph tell osd.OSD_ID injectargs '--osd_heartbeat_interval 5'
      Copy to Clipboard Toggle word wrap

      Example:

      [root@mon ~]# ceph tell osd.0 injectargs '--osd_client_watch_timeout 15'
      [root@mon ~]# ceph tell osd.0 injectargs '--osd_heartbeat_grace 20'
      [root@mon ~]# ceph tell osd.0 injectargs '--osd_heartbeat_interval 5'
      Copy to Clipboard Toggle word wrap
    • 从 OSD 节点在线更新 OSD 计时器设置:

      # ceph daemon osd.OSD_ID config set osd_client_watch_timeout 15
      # ceph daemon osd.OSD_ID config set osd_heartbeat_grace 20
      # ceph daemon osd.OSD_ID config set osd_heartbeat_interval 5
      Copy to Clipboard Toggle word wrap

      Example:

      [root@osd1 ~]# ceph daemon osd.0 config set osd_client_watch_timeout 15
      [root@osd1 ~]# ceph daemon osd.0 config set osd_heartbeat_grace 20
      [root@osd1 ~]# ceph daemon osd.0 config set osd_heartbeat_interval 5
      Copy to Clipboard Toggle word wrap

其它资源

8.3. 配置 iSCSI 目标

通常,对 Ceph 存储集群的块级访问仅限于 QEMU 和 librbd,这是在 OpenStack 环境中采用的关键推动因素。Ceph 存储群集的块级别访问现在可以利用 iSCSI 标准来提供数据存储。

先决条件

  • Red Hat Enterprise Linux 7.5 或更高版本。
  • 正在运行的 Red Hat Ceph Storage 集群,版本 3.1 或更高版本。
  • iSCSI 网关节点,它们可以与 OSD 节点或专用节点上在一起。
  • iSCSI 网关节点上的有效的 Red Hat Enterprise Linux 7 和 Red Hat Ceph Storage 3.3 权利/订阅。
  • 为 iSCSI 前端流量和 Ceph 后端流量分隔网络子网。

可以使用 Ansible 或命令行界面部署 Ceph iSCSI 网关。

8.3.1. 使用 Ansible 配置 iSCSI 目标

要求:

  • Red Hat Enterprise Linux 7.5 或更高版本。
  • 正在运行的 Red Hat Ceph Storage 3 或更高版本。

安装:

  1. 在 iSCSI 网关节点上,启用 Red Hat Ceph Storage 3 Tools 存储库。详情请参阅 Red Hat Enterprise Linux 安装指南中的启用 Red Hat Ceph Storage 存储库 一节

    1. 安装 ceph-iscsi-config 软件包:

      # yum install ceph-iscsi-config
      Copy to Clipboard Toggle word wrap
  2. 在 Ansible 管理节点上,以 root 用户身份执行以下步骤:

    1. 启用 Red Hat Ceph Storage 3 Tools 存储库。详情请参阅 Red Hat Enterprise Linux 安装指南中的启用 Red Hat Ceph Storage 存储库 一节
    2. 安装 ceph-ansible 软件包:

      # yum install ceph-ansible
      Copy to Clipboard Toggle word wrap
    3. /etc/ansible/hosts 文件中为 gateway 组添加一个条目:

      [iscsigws]
      ceph-igw-1
      ceph-igw-2
      Copy to Clipboard Toggle word wrap
      注意

      如果与 OSD 节点共存 iSCSI 网关,请将 OSD 节点添加到 [iscsigws] 部分中。

配置:

ceph-ansible 软件包将文件放在 /usr/share/ceph-ansible/group_vars/ 目录中,名为 iscsigws.yml.sample

  1. 创建 iscsigws.yml.sample 文件的副本,并将其命名为 iscsigws.yml

    重要

    新文件名(iscsigws.yml)和新部分标题([iscsigws])仅适用于 Red Hat Ceph Storage 3.1 或更高版本。从以前的 Red Hat Ceph Storage 升级到 3.1 将仍然使用旧的文件名(iscsi-gws.yml)和旧部分标题([iscsi-gws])。

  2. 打开 iscsigws.yml 文件进行编辑。
  3. 取消注释 gateway_ip_list 选项,并使用 IPv4 或 IPv6 地址相应地更新值。

    例如,添加两个网关,其 IPv4 地址为 10.172.19.21 和 10.172.19.22,配置 gateway_ip_list,如下所示:

    gateway_ip_list: 10.172.19.21,10.172.19.22
    Copy to Clipboard Toggle word wrap
    重要

    gateway_ip_list 选项提供 IP 地址是必需的。您不能混合使用 IPv4 和 IPv6 地址。

  4. 取消注释 rbd_devices 变量并相应地更新值,例如:

    rbd_devices:
      - { pool: 'rbd', image: 'ansible1', size: '30G', host: 'ceph-1', state: 'present' }
      - { pool: 'rbd', image: 'ansible2', size: '15G', host: 'ceph-1', state: 'present' }
      - { pool: 'rbd', image: 'ansible3', size: '30G', host: 'ceph-1', state: 'present' }
      - { pool: 'rbd', image: 'ansible4', size: '50G', host: 'ceph-1', state: 'present' }
    Copy to Clipboard Toggle word wrap
  5. 取消注释 client_connections 变量并相应地更新值,例如:

    启用 CHAP 身份验证的示例

    client_connections:
      - { client: 'iqn.1994-05.com.redhat:rh7-iscsi-client', image_list: 'rbd.ansible1,rbd.ansible2', chap: 'rh7-iscsi-client/redhat', status: 'present' }
      - { client: 'iqn.1991-05.com.microsoft:w2k12r2', image_list: 'rbd.ansible4', chap: 'w2k12r2/microsoft_w2k12', status: 'absent' }
    Copy to Clipboard Toggle word wrap

    禁用 CHAP 身份验证的示例

    client_connections:
      - { client: 'iqn.1991-05.com.microsoft:w2k12r2', image_list: 'rbd.ansible4', chap: '', status: 'present' }
      - { client: 'iqn.1991-05.com.microsoft:w2k16r2', image_list: 'rbd.ansible2', chap: '', status: 'present' }
    Copy to Clipboard Toggle word wrap

    重要

    仅在 Red Hat Ceph Storage 3.1 或更高版本上支持 CHAP。红帽不支持混合客户端,有些启用了 CHAP 并禁用了一些 CHAP。所有标记为 present 的客户端都必须启用 CHAP,或者必须禁用 CHAP。

  6. 检查以下 Ansible 变量和描述,并根据需要更新。

    Expand
    表 8.1. iSCSI 网关常规变量
    变量meaning/Purpose

    seed_monitor

     Each gateway needs access to the ceph cluster for rados and rbd calls. This means the iSCSI gateway must have an appropriate /etc/ceph/ directory defined. The seed_monitor host is used to populate the iSCSI gateway’s /etc/ceph/ directory.

    cluster_name

     Define a custom storage cluster name.

    gateway_keyring

     Define a custom keyring name.

    deploy_settings

     If set to true, then deploy the settings when the playbook is ran.

    perform_system_checks

     This is a boolean value that checks for multipath and lvm configuration settings on each gateway. It must be set to true for at least the first run to ensure multipathd and lvm are configured properly.

    gateway_iqn

     This is the iSCSI IQN that all the gateways will expose to clients. This means each client will see the gateway group as a single subsystem.

    gateway_ip_list

     The comma separated ip list defines the IPv4 or IPv6 addresses that will be used on the front end network for iSCSI traffic. This IP will be bound to the active target portal group on each node, and is the access point for iSCSI traffic. Each IP should correspond to an IP available on the hosts defined in the iscsigws.yml host group in /etc/ansible/hosts.

    rbd_devices

     This section defines the RBD images that will be controlled and managed within the iSCSI gateway configuration. Parameters like pool and image are self explanatory. Here are the other parameters:
    size = This defines the size of the RBD. You may increase the size later, by simply changing this value, but shrinking the size of an RBD is not supported and is ignored.
    host = This is the iSCSI gateway host name that will be responsible for the rbd allocation/resize. Every defined rbd_device entry must have a host assigned.
    state = This is typical Ansible syntax for whether the resource should be defined or removed. A request with a state of absent will first be checked to ensure the rbd is not mapped to any client. If the RBD is unallocated, it will be removed from the iSCSI gateway and deleted from the configuration.

    client_connections

     This section defines the iSCSI client connection details together with the LUN (RBD image) masking. Currently only CHAP is supported as an authentication mechanism. Each connection defines an image_list which is a comma separated list of the form pool.rbd_image[,pool.rbd_image,…​]. RBD images can be added and removed from this list, to change the client masking. Note, that there are no checks done to limit RBD sharing across client connections.

    Expand
    表 8.2. iSCSI 网关 RBD-TARGET-API 变量
    变量meaning/Purpose

    api_user

    API 的用户名。默认值为 admin

    api_password

    使用 API 的密码。默认值为 admin

    api_port

    使用 API 的 TCP 端口号。默认值为 5000

    api_secure

    值可以是 truefalse。默认值为 false

    loop_delay

    控制轮询 iSCSI 管理对象所需的睡眠间隔(以秒为单位)。默认值为 1

    trusted_ip_list

    有权访问 API 的 IPv4 或 IPv6 地址列表。默认情况下,只有 iSCSI 网关节点有权访问。

    重要

    对于 rbd_devices,池名称或镜像名称中没有句点(.)。

    警告

    网关配置更改一次仅受一个网关的支持。尝试通过多个网关同时运行更改可能会导致配置不稳定和不一致。

    警告

    在运行 ansible-playbook 命令时,Ansible 将安装 ceph-iscsi-cli 软件包,然后根据 group_vars/iscsigws.yml 文件中的设置更新 /etc/ceph/iscsi-gateway.cfg 文件。如果您之前使用 命令行安装过程 安装了 ceph-iscsi-cli 软件包,则 iscsi-gateway.cfg 文件中的现有设置必须复制到 group_vars/iscsigws.yml 文件中。

    请参阅 附录 A, iscsigws.yml 文件示例 查看完整的 iscsigws.yml.sample 文件。

部署:

在 Ansible 管理节点上,以 root 用户身份执行以下步骤。

  1. 执行 Ansible playbook:

    # cd /usr/share/ceph-ansible
    # ansible-playbook site.yml
    Copy to Clipboard Toggle word wrap
    注意

    Ansible playbook 将处理 RPM 依赖项、RBD 创建和 Linux iSCSI 目标配置。

    警告

    在独立 iSCSI 网关节点上,验证是否启用了正确的 Red Hat Ceph Storage 3.3 软件存储库。如果它们不可用,则会安装错误的软件包。

  2. 运行以下命令验证配置:

    # gwcli ls
    Copy to Clipboard Toggle word wrap
    重要

    不要使用 targetcli 实用程序来更改配置,这会导致以下问题: ALUA 配置错误和路径故障转移问题。可能会导致数据损坏,跨 iSCSI 网关进行不匹配的配置,并且 WWN 信息不匹配,从而导致客户端路径问题。

服务管理:

ceph-iscsi-config 软件包将安装配置管理逻辑和名为 rbd-target-gw 的 Systemd 服务。启用 Systemd 服务后,rbd-target-gw 将在引导时启动,并将恢复 Linux iSCSI 目标状态。使用 Ansible playbook 部署 iSCSI 网关会禁用目标服务。

# systemctl start rbd-target-gw
Copy to Clipboard Toggle word wrap

以下是与 rbd-target-gw Systemd 服务交互的结果。

# systemctl <start|stop|restart|reload> rbd-target-gw
Copy to Clipboard Toggle word wrap
reload
重新加载请求将强制 rbd-target-gw 重新读取配置并将其应用到当前运行的环境。这通常不需要,因为更改是从 Ansible 并行部署到所有 iSCSI 网关节点。
stop
停止请求将关闭网关的门户接口,丢弃与客户端的连接,并从内核中擦除当前的 Linux iSCSI 目标配置。这会将 iSCSI 网关返回到干净的状态。当客户端断开连接时,活跃 I/O 通过客户端多路径重新调度到其他 iSCSI 网关。

管理:

/usr/share/ceph-ansible/group_vars/iscsigws.yml 文件中,Ansible playbook 支持很多操作工作流。

警告

红帽不支持管理 Ceph iSCSI 网关工具导出的 RBD 镜像,如 gwcliceph-ansible。此外,使用 rbd 命令重命名或删除 Ceph iSCSI 网关导出的 RBD 镜像可能会导致存储集群不稳定。

警告

在从 iSCSI 网关配置移除 RBD 镜像之前,请遵循从操作系统中删除存储设备的标准步骤。

有关使用 Red Hat Enterprise Linux 7 的客户端和服务器,有关删除设备的详情,请参阅 Red Hat Enterprise Linux 7 存储管理指南

Expand
表 8.3. 操作工作流
我希望…​通过…​ 更新 iscsigws.yml 文件

添加更多 RBD 镜像

使用新镜像在 rbd_devices 部分添加另一个条目。

重新定义现有 RBD 镜像的大小

更新 rbd_devices 部分中的 size 参数。需要客户端侧操作才能获取磁盘的新大小。

添加客户端

client_connections 部分添加一个条目。

向客户端添加另一个 RBD

将相关的 RBD pool.image 名称添加到客户端的 image_list 变量中。

从客户端中删除 RBD

从客户端 image_list 变量中删除 RBD pool.image 名称。

从系统中删除 RBD

将 RBD 条目 state 变量更改为 absent。RBD 镜像必须首先从操作系统中未分配,才能成功。

更改客户端 CHAP 凭证

更新 client_connections 中的相关 CHAP 详情。这将需要与客户端协调。例如,客户端发出 iSCSI 注销,凭据由 Ansible playbook 更改,凭据会在客户端上更改,然后客户端执行 iSCSI 登录。

删除客户端

更新相关的 client_connections 项目,其状态为 absent。运行 Ansible playbook 后,客户端将从系统清除,但磁盘将保持定义为 Linux iSCSI 目标,以便潜在的重复使用。

进行更改后,重新运行 Ansible playbook,以在 iSCSI 网关节点之间应用更改。

# ansible-playbook site.yml
Copy to Clipboard Toggle word wrap

删除配置:

  1. 在清除 iSCSI 网关配置前断开所有 iSCSI 启动器。对适当的操作系统按照以下步骤操作:

    1. Red Hat Enterprise Linux 启动程序:

      语法

      iscsiadm -m node -T $TARGET_NAME --logout
      Copy to Clipboard Toggle word wrap

      $TARGET_NAME 替换为配置的 iSCSI 目标名称。

      示例

      # iscsiadm -m node -T iqn.2003-01.com.redhat.iscsi-gw:ceph-igw --logout
      Logging out of session [sid: 1, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.21,3260]
      Logging out of session [sid: 2, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.22,3260]
      Logout of [sid: 1, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.21,3260] successful.
      Logout of [sid: 2, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.22,3260] successful.
      Copy to Clipboard Toggle word wrap

    2. Windows 启动器:

      详情请查看 Microsoft 文档

    3. VMware ESXi 启动器:

      如需了解更多详细信息,请参阅 VMware 文档

  2. 在 Ansible 管理节点上,以 Ansbile 用户身份更改为 /usr/share/ceph-ansible/ 目录:

    [user@admin ~]$ cd /usr/share/ceph-ansible/
    Copy to Clipboard Toggle word wrap
  3. 运行 Ansible playbook 以删除 iSCSI 网关配置:

    [user@admin ceph-ansible]$ ansible-playbook purge-cluster.yml --limit iscsigws
    Copy to Clipboard Toggle word wrap
  4. 在 Ceph monitor 或客户端节点上,以 root 用户身份删除 iSCSI 网关配置对象(gateway.conf):

    [root@mon ~]# rados rm -p pool gateway.conf
    Copy to Clipboard Toggle word wrap
  5. 可选。

    如果不再需要导出的 Ceph RADOS 块设备(RBD),则移除 RBD 镜像。以 root 用户身份在 Ceph 监控或客户端 节点上运行以下命令

    语法

    rbd rm $IMAGE_NAME
    Copy to Clipboard Toggle word wrap

    $IMAGE_NAME 替换为 RBD 镜像的名称。

    示例

    [root@mon ~]# rbd rm rbd01
    Copy to Clipboard Toggle word wrap

8.3.2. 使用命令行界面配置 iSCSI 目标

Ceph iSCSI 网关是 iSCSI 目标节点,也是 Ceph 客户端节点。Ceph iSCSI 网关可以是单机节点,也可以并置在 Ceph 对象存储磁盘(OSD)节点上。完成以下步骤,将安装并配置 Ceph iSCSI 网关以进行基本操作。

要求:

  • Red Hat Enterprise Linux 7.5 或更高版本
  • 正在运行的 Red Hat Ceph Storage 3.3 集群或更新版本
  • 必须安装以下软件包:

    • targetcli-2.1.fb47-0.1.20170815.git5bf3517.el7cp or newer package
    • python-rtslib-2.1.fb64-0.1.20170815.gitec364f3.el7cp or newer package
    • tcmu-runner-1.4.0-0.2.el7cp or newer package
    • openssl-1.0.2k-8.el7 或更新版本的软件包

      重要

      如果这些软件包的早期版本存在,则必须在安装更新的版本前首先删除它们。这些较新的版本必须从 Red Hat Ceph Storage 存储库安装。

在使用 gwcli 工具之前,在存储集群中的所有 Ceph 监控节点上执行以下步骤:

  1. root 用户身份重启 ceph-mon 服务:

    # systemctl restart ceph-mon@$MONITOR_HOST_NAME
    Copy to Clipboard Toggle word wrap

    例如:

    # systemctl restart ceph-mon@monitor1
    Copy to Clipboard Toggle word wrap

在 Ceph iSCSI 网关节点上以 root 用户身份执行以下步骤,然后继续 安装 部分:

  1. 如果 Ceph iSCSI 网关不在 OSD 节点上并置,则将位于 /etc/ceph/ 中的 Ceph 配置文件从存储集群中正在运行的 Ceph 节点复制到 iSCSI 网关节点。Ceph 配置文件必须存在于 /etc/ceph/ 下的 iSCSI 网关节点上。
  2. 安装和配置 Ceph 命令行界面。详情请参阅 Red Hat Ceph Storage 3 安装指南中的安装 Ceph 命令行界面 一章。
  3. 启用 Ceph 工具存储库:

    # subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-rpms
    Copy to Clipboard Toggle word wrap
  4. 如果需要,在防火墙上打开 TCP 端口 3260 和 5000。
  5. 新建或使用现有的 RADOS 块设备 (RBD)。

警告

如果您已使用 Ansible 安装 Ceph iSCSI 网关,请不要使用此流程。

在运行 ansible-playbook 命令时,Ansible 将安装 ceph-iscsi-cli 软件包,然后根据 group_vars/iscsigws.yml 文件中的设置更新 /etc/ceph/iscsi-gateway.cfg 文件。请参阅 要求: 了解更多信息。

安装:

root 用户身份在所有 iSCSI 网关节点上执行以下步骤,除非另有说明。

  1. 安装 ceph-iscsi-cli 软件包:

    # yum install ceph-iscsi-cli
    Copy to Clipboard Toggle word wrap
  2. 安装 tcmu-runner 软件包:

    # yum install tcmu-runner
    Copy to Clipboard Toggle word wrap
  3. 如果需要,安装 openssl 软件包:

    # yum install openssl
    Copy to Clipboard Toggle word wrap
    1. 在主 iSCSI 网关节点上,创建一个目录来存放 SSL 密钥:

      # mkdir ~/ssl-keys
      # cd ~/ssl-keys
      Copy to Clipboard Toggle word wrap
    2. 在主 iSCSI 网关节点上,创建证书和密钥文件:

      # openssl req -newkey rsa:2048 -nodes -keyout iscsi-gateway.key -x509 -days 365 -out iscsi-gateway.crt
      Copy to Clipboard Toggle word wrap
      注意

      系统将提示您输入环境信息。

    3. 在主 iSCSI 网关节点上,创建一个 PEM 文件:

      # cat iscsi-gateway.crt iscsi-gateway.key > iscsi-gateway.pem
      Copy to Clipboard Toggle word wrap
    4. 在主 iSCSI 网关节点上,创建一个公钥:

      # openssl x509 -inform pem -in iscsi-gateway.pem -pubkey -noout > iscsi-gateway-pub.key
      Copy to Clipboard Toggle word wrap
    5. 从主 iSCSI 网关节点,将 iscsi-gateway.crtiscsi-gateway.pemiscsi-gateway-pub.keyiscsi-gateway.key 文件复制到其他 iSCSI 网关节点上的 /etc/ceph/ 目录中。
  4. /etc/ceph/ 目录中创建一个名为 iscsi-gateway.cfg 的文件:

    # touch /etc/ceph/iscsi-gateway.cfg
    Copy to Clipboard Toggle word wrap
    1. 编辑 iscsi-gateway.cfg 文件并添加以下几行:

      语法

      [config]
      cluster_name = <ceph_cluster_name>
      gateway_keyring = <ceph_client_keyring>
      api_secure = true
      trusted_ip_list = <ip_addr>,<ip_addr>
      Copy to Clipboard Toggle word wrap

      示例

      [config]
      cluster_name = ceph
      gateway_keyring = ceph.client.admin.keyring
      api_secure = true
      trusted_ip_list = 192.168.0.10,192.168.0.11
      Copy to Clipboard Toggle word wrap

      有关这些选项的详情,请参阅 要求: 中的表 8.1 和 8.2。

      重要

      在所有 iSCSI 网关节点上,iscsi-gateway.cfg 文件都必须相同。

    2. iscsi-gateway.cfg 文件复制到所有 iSCSI 网关节点。
  5. 启用并启动 API 服务:

    # systemctl enable rbd-target-api
    # systemctl start rbd-target-api
    Copy to Clipboard Toggle word wrap

配置:

  1. 启动 iSCSI 网关命令行界面:

    # gwcli
    Copy to Clipboard Toggle word wrap
  2. 使用 IPv4 或 IPv6 地址创建 iSCSI 网关:

    语法

    >/iscsi-target create iqn.2003-01.com.redhat.iscsi-gw:<target_name>
    > goto gateways
    > create <iscsi_gw_name> <IP_addr_of_gw>
    > create <iscsi_gw_name> <IP_addr_of_gw>
    Copy to Clipboard Toggle word wrap

    示例

    >/iscsi-target create iqn.2003-01.com.redhat.iscsi-gw:ceph-igw
    > goto gateways
    > create ceph-gw-1 10.172.19.21
    > create ceph-gw-2 10.172.19.22
    Copy to Clipboard Toggle word wrap

    重要

    您不能混合使用 IPv4 和 IPv6 地址。

  3. 添加 RADOS 块设备(RBD):

    语法

    > cd /disks
    >/disks/ create <pool_name> image=<image_name> size=<image_size>m|g|t max_data_area_mb=<buffer_size>
    Copy to Clipboard Toggle word wrap

    示例

    > cd /disks
    >/disks/ create rbd image=disk_1 size=50g max_data_area_mb=32
    Copy to Clipboard Toggle word wrap

    重要

    池名称或镜像名称中不能有任何句点(.)。

    警告

    max_data_area_mb 选项控制每个镜像可用于在 iSCSI 目标和 Ceph 集群之间传递 SCSI 命令数据的内存量(以兆字节为单位)。如果这个值太小,则可能会导致过量队列完全重试,这会影响性能。如果值太大,则可能会导致一个磁盘使用过多系统内存,这可能会导致其他子系统的分配失败。默认值为 8。

    可以使用 gwcli reconfigure 子命令更改此值。该镜像不得被 iSCSI 启动器使用,才能使此命令生效。除非在本文档中指定,或者红帽支持指示您这样做,否则不要使用 gwcli reconfigure 子命令来调整其他选项。

    语法

    >/disks/ reconfigure max_data_area_mb <new_buffer_size>
    Copy to Clipboard Toggle word wrap

    示例

    >/disks/ reconfigure max_data_area_mb 64
    Copy to Clipboard Toggle word wrap

  4. 创建客户端:

    语法

    > goto hosts
    > create iqn.1994-05.com.redhat:<client_name>
    > auth chap=<user_name>/<password>
    Copy to Clipboard Toggle word wrap

    示例

    > goto hosts
    > create iqn.1994-05.com.redhat:rh7-client
    > auth chap=iscsiuser1/temp12345678
    Copy to Clipboard Toggle word wrap

    重要

    仅在 Red Hat Ceph Storage 3.1 或更高版本上支持 CHAP。红帽不支持混合客户端,有些启用了 CHAP 并禁用了一些 CHAP。所有客户端都必须启用 CHAP,或者禁用 CHAP。默认的行为是仅通过其启动器名称验证启动器。

    如果启动器无法登录到目标,那么一些启动器可能是错误配置的 CHAP 身份验证。

    示例

    o- hosts ................................ [Hosts: 2: Auth: MISCONFIG]
    Copy to Clipboard Toggle word wrap

    在主机级别执行以下命令 重置所有 CHAP 身份验证:

    /> goto hosts
    /iscsi-target...csi-igw/hosts> auth nochap
    ok
    ok
    /iscsi-target...csi-igw/hosts> ls
    o- hosts ................................ [Hosts: 2: Auth: None]
      o- iqn.2005-03.com.ceph:esx ........... [Auth: None, Disks: 4(310G)]
      o- iqn.1994-05.com.redhat:rh7-client .. [Auth: None, Disks: 0(0.00Y)]
    Copy to Clipboard Toggle word wrap
  5. 向客户端添加磁盘:

    语法

    >/iscsi-target..eph-igw/hosts> cd iqn.1994-05.com.redhat:<client_name>
    > disk add <pool_name>.<image_name>
    Copy to Clipboard Toggle word wrap

    示例

    >/iscsi-target..eph-igw/hosts> cd iqn.1994-05.com.redhat:rh7-client
    > disk add rbd.disk_1
    Copy to Clipboard Toggle word wrap

  6. 要确认 API 正确使用 SSL,请查看 https/var/log/rbd-target-api.log 文件,例如:

    Aug 01 17:27:42 test-node.example.com python[1879]:  * Running on https://0.0.0.0:5000/
    Copy to Clipboard Toggle word wrap
  7. 下一步是配置 iSCSI 启动器。有关配置 iSCSI 启动器的更多信息,请参阅 第 8.4 节 “配置 iSCSI 启动器”

验证

  1. 验证 iSCSI 网关是否正常工作:

    示例

    /> goto gateways
    /iscsi-target...-igw/gateways> ls
    o- gateways ............................ [Up: 2/2, Portals: 2]
      o- ceph-gw-1  ........................ [ 10.172.19.21 (UP)]
      o- ceph-gw-2  ........................ [ 10.172.19.22 (UP)]
    Copy to Clipboard Toggle word wrap

    注意

    如果状态是 UNKNOWN,请检查网络问题和任何错误。如果使用防火墙,请检查是否打开适当的 TCP 端口。检查 iSCSI 网关是否在 trusted_ip_list 选项中列出。验证 rbd-target-api 服务是否在 iSCSI 网关节点上运行。

  2. 要验证启动器是否连接到 iSCSI 目标,您会看到 initiator LOGGED-IN

    示例

    /> goto hosts
    /iscsi-target...csi-igw/hosts> ls
    o- hosts .............................. [Hosts: 1: Auth: None]
      o- iqn.1994-05.com.redhat:rh7-client  [LOGGED-IN, Auth: None, Disks: 0(0.00Y)]
    Copy to Clipboard Toggle word wrap

  3. 验证 LUN 是否跨 iSCSI 网关平衡:

    /> goto hosts
    /iscsi-target...csi-igw/hosts> ls
    o- hosts ................................. [Hosts: 2: Auth: None]
      o- iqn.2005-03.com.ceph:esx ............ [Auth: None, Disks: 4(310G)]
      | o- lun 0 ............................. [rbd.disk_1(100G), Owner: ceph-gw-1]
      | o- lun 1 ............................. [rbd.disk_2(10G), Owner: ceph-gw-2]
    Copy to Clipboard Toggle word wrap

    在创建磁盘时,将根据启动器的多路径层将 磁盘分配 iSCSI 网关作为其所有者。启动器的多路径层将报告为 ALUA Active-Optimized (AO)状态。其他路径将报告为处于 ALUA Active-non-Optimized (ANO)状态。

    如果 AO 路径失败,则使用其他 iSCSI 网关之一。故障转移网关的排序取决于启动器的多路径层,其中通常基于首先发现的路径。

    目前,LUN 的平衡不是动态的。在创建磁盘时会选择自己的 iSCSI 网关,且无法更改。

8.3.3. 优化 iSCSI 目标的性能

有许多设置控制 iSCSI 目标如何通过网络传输数据。这些设置可用于优化 iSCSI 网关的性能。

警告

只有在由红帽支持团队指示或根据本文档中指定的要求时才更改这些设置。

gwcli reconfigure 子命令

gwcli reconfigure 子命令可控制用于优化 iSCSI 网关性能的设置。

影响 iSCSI 目标性能的设置

  • max_data_area_mb
  • cmdsn_depth
  • immediate_data
  • initial_r2t
  • max_outstanding_r2t
  • first_burst_length
  • max_burst_length
  • max_recv_data_segment_length
  • max_xmit_data_segment_length

其它资源

8.3.4. 添加更多 iSCSI 网关

作为存储管理员,您可以使用 Ansible 或 gwcli 命令行工具将初始两个 iSCSI 网关扩展到四个 iSCSI 网关。添加更多 iSCSI 网关在使用负载平衡和故障转移选项时为您提供更大的灵活性,同时提供更多冗余。

8.3.4.1. 先决条件
  • 正在运行的 Red Hat Ceph Storage 3 集群。
  • 安装 iSCSI 网关软件。
  • 备用节点或现有 OSD 节点。
8.3.4.2. 使用 Ansible 添加更多 iSCSI 网关

您可以使用 Ansible 自动化实用程序添加更多 iSCSI 网关。此流程将两个 iSCSI 网关的默认安装扩展到四个 iSCSI 网关。您可以在独立节点上配置 iSCSI 网关,也可以与现有 OSD 节点共存。

先决条件

  • 正在运行的 Red Hat Ceph Storage 3 集群。
  • 安装 iSCSI 网关软件。
  • 在 Ansible 管理节点上具有 root 用户访问权限.
  • 在新节点上具有 root 用户访问权限.

流程

  1. 在新 iSCSI 网关节点上,启用 Red Hat Ceph Storage 3 Tools 存储库。

    [root@iscsigw ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
    Copy to Clipboard Toggle word wrap

    如需了解更多详细信息 ,请参阅 Red Hat Enterprise Linux 安装指南中的启用 Red Hat Ceph Storage 存储库 一节

  2. 安装 ceph-iscsi-config 软件包:

    [root@iscsigw ~]# yum install ceph-iscsi-config
    Copy to Clipboard Toggle word wrap
  3. 附加到网关组的 /etc/ansible/hosts 文件中的列表:

    示例

    [iscsigws]
    ...
    ceph-igw-3
    ceph-igw-4
    Copy to Clipboard Toggle word wrap

    注意

    如果与 OSD 节点共存 iSCSI 网关,请将 OSD 节点添加到 [iscsigws] 部分中。

  4. 打开 /usr/share/ceph-ansible/group_vars/iscsigws.yml 文件进行编辑,并将带有 IPv4 地址的额外两个 iSCSI 网关附加到 gateway_ip_list 选项:

    示例

    gateway_ip_list: 10.172.19.21,10.172.19.22,10.172.19.23,10.172.19.24
    Copy to Clipboard Toggle word wrap

    重要

    gateway_ip_list 选项提供 IP 地址是必需的。您不能混合使用 IPv4 和 IPv6 地址。

  5. 在 Ansible 管理节点上,以 root 用户身份执行 Ansible playbook:

    # cd /usr/share/ceph-ansible
    # ansible-playbook site.yml
    Copy to Clipboard Toggle word wrap
  6. 从 iSCSI 启动器,重新登录以使用新添加的 iSCSI 网关。

其它资源

8.3.4.3. 使用 gwcli 添加更多 iSCSI 网关

您可以使用 gwcli 命令行工具添加更多 iSCSI 网关。此流程将两个 iSCSI 网关的默认扩展为四个 iSCSI 网关。

先决条件

  • 正在运行的 Red Hat Ceph Storage 3 集群。
  • 安装 iSCSI 网关软件。
  • 具有 root 用户对新节点或 OSD 节点的访问权限.

流程

  1. 如果 Ceph iSCSI 网关不在 OSD 节点上并置,则将位于 /etc/ceph/ 目录中的 Ceph 配置文件从存储集群中正在运行的 Ceph 节点复制到新的 iSCSI 网关节点。Ceph 配置文件必须存在于 /etc/ceph/ 目录下的 iSCSI 网关节点上。
  2. 安装和配置 Ceph 命令行界面。详情请参阅 Red Hat Enterprise Linux 的 Red Hat Ceph Storage 3 安装指南中的安装 Ceph 命令行界面 一章。
  3. 在新 iSCSI 网关节点上,启用 Red Hat Ceph Storage 3 Tools 存储库。

    [root@iscsigw ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
    Copy to Clipboard Toggle word wrap

    如需了解更多详细信息 ,请参阅 Red Hat Enterprise Linux 安装指南中的启用 Red Hat Ceph Storage 存储库 一节

  4. 安装 ceph-iscsi-clitcmu-runner 软件包:

    [root@iscsigw ~]# yum install ceph-iscsi-cli tcmu-runner
    Copy to Clipboard Toggle word wrap
    1. 如果需要,安装 openssl 软件包:

      [root@iscsigw ~]# yum install openssl
      Copy to Clipboard Toggle word wrap
  5. 在其中一个现有 iSCSI 网关节点上,编辑 /etc/ceph/iscsi-gateway.cfg 文件,并使用新 iSCSI 网关节点的新 IP 地址附加 trusted_ip_list 选项。

    示例

    [config]
    ...
    trusted_ip_list = 10.172.19.21,10.172.19.22,10.172.19.23,10.172.19.24
    Copy to Clipboard Toggle word wrap

    有关这些选项的更多详细信息 ,请参阅使用 Ansible 表配置 iSCSI 目标

  6. 将更新的 /etc/ceph/iscsi-gateway.cfg 文件复制到所有 iSCSI 网关节点。

    重要

    在所有 iSCSI 网关节点上,iscsi-gateway.cfg 文件都必须相同。

  7. (可选)如果使用 SSL,还可以将 ~/ssl-keys/iscsi-gateway.crt~/ssl-keys/iscsi-gateway.pem~/ssl-keys/iscsi-gateway-pub.key~/ssl-keys/iscsi-gateway.key 文件从其中一个现有 iSCSI 网关节点复制到新 iSCSI 网关节点上的 /etc/ceph/ 目录中。
  8. 在新的 iSCSI 网关节点上启用并启动 API 服务:

    [root@iscsigw ~]# systemctl enable rbd-target-api
    [root@iscsigw ~]# systemctl start rbd-target-api
    Copy to Clipboard Toggle word wrap
  9. 启动 iSCSI 网关命令行界面:

    [root@iscsigw ~]# gwcli
    Copy to Clipboard Toggle word wrap
  10. 使用 IPv4 或 IPv6 地址创建 iSCSI 网关:

    语法

    >/iscsi-target create iqn.2003-01.com.redhat.iscsi-gw:_TARGET_NAME_
    > goto gateways
    > create ISCSI_GW_NAME IP_ADDR_OF_GW
    > create ISCSI_GW_NAME IP_ADDR_OF_GW
    Copy to Clipboard Toggle word wrap

    示例

    >/iscsi-target create iqn.2003-01.com.redhat.iscsi-gw:ceph-igw
    > goto gateways
    > create ceph-gw-3 10.172.19.23
    > create ceph-gw-4 10.172.19.24
    Copy to Clipboard Toggle word wrap

    重要

    您不能混合使用 IPv4 和 IPv6 地址。

  11. 从 iSCSI 启动器,重新登录以使用新添加的 iSCSI 网关。

其它资源

8.4. 配置 iSCSI 启动器

Red Hat Ceph Storage 支持三个操作系统中的 iSCSI 启动器来连接到 Ceph iSCSI 网关:

8.4.1. Red Hat Enterprise Linux 的 iSCSI 启动器

先决条件:

  • 必须安装软件包 iscsi-initiator-utils-6.2.0.873-35 或更高版本
  • 必须安装软件包 device-mapper-multipath-0.4.9-99 或更新版本

安装软件:

  1. 安装 iSCSI 启动器和多路径工具:

    # yum install iscsi-initiator-utils
    # yum install device-mapper-multipath
    Copy to Clipboard Toggle word wrap

设置启动器名称

  1. 编辑 /etc/iscsi/initiatorname.iscsi 文件。

    注意

    启动器名称必须与 Ansible client_connections 选项中使用的启动器名称匹配,或者使用 gwcli 在初始设置中使用什么。

配置多路径 IO:

  1. 创建默认 /etc/multipath.conf 文件并启用 multipathd 服务:

    # mpathconf --enable --with_multipathd y
    Copy to Clipboard Toggle word wrap
  2. 将以下内容添加到 /etc/multipath.conf 文件中:

    devices {
            device {
                    vendor                 "LIO-ORG"
                    hardware_handler       "1 alua"
                    path_grouping_policy   "failover"
                    path_selector          "queue-length 0"
                    failback               60
                    path_checker           tur
                    prio                   alua
                    prio_args              exclusive_pref_bit
                    fast_io_fail_tmo       25
                    no_path_retry          queue
            }
    }
    Copy to Clipboard Toggle word wrap
  3. 重启 multipathd 服务:

    # systemctl reload multipathd
    Copy to Clipboard Toggle word wrap

CHAP Setup 和 iSCSI Discovery/Login:

  1. 通过相应地更新 /etc/iscsi/iscsid.conf 文件来提供 CHAP 用户名和密码。

    示例

    node.session.auth.authmethod = CHAP
    node.session.auth.username = user
    node.session.auth.password = password
    Copy to Clipboard Toggle word wrap

    注意

    如果更新这些选项,则必须重新运行 iscsiadm discovery 命令。

  2. 发现目标门户:

    # iscsiadm -m discovery -t st -p 192.168.56.101
    192.168.56.101:3260,1 iqn.2003-01.org.linux-iscsi.rheln1
    192.168.56.102:3260,2 iqn.2003-01.org.linux-iscsi.rheln1
    Copy to Clipboard Toggle word wrap
  3. 登录到目标:

    # iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.rheln1 -l
    Copy to Clipboard Toggle word wrap

查看多路径 IO 配置:

多路径守护进程(multipath)将根据 multipath.conf 设置自动设置设备。运行 multipath 命令显示故障切换配置中的设备设置,每个路径都有一个优先级组,例如:

# multipath -ll
mpathbt (360014059ca317516a69465c883a29603) dm-1 LIO-ORG ,IBLOCK
size=1.0G features='0' hwhandler='1 alua' wp=rw
|-+- policy='queue-length 0' prio=50 status=active
| `- 28:0:0:1 sde  8:64  active ready running
`-+- policy='queue-length 0' prio=10 status=enabled
  `- 29:0:0:1 sdc  8:32  active ready running
Copy to Clipboard Toggle word wrap

multipath -ll 输出 prio 值指示 ALUA 状态,其中 prio=50 表示它是在 ALUA Active-Optimized 状态下拥有 iSCSI 网关的路径,prio=10 表示它是一个 Active-non-Optmized 路径。status 字段指示正在使用的路径,其中 active 表示当前使用的路径,enabled 表示在 active 失败时的故障转移路径。要将设备名称(例如 multipath -ll 输出中的 sde )与 iSCSI 网关匹配,请运行以下命令:

# iscsiadm -m session -P 3
Copy to Clipboard Toggle word wrap

Persistent Portal 值是分配给 gwcli 中列出的 iSCSI 网关的 IP 地址或 gateway_ip_list 中列出的 iSCSI 网关的 IP 地址(如果使用 Ansible)。

8.4.2. Red Hat Virtualization 的 iSCSI 启动器

先决条件:

  • Red Hat Virtualization 4.1
  • 在所有 Red Hat Virtualization 节点上配置了 MPIO 设备
  • 必须安装软件包 iscsi-initiator-utils-6.2.0.873-35 或更高版本
  • 必须安装软件包 device-mapper-multipath-0.4.9-99 或更新版本

配置多路径 IO:

  1. 更新 /etc/multipath/conf.d/DEVICE_NAME.conf 文件,如下所示:

    devices {
            device {
                    vendor                 "LIO-ORG"
                    hardware_handler       "1 alua"
                    path_grouping_policy   "failover"
                    path_selector          "queue-length 0"
                    failback               60
                    path_checker           tur
                    prio                   alua
                    prio_args              exclusive_pref_bit
                    fast_io_fail_tmo       25
                    no_path_retry          queue
            }
    }
    Copy to Clipboard Toggle word wrap
  2. 重启 multipathd 服务:

    # systemctl reload multipathd
    Copy to Clipboard Toggle word wrap

添加 iSCSI 存储

  1. 单击 Storage 资源选项卡,以列出现有的存储域。
  2. 单击 New Domain 按钮打开 New Domain 窗口。
  3. 输入新存储域的名称
  4. 使用 Data Center 下拉菜单选择数据中心。
  5. 使用下拉菜单选择 Domain FunctionStorage Type。与所选域功能不兼容的存储域类型不可用。
  6. Use Host 字段中选择一个活动主机。如果这不是数据中心中的第一个数据域,您必须选择数据中心的 SPM 主机。
  7. 当选择 iSCSI 作为存储类型时,新建域 窗口会自动显示已知带有未使用的 LUN 的目标。如果没有列出您要添加存储的目标,您可以使用目标发现来找到目标,否则继续下一步。

    1. 单击 Discover Targets 以启用目标发现选项。发现目标并登录后,新建域 窗口将自动显示环境未使用的目标。

      注意

      环境外部的 LUN 也会显示。

      您可以使用 发现目标 选项在多个目标或同一 LUN 的多个路径中添加 LUN。

    2. Address 字段中输入 iSCSI 主机的完全限定域名或 IP 地址。
    3. Port 字段中输入在浏览目标时,用于连接到主机的端口。默认值为 3260
    4. 如果使用 Challenge Handshake Authentication Protocol (CHAP) 来保护存储,请选中 User Authentication 复选框。输入 CHAP 用户名CHAP 密码
    5. 单击 Discover 按钮。
    6. 从发现结果中选择要使用的目标,然后单击 登录 按钮。或者,单击 Login All 以登录所有发现的目标。

      重要

      如果需要多个路径访问,请确保通过所有必要的路径发现并登录到目标。目前不支持修改存储域以添加其他路径。

  8. 单击所需目标旁边的 + 按钮。这将展开条目并显示与目标连接的所有未使用的 LUN。
  9. 选中您正在使用的每个 LUN 的复选框,以创建存储域。
  10. 另外,您还可以配置高级参数。

    1. 单击 Advanced Parameters
    2. Warning Low Space Indicator 字段中输入一个百分比值。如果存储域中的可用空间低于这个百分比,则会向用户显示警告消息并记录日志。
    3. Critical Space Action Blocker 字段中输入一个 GB 值。如果存储域中可用的可用空间低于此值,则会向用户和记录错误消息显示,并且任何占用空间的新操作(即便是临时使用)都会被阻止。
    4. 选中 Wipe After Delete 复选框以启用 wipe after delete 选项。可以在创建域后编辑此选项,但是这样做不会在删除已存在的磁盘属性后更改擦除。
    5. 选中 Discard After Delete 复选框,以在删除后启用丢弃选项。可在创建域后编辑此选项。此选项仅适用于块存储域。
  11. 单击 确定 以创建存储域并关闭该窗口。

8.4.3. Microsoft Windows 的 iSCSI 启动器

先决条件:

  • Microsoft Windows Server 2016

iSCSI 启动器、发现和设置:

  1. 安装 iSCSI 启动器驱动程序和 MPIO 工具。
  2. 启动 MPIO 程序,单击 Discover Multi-Paths 选项卡,选中 iSCSI 设备的添加支持 框,然后单击 Add。这个更改需要重启。
  3. 在 iSCSI Initiator Properties 窗口中,在 Discovery 标签页 1 中添加一个目标门户。输入 Ceph iSCSI 网关的 IP 地址或 DNS 名称 2 和端口 3

  4. Targets 选项卡中 1 ,选择目标并点击 Connect 2

  5. Connect To Target 窗口中,选择 Enable multi-path 选项 1 ,然后点击 高级 按钮 2

  6. Connect using 部分下,选择一个 目标门户 IP 1 。选择 Enable CHAP login on 2 ,并从 Ceph iSCSI Ansible 客户端凭证部分输入 NameTarget secret3 ,然后点 OK 4

    重要

    Windows Server 2016 不接受小于 12 字节的 CHAP secret。

  7. 对设置 iSCSI 网关时定义的每个目标门户重复步骤 5 和 6。
  8. 如果启动器名称与初始设置期间使用的启动器名称不同,请重命名启动器名称。在 iSCSI 启动器属性 窗口中,在 配置 选项卡 1 中,点击 更改 按钮 2 来重命名启动器名称。

多路径 IO 设置:

配置 MPIO 负载均衡策略,设置超时和重试选项在 mpclaim 命令中使用 PowerShell。iSCSI 启动器工具配置剩余的选项。

注意

红帽建议将 PDORemovePeriod 选项从 PowerShell 增加到 120 秒。这个值可能需要根据应用程序进行调整。当所有路径都停机且 120 秒过期时,操作系统将启动失败的 IO 请求。

Set-MPIOSetting -NewPDORemovePeriod 120
Copy to Clipboard Toggle word wrap
  1. 设置故障切换策略
mpclaim.exe -l -m 1
Copy to Clipboard Toggle word wrap
  1. 验证故障转移策略
mpclaim -s -m
MSDSM-wide Load Balance Policy: Fail Over Only
Copy to Clipboard Toggle word wrap
  1. 使用 iSCSI 启动器工具,从 Targets 选项卡 1Devices…​ 按钮 2

  2. Devices 窗口中选择一个磁盘 1 并点 MPIO…​ 按钮 2

  3. Device Details 窗口中显示到每个目标门户的路径。如果使用 ceph-ansible 设置方法,iSCSI 网关将使用 ALUA 告知 iSCSI 启动器将哪些路径和 iSCSI 网关用作主路径。负载均衡策略 Fail Over Only 必须被选择

  4. 从 PowerShell,查看多路径配置
mpclaim -s -d $MPIO_DISK_ID
Copy to Clipboard Toggle word wrap

+ 将 $MPIO_DISK_ID 替换为适当的磁盘标识符。

注意

将有一个 Active/Optimized 路径,它是拥有 LUN 的 iSCSI 网关节点的路径,并为每个其他 iSCSI 网关节点有一个 Active/Unoptimized 路径。

tuning:

考虑使用以下 registry 设置:

  • Windows 磁盘超时

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Disk
    Copy to Clipboard Toggle word wrap

    TimeOutValue = 65
    Copy to Clipboard Toggle word wrap

  • Microsoft iSCSI Initiator Driver

    HKEY_LOCAL_MACHINE\\SYSTEM\CurrentControlSet\Control\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}\<Instance_Number>\Parameters
    Copy to Clipboard Toggle word wrap

    LinkDownTime = 25
    SRBTimeoutDelta = 15
    Copy to Clipboard Toggle word wrap

8.4.4. VMware ESX vSphere Web 客户端的 iSCSI 启动器

先决条件:

  • VMware ESX 6.5 或更高版本使用与 VMFS 6 的虚拟机兼容性 6.5
  • 访问 vSphere Web 客户端
  • 对 VMware ESX 主机的 root 访问权限,以执行 esxcli 命令

iSCSI 发现和多路径设备设置:

  1. 禁用 HardwareAcceleratedMove (XCOPY):

    # esxcli system settings advanced set --int-value 0 --option /DataMover/HardwareAcceleratedMove
    Copy to Clipboard Toggle word wrap
  2. 启用 iSCSI 软件。在 Navigator 窗格中点 Storage 1 。选择 适配器选项卡 2 。点 Confgure iSCSI 3 :

  3. 验证名称和别名中的启动器名称 1

    注意

    如果启动器名称与初始设置期间使用 gwcli 创建客户端时使用的启动器名称不同,或者如果 Ansible client_connections: 客户端 变量中使用的启动器名称不同,请按照以下步骤更改启动器名称。在 VMware ESX 主机中运行这些 esxcli 命令。

    1. 获取 iSCSI 软件的适配器名称:

      > esxcli iscsi adapter list
      > Adapter  Driver     State   UID            Description
      > -------  ---------  ------  -------------  ----------------------
      > vmhba64  iscsi_vmk  online  iscsi.vmhba64  iSCSI Software Adapter
      Copy to Clipboard Toggle word wrap
    2. 设置 initiator 名称:

      语法

      > esxcli iscsi adapter set -A <adaptor_name> -n <initiator_name>
      Copy to Clipboard Toggle word wrap

      示例

      > esxcli iscsi adapter set -A vmhba64 -n iqn.1994-05.com.redhat:rh7-client
      Copy to Clipboard Toggle word wrap

  4. 配置 CHAP。展开 CHAP 身份验证 部分 1 。选择"不使用 CHAP,除非目标需要" 2 。输入初始设置中使用的 CHAP NameSecret 3 凭证,无论是使用 gwcli auth 命令还是 Ansible client_connections: 凭证 变量。验证 Mutual CHAP 验证部分 4 是否选择了 "Do not use CHAP"。

    警告

    vSphere Web 客户端中有一个错误,最初不使用 CHAP 设置。在 Ceph iSCSI 网关节点上,在内核日志中,您会看到以下错误来指示此错误:

    > kernel: CHAP user or password not set for Initiator ACL
    > kernel: Security negotiation failed.
    > kernel: iSCSI Login negotiation failed.
    Copy to Clipboard Toggle word wrap

    要解决这个问题,请使用 esxcli 命令配置 CHAP 设置。authname 参数是 vSphere Web 客户端中的 Name

    > esxcli iscsi adapter auth chap set --direction=uni --authname=myiscsiusername --secret=myiscsipassword --level=discouraged -A vmhba64
    Copy to Clipboard Toggle word wrap
  5. 配置 iSCSI 设置。扩展 高级设置 1 。将 RecoveryTimeout 值设置为 25 2

  6. 设置发现地址。在 Dynamic target 部分中 1 ,点 Add dynamic target 2 。在 地址 3 下,为其中一个 Ceph iSCSI 网关添加 IP 地址。只需要添加一个 IP 地址。最后,单击 保存配置 按钮 4 。在主界面的 Devices 选项卡中,您将看到 RBD 镜像。

    注意

    使用 ALUA SATP 和 MRU PSP 自动配置 LUN。不能使用其他 SATP 和 PSP。这可以通过 esxcli 命令验证:

    esxcli storage nmp path list -d eui.$DEVICE_ID
    Copy to Clipboard Toggle word wrap

    $DEVICE_ID 替换为适当的设备标识符。

  7. 验证多路径是否已正确设置。

    1. 列出设备:

      示例

      # esxcli storage nmp device list | grep iSCSI
         Device Display Name: LIO-ORG iSCSI Disk (naa.6001405f8d087846e7b4f0e9e3acd44b)
         Device Display Name: LIO-ORG iSCSI Disk (naa.6001405057360ba9b4c434daa3c6770c)
      Copy to Clipboard Toggle word wrap

    2. 从上一步中获取 Ceph iSCSI 磁盘的多路径信息:

      示例

      # esxcli storage nmp path list -d naa.6001405f8d087846e7b4f0e9e3acd44b
      
      iqn.2005-03.com.ceph:esx1-00023d000001,iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw,t,1-naa.6001405f8d087846e7b4f0e9e3acd44b
         Runtime Name: vmhba64:C0:T0:L0
         Device: naa.6001405f8d087846e7b4f0e9e3acd44b
         Device Display Name: LIO-ORG iSCSI Disk (naa.6001405f8d087846e7b4f0e9e3acd44b)
         Group State: active
         Array Priority: 0
         Storage Array Type Path Config: {TPG_id=1,TPG_state=AO,RTP_id=1,RTP_health=UP}
         Path Selection Policy Path Config: {current path; rank: 0}
      
      iqn.2005-03.com.ceph:esx1-00023d000002,iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw,t,2-naa.6001405f8d087846e7b4f0e9e3acd44b
         Runtime Name: vmhba64:C1:T0:L0
         Device: naa.6001405f8d087846e7b4f0e9e3acd44b
         Device Display Name: LIO-ORG iSCSI Disk (naa.6001405f8d087846e7b4f0e9e3acd44b)
         Group State: active unoptimized
         Array Priority: 0
         Storage Array Type Path Config: {TPG_id=2,TPG_state=ANO,RTP_id=2,RTP_health=UP}
         Path Selection Policy Path Config: {non-current path; rank: 0}
      Copy to Clipboard Toggle word wrap

      在示例输出中,每个路径都有一个带有以下部分的 iSCSI/SCSI 名称:

      Initiator name = iqn.2005-03.com.ceph:esx1 ISID = 00023d000002 Target name = iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw Target port group = 2 Device id = naa.6001405f8d087846e7b4f0e9e3acd44b

      activeGroup State 值表示这是到 iSCSI 网关的 Active-Optimized 路径。gwcli 命令列出 active 作为 iSCSI 网关所有者。如果 active 路径进入 dead 状态,则其余路径将具有 未优化的 Group State 值,它将是故障转移路径。

  8. 要匹配其对应 iSCSI 网关的所有路径,请运行以下命令:

    # esxcli iscsi session connection list
    Copy to Clipboard Toggle word wrap

    输出示例

    vmhba64,iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw,00023d000001,0
       Adapter: vmhba64
       Target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw
       ISID: 00023d000001
       CID: 0
       DataDigest: NONE
       HeaderDigest: NONE
       IFMarker: false
       IFMarkerInterval: 0
       MaxRecvDataSegmentLength: 131072
       MaxTransmitDataSegmentLength: 262144
       OFMarker: false
       OFMarkerInterval: 0
       ConnectionAddress: 10.172.19.21
       RemoteAddress: 10.172.19.21
       LocalAddress: 10.172.19.11
       SessionCreateTime: 08/16/18 04:20:06
       ConnectionCreateTime: 08/16/18 04:20:06
       ConnectionStartTime: 08/16/18 04:30:45
       State: logged_in
    
    vmhba64,iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw,00023d000002,0
       Adapter: vmhba64
       Target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw
       ISID: 00023d000002
       CID: 0
       DataDigest: NONE
       HeaderDigest: NONE
       IFMarker: false
       IFMarkerInterval: 0
       MaxRecvDataSegmentLength: 131072
       MaxTransmitDataSegmentLength: 262144
       OFMarker: false
       OFMarkerInterval: 0
       ConnectionAddress: 10.172.19.22
       RemoteAddress: 10.172.19.22
       LocalAddress: 10.172.19.12
       SessionCreateTime: 08/16/18 04:20:06
       ConnectionCreateTime: 08/16/18 04:20:06
       ConnectionStartTime: 08/16/18 04:30:41
       State: logged_in
    Copy to Clipboard Toggle word wrap

    将路径名称与 ISID 值匹配,RemoteAddress 值是自有 iSCSI 网关的 IP 地址。

8.5. 使用 Ansible 升级 Ceph iSCSI 网关

可以使用专为滚动升级设计的 Ansible playbook 升级 Red Hat Ceph Storage iSCSI 网关。

先决条件

  • 正在运行的 Ceph iSCSI 网关。
  • 一个正在运行的 Red Hat Ceph Storage 集群。

流程

  1. 验证 Ansible 清单文件(/etc/ansible/hosts)中列出了正确的 iSCSI 网关节点。
  2. 运行滚动升级 playbook:

    [admin@ansible ~]$ ansible-playbook rolling_update.yml
    Copy to Clipboard Toggle word wrap
  3. 运行站点 playbook 来完成升级:

    [admin@ansible ~]$ ansible-playbook site.yml --limit iscsigws
    Copy to Clipboard Toggle word wrap

8.6. 使用命令行界面升级 Ceph iSCSI 网关

可以通过一次升级一个 iSCSI 网关,以滚动方式升级 Red Hat Ceph Storage iSCSI 网关。

警告

在升级和重启 Ceph OSD 时,不要升级 iSCSI 网关。等待 OSD 升级完成并且存储集群处于 active+clean 状态。

先决条件

  • 正在运行的 Ceph iSCSI 网关。
  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 对 iSCSI 网关节点具有 root 访问权限.

流程

  1. 更新 iSCSI 网关软件包:

    [root@igw ~]# yum update ceph-iscsi-config ceph-iscsi-cli
    Copy to Clipboard Toggle word wrap
  2. 停止 iSCSI 网关守护进程:

    [root@igw ~]# systemctl stop rbd-target-api
    [root@igw ~]# systemctl stop rbd-target-gw
    Copy to Clipboard Toggle word wrap
  3. 验证 iSCSI 网关守护进程是否已完全停止:

    [root@igw ~]# systemctl status rbd-target-gw
    Copy to Clipboard Toggle word wrap
    1. 如果 rbd-target-gw 服务成功停止,则跳转到第 4 步。
    2. 如果 rbd-target-gw 服务无法停止,请执行以下步骤:

      1. 如果 targetcli 软件包没有安装,请安装 targetcli 软件包:

        [root@igw ~]# yum install targetcli
        Copy to Clipboard Toggle word wrap
      2. 检查现有的目标对象:

        [root@igw ~]# targetlci ls
        Copy to Clipboard Toggle word wrap

        输出示例

        o- / ............................................................. [...]
        o- backstores .................................................... [...]
        | o- user:rbd ..................................... [Storage Objects: 0]
        o- iscsi .................................................. [Targets: 0]
        Copy to Clipboard Toggle word wrap

        如果 backstoresStorage Objects 为空,则 iSCSI 目标已完全关闭,您可以跳过到第 4 步。

      3. 如果您仍然有目标对象,请运行以下命令强制删除所有目标对象:

        [root@igw ~]# targetlci clearconfig confirm=True
        Copy to Clipboard Toggle word wrap
        警告

        如果多个服务正在使用 iSCSI 目标,请以交互模式运行 targetcli 以删除这些特定对象。

  4. 更新 tcmu-runner 软件包:

    [root@igw ~]# yum update tcmu-runner
    Copy to Clipboard Toggle word wrap
  5. 停止 tcmu-runner 服务:

    [root@igw ~]# systemctl stop tcmu-runner
    Copy to Clipboard Toggle word wrap
  6. 按照以下顺序重启所有 iSCSI 网关服务:

    [root@igw ~]# systemctl start tcmu-runner
    [root@igw ~]# systemctl start rbd-target-gw
    [root@igw ~]# systemctl start rbd-target-api
    Copy to Clipboard Toggle word wrap

8.7. 监控 iSCSI 网关

红帽为 Ceph iSCSI 网关环境提供额外的工具,用于监控导出的 RADOS 块设备(RBD)镜像的性能。

gwtop 工具是一种类似于 top 的工具,显示 RBD 镜像的聚合性能指标,这些指标通过 iSCSI 导出到客户端。指标来源于性能指标域代理 (PMDA)。来自 Linux-IO 目标 (LIO) PMDA 的信息用于使用连接的客户端及其关联的 I/O 指标列出每个导出的 RBD 镜像。

要求:

  • 正在运行的 Ceph iSCSI 网关

安装:

root 用户身份在 iSCSI 网关节点上执行以下步骤。

  1. 启用 Ceph 工具存储库:

    # subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-rpms
    Copy to Clipboard Toggle word wrap
  2. 安装 ceph-iscsi-tools 软件包:

    # yum install ceph-iscsi-tools
    Copy to Clipboard Toggle word wrap
  3. 安装性能 co-pilot 软件包:

    # yum install pcp
    Copy to Clipboard Toggle word wrap
    注意

    有关性能 co-pilot 的详情,请查看 Red Hat Enterprise Linux 性能调节指南

  4. 安装 LIO PMDA 软件包:

    # yum install pcp-pmda-lio
    Copy to Clipboard Toggle word wrap
  5. 启用并启动性能 co-pilot 服务:

    # systemctl enable pmcd
    # systemctl start pmcd
    Copy to Clipboard Toggle word wrap
  6. 注册 pcp-pmda-lio 代理:

    cd /var/lib/pcp/pmdas/lio
    ./Install
    Copy to Clipboard Toggle word wrap

默认情况下,gwtop 假定 iSCSI 网关配置对象存储在 rbd 池中名为 gateway.conf 的 RADOS 对象中。此配置定义收集性能统计数据时要联系的 iSCSI 网关。这可以通过使用 -g-c 标志来覆盖。如需了解更多详细信息,请参阅 gwtop --help

LIO 配置决定从性能联合传送到哪一类性能统计数据。当 gwtop 启动时,它会查看 LIO 配置,如果找到用户空间磁盘,则 gwtop 会自动选择 LIO 收集器。

gwtop Outputs 示例:

对于用户支持的存储 (TCMU) 设备:

gwtop  2/2 Gateways   CPU% MIN:  4 MAX:  5    Network Total In:    2M  Out:    3M   10:20:00
Capacity:   8G    Disks:   8   IOPS:  503   Clients:  1   Ceph: HEALTH_OK          OSDs:   3
Pool.Image       Src    Size     iops     rMB/s     wMB/s   Client
iscsi.t1703             500M        0      0.00      0.00
iscsi.testme1           500M        0      0.00      0.00
iscsi.testme2           500M        0      0.00      0.00
iscsi.testme3           500M        0      0.00      0.00
iscsi.testme5           500M        0      0.00      0.00
rbd.myhost_1      T       4G      504      1.95      0.00   rh460p(CON)
rbd.test_2                1G        0      0.00      0.00
rbd.testme              500M        0      0.00      0.00
Copy to Clipboard Toggle word wrap

Client 列中,(CON) 表示 iSCSI 启动器 (client) 当前已登录 iSCSI 网关。如果显示 -multi-,则多个客户端映射到单个 RBD 镜像。

警告

不支持 SCSI 持久保留。如果使用集群感知文件系统或不依赖 SCSI 持久保留的集群软件,则支持将多个 iSCSI 启动器映射到 RBD 镜像。例如,支持使用 ATS 的 VMware vSphere 环境,但不支持使用 Microsoft 的集群服务器 (MSCS)。

附录 A. iscsigws.yml 文件示例

# Variables here are applicable to all host groups NOT roles

# This sample file generated by generate_group_vars_sample.sh

# Dummy variable to avoid error because ansible does not recognize the
# file as a good configuration file when no variable in it.
dummy:

# You can override vars by using host or group vars

###########
# GENERAL #
###########
# Specify the iqn for ALL gateways. This iqn is shared across the gateways, so an iscsi
# client sees the gateway group as a single storage subsystem.
#gateway_iqn: "iqn.2003-01.com.redhat.iscsi-gw:ceph-igw"

# gateway_ip_list provides a list of the IP Addrresses - one per gateway - that will be used
# as an iscsi target portal ip. The list must be comma separated - and the order determines
# the sequence of TPG's within the iscsi target across each gateway. Once set, additional
# gateways can be added, but the order must *not* be changed.
#gateway_ip_list: 0.0.0.0

# rbd_devices defines the images that should be created and exported from the iscsi gateways.
# If the rbd does not exist, it will be created for you. In addition you may increase the
# size of rbd's by changing the size parameter and rerunning the playbook. A size value lower
# than the current size of the rbd is ignored.
#
# the 'host' parameter defines which of the gateway nodes should handle the physical
# allocation/expansion or removal of the rbd
# to remove an image, simply use a state of 'absent'. This will first check the rbd is not allocated
# to any client, and the remove it from LIO and then delete the rbd image
#
# NB. this variable definition can be commented out to bypass LUN management
#
# Example:
#
#rbd_devices:
#  - { pool: 'rbd', image: 'ansible1', size: '30G', host: 'ceph-1', state: 'present' }
#  - { pool: 'rbd', image: 'ansible2', size: '15G', host: 'ceph-1', state: 'present' }
#  - { pool: 'rbd', image: 'ansible3', size: '30G', host: 'ceph-1', state: 'present' }
#  - { pool: 'rbd', image: 'ansible4', size: '50G', host: 'ceph-1', state: 'present' }
#rbd_devices: {}

# client_connections defines the client ACL's to restrict client access to specific LUNs
# The settings are as follows;
# - image_list is a comma separated list of rbd images of the form <pool name>.<rbd_image_name>
# - chap supplies the user and password the client will use for authentication of the
#   form <user>/<password>
# - status shows the intended state of this client definition - 'present' or 'absent'
#
# NB. this definition can be commented out to skip client (nodeACL) management
#
# Example:
#
#client_connections:
#  - { client: 'iqn.1994-05.com.redhat:rh7-iscsi-client', image_list: 'rbd.ansible1,rbd.ansible2', chap: 'rh7-iscsi-client/redhat', status: 'present' }
#  - { client: 'iqn.1991-05.com.microsoft:w2k12r2', image_list: 'rbd.ansible4', chap: 'w2k12r2/microsoft_w2k12', status: 'absent' }

#client_connections: {}


# Whether or not to generate secure certificate to iSCSI gateway nodes
#generate_crt: False


##################
# RBD-TARGET-API #
##################
# Optional settings related to the CLI/API service
#api_user: admin
#api_password: admin
#api_port: 5000
#api_secure: false
#loop_delay: 1
#trusted_ip_list: 192.168.122.1


##########
# DOCKER #
##########

# Resource limitation
# For the whole list of limits you can apply see: docs.docker.com/engine/admin/resource_constraints
# Default values are based from: https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/2/html/red_hat_ceph_storage_hardware_guide/minimum_recommendations
# These options can be passed using the 'ceph_mds_docker_extra_env' variable.

# TCMU_RUNNER resource limitation
#ceph_tcmu_runner_docker_memory_limit: 1g
#ceph_tcmu_runner_docker_cpu_limit: 1

# RBD_TARGET_GW resource limitation
#ceph_rbd_target_gw_docker_memory_limit: 1g
#ceph_rbd_target_gw_docker_cpu_limit: 1

# RBD_TARGET_API resource limitation
#ceph_rbd_target_api_docker_memory_limit: 1g
#ceph_rbd_target_api_docker_cpu_limit: 1
Copy to Clipboard Toggle word wrap

法律通告

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat