块设备指南

Red Hat Ceph Storage 4

管理、创建、配置和使用红帽 Ceph 存储设备

摘要

本文档描述了如何管理、创建、配置和使用红帽 Ceph 存储块设备。
红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。详情请查看 CTO Chris Wright 信息

第 1 章 Ceph 块设备简介

块是序列中的一组字节长度,例如 512 字节的数据块。将多个块组合到一个文件中,可用作您可以从中读取和写入的存储设备。基于块的存储接口是使用旋转介质存储数据的最常见的方式,例如:

  • 硬盘驱动器
  • CD/DVD 磁盘
  • 软盘
  • 传统的 9 个追踪磁带

块设备接口的普及使得虚拟块设备成为与红帽 Ceph 存储等海量数据存储系统交互的理想候选者。

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

  • 快照
  • 复制
  • 数据一致性

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

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

重要

若要使用 Ceph 块设备,您需要有权访问正在运行的 Ceph 存储集群。有关安装红帽 Ceph 存储集群的详细信息,请参阅《 红帽 Ceph 存储安装指南 》。

第 2 章 Ceph 块设备命令

作为存储管理员,熟悉 Ceph 的块设备命令可帮助您有效管理红帽 Ceph 存储集群。您可以创建和管理块设备池和镜像,以及启用和禁用 Ceph 块设备的各种功能。

2.1. 先决条件

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

2.2. 显示命令帮助

显示命令行界面中的命令和子命令在线帮助。

注意

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

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 客户端节点的根级别访问权限。

流程

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

    语法

    rbd help COMMAND SUBCOMMAND

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

    [root@rbd-client ~]# rbd help snap list

2.3. 创建块设备池

在使用块设备客户端之前,请确保已启用并初始化 rbd 的池。

注意

您必须先 创建一个池,然后才能将它指定为来源。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 客户端节点的根级别访问权限。

流程

  1. 要创建 rbd 池,请执行以下操作:

    语法

    ceph osd pool create POOL_NAME PG_NUM
    ceph osd pool application enable POOL_NAME rbd
    rbd pool init -p POOL_NAME

    示例

    [root@rbd-client ~]# ceph osd pool create example 128
    [root@rbd-client ~]# ceph osd pool application enable example rbd
    [root@rbd-client ~]# rbd pool init -p example

其它资源

  • 如需了解更多详细信息,请参见《 红帽 Ceph 存储策略指南》 中的 一章。

2.4. 创建块设备镜像

在添加块设备到节点之前,在 Ceph 存储集群中为其创建镜像。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 客户端节点的根级别访问权限。

流程

  1. 要创建块设备镜像,请执行以下命令:

    语法

    rbd create IMAGE_NAME --size MEGABYTES --pool POOL_NAME

    示例

    [root@rbd-client ~]# rbd create data --size 1024 --pool stack

    本例创建一个名为 data 的 1 GB 映像 该映像将信息存储在名为 stack 的池中。

    注意

    在创建映像之前,确保池存在。

其它资源

2.5. 列出块设备镜像

列出块设备镜像。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 客户端节点的根级别访问权限。

流程

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

    [root@rbd-client ~]# rbd ls
  2. 要列出特定池中的块设备,请执行以下命令,但将 POOL_NAME 替换为池的名称:

    语法

    rbd ls POOL_NAME

    示例

    [root@rbd-client ~]# rbd ls swimmingpool

2.6. 检索块设备镜像信息

检索块设备镜像上的信息。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 客户端节点的根级别访问权限。

流程

  1. 要从特定镜像检索信息,请执行以下操作,但将 IMAGE_NAME 替换为镜像的名称:

    语法

    rbd --image IMAGE_NAME info

    示例

    [root@rbd-client ~]# rbd --image foo info

  2. 要从池中的镜像检索信息,请执行以下命令,但将 IMAGE_NAME 替换为镜像的名称,并将 POOL_NAME 替换为池的名称:

    语法

    rbd --image IMAGE_NAME -p POOL_NAME info

    示例

    [root@rbd-client ~]# rbd --image bar -p swimmingpool info

2.7. 重新定义块设备镜像大小

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

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 客户端节点的根级别访问权限。

流程

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

    语法

    [root@rbd-client ~]# rbd resize --image IMAGE_NAME --size SIZE

2.8. 删除块设备镜像

删除块设备映像。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 客户端节点的根级别访问权限。

流程

  1. 要删除块设备,请执行以下操作,但将 IMAGE_NAME 替换为您要删除的镜像的名称:

    语法

    rbd rm IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd rm foo

  2. 要从池中移除块设备,请执行以下操作,但将 IMAGE_NAME 替换为要删除的镜像名称,并将 POOL_NAME 替换为池的名称:

    语法

    rbd rm IMAGE_NAME -p POOL_NAME

    示例

    [root@rbd-client ~]# rbd rm bar -p swimmingpool

2.9. 将块设备镜像移到回收站中

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

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

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 客户端节点的根级别访问权限。

流程

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

    语法

    rbd trash mv [POOL_NAME/] IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd trash mv test_img01

    镜像处于回收站中后,将分配一个唯一镜像 ID。

    注意

    如果需要使用任何回收选项,您稍后需要此镜像 ID 来指定镜像。

  2. 执行 rbd trash 列表,以列出回收站中镜像的 ID 列表。此命令还会返回镜像的预删除名称。此外,还有一个可选的 --image-id 参数,可用于 rbd info 和 rbd snap 命令。将 --image-idrbd info 命令搭配使用,查看垃圾箱中的镜像属性,并使用 rbd snap 从回收站中删除镜像的快照。
  3. 要从回收站中删除镜像,请执行以下操作:

    语法

    rbd trash rm [POOL_NAME/] IMAGE_ID

    示例

    [root@rbd-client ~]# rbd trash rm d35ed01706a0

    重要

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

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

    语法

    rbd trash restore [POOL_NAME/] IMAGE_ID

    示例

    [root@rbd-client ~]# rbd trash restore d35ed01706a0

2.10. 启用和禁用镜像功能

您可以在现有镜像上启用或禁用镜像功能,如 fast-diff、exclusive-lock、object-mapjournaling

注意

深层扁平 功能只能在现有的镜像上禁用,而不启用。要使用 深度扁平化,请在创建镜像时启用它。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 客户端节点的根级别访问权限。

流程

  1. 要启用某一功能,请执行以下操作:

    语法

    rbd feature enable POOL_NAME/IMAGE_NAME FEATURE_NAME

    1. 数据 池中的 image1 镜像 上启用 exclusive-lock 功能:

      示例

      [root@rbd-client ~]# rbd feature enable data/image1 exclusive-lock

      重要

      如果启用了 fast-diffobject-map 功能,则重建对象映射:

      + .Syntax

      rbd object-map rebuild POOL_NAME/IMAGE_NAME
  2. 要禁用某一功能,请执行以下操作:

    语法

    rbd feature disable POOL_NAME/IMAGE_NAME FEATURE_NAME

    1. 数据 池中禁用 image2 镜像的 fast-diff 功能:

      示例

      [root@rbd-client ~]# rbd feature disable data/image2 fast-diff

2.11. 使用镜像元数据

Ceph 支持将自定义镜像元数据添加为键值对。这些对没有任何严格格式。

此外,通过使用元数据,您可以为特定镜像设置 RADOS 块设备(RBD)配置参数。

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

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 客户端节点的根级别访问权限。

流程

  1. 设置新的元数据键值对:

    语法

    rbd image-meta set POOL_NAME/IMAGE_NAME KEY VALUE

    示例

    [root@rbd-client ~]# rbd image-meta set data/dataset last_update 2016-06-06

    本例将 last_update 键设置为 data 池中 dataset 镜像的 2016-06-06 值。

  2. 删除元数据键值对:

    语法

    rbd image-meta remove POOL_NAME/IMAGE_NAME KEY

    示例

    [root@rbd-client ~]# rbd image-meta remove data/dataset last_update

    本例从 data 池中的 dataset 镜像中删除 last_update 键值对。

  3. 查看键值:

    语法

    rbd image-meta get POOL_NAME/IMAGE_NAME KEY

    示例

    [root@rbd-client ~]# rbd image-meta get data/dataset last_update

    这个示例查看了 last_update 键的值。

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

    语法

    rbd image-meta list POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd data/dataset image-meta list

    本例列出了为 data 池中 dataset 镜像设置的元数据。

  5. 覆盖特定镜像的 Ceph 配置文件中设置的 RBD 镜像配置设置:

    语法

    rbd config image set POOL_NAME/IMAGE_NAME  PARAMETER VALUE

    示例

    [root@rbd-client ~]# rbd config image set data/dataset rbd_cache false

    本例为 data 池中的 dataset 镜像禁用 RBD 缓存。

其它资源

  • 如需了解可能配置选项列表,请参阅 Red Hat Ceph Storage Block Device Guide 中的 块设备常规选项 部分。

2.12. 在池之间移动映像

您可以在同一集群内的不同池之间移动 RADOS 块设备(RBD)镜像。迁移可以在复制池之间、纠删代码池之间,或者在复制池和纠删代码池之间迁移。

在此过程中,源镜像会复制到具有所有快照历史记录的目标镜像,也可选择性地复制到源镜像的父镜像中,以帮助保留稀疏性。源镜像是只读的,目标镜像是可写的。目标镜像在迁移过程中链接到源镜像。

您可以在使用新目标镜像时安全地在后台运行此过程。但是,在准备步骤前停止使用目标镜像的所有客户端,以确保更新使用该镜像的客户端以指向新的目标镜像。

重要

krbd 内核模块目前不支持实时迁移。

先决条件

  • 停止所有使用该源镜像的客户端。
  • 客户端节点的根级别访问权限。

流程

  1. 通过创建跨链接源和目标镜像的新目标镜像准备迁移:

    语法

    rbd migration prepare SOURCE_IMAGE TARGET_IMAGE

    替换:

    • SOURCE_IMAGE,带有要移动的镜像的名称。使用 POOL/IMAGE_NAME 格式。
    • TARGET_IMAGE,带有新镜像的名称。使用 POOL/IMAGE_NAME 格式。

    示例

    [root@rbd-client ~]# rbd migration prepare data/source stack/target

  2. 验证新目标镜像的状态,这应该 准备

    语法

    rbd status TARGET_IMAGE

    示例

    [root@rbd-client ~]# rbd status stack/target
    Watchers: none
    Migration:
                source: data/source (5e2cba2f62e)
                destination: stack/target (5e2ed95ed806)
                state: prepared

  3. (可选)使用新目标镜像名称重新启动客户端。
  4. 将源镜像复制到目标镜像:

    语法

    rbd migration execute TARGET_IMAGE

    示例

    [root@rbd-client ~]# rbd migration execute stack/target

  5. 确保迁移已完成:

    示例

    [root@rbd-client ~]# rbd status stack/target
    Watchers:
        watcher=1.2.3.4:0/3695551461 client.123 cookie=123
    Migration:
                source: data/source (5e2cba2f62e)
                destination: stack/target (5e2ed95ed806)
                state: executed

  6. 通过删除源镜像和目标镜像之间的跨链接来提交迁移,这也会移除源镜像:

    语法

    rbd migration commit TARGET_IMAGE

    示例

    [root@rbd-client ~]# rbd migration commit stack/target

    如果源镜像是一个或多个克隆的父镜像,请在确保克隆镜像不在使用后使用 --force 选项:

    示例

    [root@rbd-client ~]# rbd migration commit stack/target --force

  7. 如果您在准备步骤后没有重新启动客户端,请使用新目标镜像名称重启客户端。

2.13. rbdmap 服务

systemd 单元文件 rbdmap.service 包含在 ceph-common 软件包中。rbdmap.service 单元执行 rbdmap shell 脚本。

此脚本自动为一个或多个 RBD 镜像自动映射和取消 map RADOS 块设备(RBD)。脚本可以随时手动运行,但典型的用例是在引导时自动挂载 RBD 镜像,并在关机时卸载。脚本采用单个参数,可以是 map (用于挂载 或取消 map)以 卸载 RBD 镜像。脚本解析配置文件,默认为 /etc/ceph/rbdmap,但可使用名为 RBDMAPFILE 的环境变量来覆盖。配置文件的每一行对应于 RBD 镜像。

配置文件格式的格式如下:

IMAGE_SPEC RBD_OPTS

其中 IMAGE_SPEC 指定 POOL_NAME / IMAGE_NAME 或仅 IMAGE_NAME,在这种情况下,POOL_NAME 默认为 rbdRBD_OPTS 是要传递到底层 rbd map 命令的选项列表。这些参数及其值应指定为用逗号分开的字符串:

OPT1=VAL1,OPT2=VAL2,…​,OPT_N=VAL_N

这将导致脚本发出类似如下的 rbd map 命令:

RBD map POOLNAME/IMAGE_NAME --OPT1 VAL1 --OPT2 VAL2

注意

对于包含逗号或相等符号的选项和值,可以使用简单的符号来防止替换它们。

成功后,rbd map 操作会将镜像映射到 /dev/rbdX 设备,此时将触发 udev 规则来创建友好设备名称 symlink,如 /dev/rbd/POOL_NAME/IMAGE_NAME 指向实际映射的设备。要成功挂载或卸载,友好的设备名称必须在 /etc/fstab 文件中具有对应的条目。为 RBD 镜像编写 /etc/fstab 条目时,最好指定 noautonofail 挂载选项。这可防止 init 系统在设备存在前尝试过早挂载该设备。

其它资源

  • 有关可能选项的完整列表,请参见 rbd man page。

2.14. 配置 rbdmap 服务

要在引导时或关机时自动映射和挂载或取消 map 和卸载 RADOS 块设备(RBD)。

先决条件

  • 对执行挂载的节点的根级别访问权限。
  • 安装 ceph-common 软件包.

流程

  1. 打开 以编辑 /etc/ceph/rbdmap 配置文件。
  2. 将 RBD 镜像或镜像添加到配置文件中:

    示例

    foo/bar1    id=admin,keyring=/etc/ceph/ceph.client.admin.keyring
    foo/bar2    id=admin,keyring=/etc/ceph/ceph.client.admin.keyring,options='lock_on_read,queue_depth=1024'

  3. 保存对配置文件的更改。
  4. 启用 RBD 映射服务:

    示例

    [root@client ~]# systemctl enable rbdmap.service

其它资源

  • 如需了解 RBD 系统服务的更多详细信息,请参阅红帽 Ceph 存储块设备指南 中的 rbdmap 服务 部分。

2.15. 使用命令行界面监控 Ceph 块设备的性能

自红帽 Ceph 存储 4.1 开始,在 Ceph OSD 和管理器组件中集成了性能指标收集框架。此框架提供了一种内置方法,用于生成和处理构建其他 Ceph 块设备性能监控解决方案的性能指标。

新的 Ceph 管理器模块rbd_support 在启用时聚合性能指标。rbd 命令具有两个新操作: iotop and iostat

注意

这些操作的初始使用可能需要大约 30 秒时间来填充数据字段。

先决条件

  • 对 Ceph 监控节点的用户级别访问权限.

流程

  1. 启用 rbd_support Ceph Manager 模块:

    exmaple

    [user@mon ~]$ ceph mgr module enable rbd_support

  2. 显示"iotop"的镜像格式:

    示例

    [user@mon ~]$ rbd perf image iotop

    注意

    可以使用右箭头键动态排序 write ops、read-ops、write-bytes、read-latency 和 read-latency 列。

  3. 显示镜像的"iostat"样式:

    示例

    [user@mon ~]$ rbd perf image iostat

    注意

    此命令的输出可以是 JSON 或 XML 格式,然后使用其他命令行工具进行排序。

2.16. 其它资源

第 3 章 rbd 内核模块

作为存储管理员,您可以通过 rbd 内核模块访问 Ceph 块设备。您可以映射和取消映射块设备,并显示这些映射。此外,您可以通过 rbd 内核模块获取镜像列表。

重要

允许使用 Red Hat Enterprise Linux(RHEL)以外的 Linux 发行版本中的内核客户端,但不支持。如果在存储集群中使用这些内核客户端时发现问题,红帽会解决这些问题,但是如果发现根本原因位于内核客户端一侧,则软件供应商必须解决这个问题。

3.1. 先决条件

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

3.2. 创建 Ceph 块设备并从 Linux 内核模块客户端使用它

作为存储管理员,您可以在 Red Hat Ceph Storage 控制面板中为 Linux 内核模块客户端创建 Ceph 块设备。作为系统管理员,您可以使用命令行将该块设备映射到 Linux 客户端,并进行分区、格式化和挂载。之后,您可以为其读取和写入文件。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 红帽企业 Linux 客户端。

3.2.1. 使用控制面板为 Linux 内核模块客户端创建 Ceph 块设备

您可以通过仅启用其所需的功能,使用控制面板 Web 界面为 Linux 内核模块客户端创建专用的 Ceph 块设备。

先决条件

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

流程

  1. 登录控制面板。
  2. 在导航栏中点 Pools

    点池
  3. Create 按钮:

    点击 create
  4. 在对话窗口中,设置名称:

    设置名称
  5. 将池类型设置为复制:

    复制
  6. 设置放置组(PG)号:

    设置 PG 号

    若要协助选择 PG 编号,可使用 PG 计算器。如果不确定,请联系红帽技术支持

  7. 设置复制的大小:

    复制的大小
  8. 启用 rbd 应用:

    启用 rbd
  9. Create pool:

    点 Create pool
  10. 查看指示池创建成功的通知:

    创建通知
  11. Block:

    点 Block
  12. Images

    点 Images
  13. Create:

    点 Create
  14. 配置以下内容: 1 所需的映像名称, 2 设置为之前创建的 3 设置镜像所需的大小, 4 确保 分层和 排除锁定 是唯一启用的功能:

    设置镜像参数
  15. CreateRBD:

    Clck CreateRBD
  16. 查看表明已成功创建镜像的通知:

    镜像创建通知

其它资源

3.2.2. 使用命令行映射并挂载 Ceph 块设备到 Linux 上

您可以使用 Linux rbd 内核模块从红帽企业 Linux 客户端映射 Ceph 块设备。映射之后,您可以对其进行分区、格式化和挂载,以便您可以将文件写入到其中。

先决条件

流程

  1. 在 Red Hat Enterprise Linux 客户端节点上,启用 Red Hat Ceph Storage 4 Tools 存储库:

    Red Hat Enterprise Linux 7

    [root@client1 ~]# subscription-manager repos --enable=rhel-7-server-rhceph-4-tools-rpms

    Red Hat Enterprise Linux 8

    [root@client1 ~]# subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-rpms

  2. 安装 ceph-common RPM 软件包:

    Red Hat Enterprise Linux 7

    [root@client1 ~]# yum install ceph-common

    Red Hat Enterprise Linux 8

    [root@client1 ~]# dnf install ceph-common

  3. 将 Ceph 配置文件从 monitor 节点复制到客户端节点:

    scp root@MONITOR_NODE:/etc/ceph/ceph.conf /etc/ceph/ceph.conf

    示例

    [root@client1 ~]# scp root@cluster1-node2:/etc/ceph/ceph.conf /etc/ceph/ceph.conf
    root@192.168.0.32's password:
    ceph.conf                                                                          100%  497   724.9KB/s   00:00
    [root@client1 ~]#

  4. 将密钥文件从 monitor 节点复制到客户端节点:

    scp root@MONITOR_NODE:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.client.admin.keyring

    示例

    [root@client1 ~]# scp root@cluster1-node2:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.client.admin.keyring
    root@192.168.0.32's password:
    ceph.client.admin.keyring                                                          100%  151   265.0KB/s   00:00
    [root@client1 ~]#

  5. 映射镜像:

    rbd map --pool POOL_NAME IMAGE_NAME --id admin

    示例

    [root@client1 ~]# rbd map --pool block-device-pool image1 --id admin
    /dev/rbd0
    [root@client1 ~]#

  6. 在块设备中创建分区表:

    parted /dev/MAPPED_BLOCK_DEVICE mklabel msdos

    示例

    [root@client1 ~]# parted /dev/rbd0 mklabel msdos
    Information: You may need to update /etc/fstab.

  7. 为 XFS 文件系统创建分区:

    parted /dev/MAPPED_BLOCK_DEVICE mkpart primary xfs 0% 100%

    示例

    [root@client1 ~]# parted /dev/rbd0 mkpart primary xfs 0% 100%
    Information: You may need to update /etc/fstab.

  8. 格式化分区:

    mkfs.xfs /dev/MAPPED_BLOCK_DEVICE_WITH_PARTITION_NUMBER

    示例

    [root@client1 ~]# mkfs.xfs /dev/rbd0p1
    meta-data=/dev/rbd0p1            isize=512    agcount=16, agsize=163824 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=1, sparse=1, rmapbt=0
             =                       reflink=1
    data     =                       bsize=4096   blocks=2621184, imaxpct=25
             =                       sunit=16     swidth=16 blks
    naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=16 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0

  9. 创建要挂载新文件系统的目录:

    mkdir PATH_TO_DIRECTORY

    示例

    [root@client1 ~]# mkdir /mnt/ceph

  10. 挂载文件系统:

    mount /dev/MAPPED_BLOCK_DEVICE_WITH_PARTITION_NUMBER PATH_TO_DIRECTORY

    示例

    [root@client1 ~]# mount /dev/rbd0p1 /mnt/ceph/

  11. 验证文件系统是否已挂载并显示正确的大小:

    df -h PATH_TO_DIRECTORY

    示例

    [root@client1 ~]# df -h /mnt/ceph/
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/rbd0p1      10G  105M  9.9G   2% /mnt/ceph

其它资源

3.3. 获取镜像列表

获取 Ceph 块设备映像的列表。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 要挂载块设备镜像,首先返回镜像列表:

    [root@rbd-client ~]# rbd list

3.4. 映射块设备

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

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 将镜像名称映射到内核模块:

    语法

    rbd device map POOL_NAME/IMAGE_NAME --id USER_NAME

    示例

    [root@rbd-client ~]# rbd device map rbd/myimage --id admin

  2. 在使用 cephx 身份验证时,通过密钥环或包含 secret 的文件指定 secret:

    语法

    [root@rbd-client ~]# rbd device map POOL_NAME/IMAGE_NAME --id USER_NAME --keyring PATH_TO_KEYRING

    [root@rbd-client ~]# rbd device map POOL_NAME/IMAGE_NAME --id USER_NAME --keyfile PATH_TO_FILE

3.5. 显示映射的块设备

您可以使用 rbd 命令显示哪些块设备镜像映射到内核模块。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 显示映射的块设备:

    [root@rbd-client ~]# rbd device list

3.6. 取消映射块设备

您可以使用 unmap 选项并提供设备名称,通过 rbd 命令取消 map 块设备镜像。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 取消映射块设备镜像:

    语法

    rbd device unmap /dev/rbd/POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd device unmap /dev/rbd/rbd/foo

第 4 章 快照管理

作为存储管理员,熟悉 Ceph 的快照功能可帮助您管理存储在红帽 Ceph 存储集群中的映像的快照和克隆。

4.1. 先决条件

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

4.2. Ceph 块设备快照

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

注意

如果在 I/O 发生时拍摄快照,则快照可能无法获取映像准确或最新的数据,并且快照可能需要克隆到可以挂载的新映像。红帽建议在拍摄镜像快照前停止 I/O。如果映像包含文件系统,则执行快照之前文件系统必须处于一致状态。要停止 I/O,您可以使用 fsfreeze 命令。对于虚拟机,qemu-guest-agent 可用于在创建快照时自动冻结文件系统。

           +------------+         +-------------+
           | {s}        |         | {s} c999    |
           |   Active   |<-------*|   Snapshot  |
           |   Image    |         |   of Image  |
           | (stop i/o) |         | (read only) |
           +------------+         +-------------+

其它资源

  • 详情请查看 fsfreeze(8)手册页

4.3. Ceph 用户和密钥环

启用 cephx 后,您必须指定用户名或 ID,以及包含用户对应密钥的密钥环的路径。

注意

cephx 默认启用。

您还可以添加 CEPH_ARGS 环境变量以避免重新输入以下参数:

语法

rbd --id USER_ID --keyring=/path/to/secret [commands]
rbd --name USERNAME --keyring=/path/to/secret [commands]

示例

[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]

提示

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

4.4. 创建块设备快照

创建 Ceph 块设备的快照。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 指定 snap create 选项、池名称和镜像名称:

    语法

    rbd --pool POOL_NAME snap create --snap SNAP_NAME IMAGE_NAME
    rbd snap create POOL_NAME/IMAGE_NAME@SNAP_NAME

    示例

    [root@rbd-client ~]# rbd --pool rbd snap create --snap snapname foo
    [root@rbd-client ~]# rbd snap create rbd/foo@snapname

4.5. 列出块设备快照

列出块设备快照。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 指定池名称和镜像名称:

    语法

    rbd --pool POOL_NAME snap ls IMAGE_NAME
    rbd snap ls POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd --pool rbd snap ls foo
    [root@rbd-client ~]# rbd snap ls rbd/foo

4.6. 回滚块设备快照

回滚块设备快照。

注意

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

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 指定 snap 回滚 选项、池名称、镜像名称和 snap 名称:

    语法

    rbd --pool POOL_NAME snap rollback --snap SNAP_NAME IMAGE_NAME
    rbd snap rollback POOL_NAME/IMAGE_NAME@SNAP_NAME

    示例

    [root@rbd-client ~]# rbd --pool rbd snap rollback --snap snapname foo
    [root@rbd-client ~]# rbd snap rollback rbd/foo@snapname

4.7. 删除块设备快照

删除 Ceph 块设备的快照。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 指定 snap rm 选项、池名称、镜像名称和快照名称:

    语法

    rbd --pool POOL_NAME snap rm --snap SNAP_NAME IMAGE_NAME
    rbd snap rm POOL_NAME-/IMAGE_NAME@SNAP_NAME

    示例

    [root@rbd-client ~]# rbd --pool rbd snap rm --snap snapname foo
    [root@rbd-client ~]# rbd snap rm rbd/foo@snapname

重要

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

注意

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

其它资源

4.8. 清除块设备快照

清除块设备快照。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 指定 snap 清除 选项和镜像名称:

    语法

    rbd --pool POOL_NAME snap purge IMAGE_NAME
    rbd snap purge POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd --pool rbd snap purge foo
    [root@rbd-client ~]# rbd snap purge rbd/foo

4.9. 重命名块设备快照

重新命名块设备快照。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 重新命名快照:

    语法

    rbd snap rename POOL_NAME/IMAGE_NAME@ORIGINAL_SNAPSHOT_NAME POOL_NAME/IMAGE_NAME@NEW_SNAPSHOT_NAME

    示例

    [root@rbd-client ~]# rbd snap rename data/dataset@snap1 data/dataset@snap2

    这会将 data 池上 dataset 镜像的 snap1 快照重命名为 snap2

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

4.10. Ceph 块设备分层

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

           +-------------+              +-------------+
           | {s} c999    |              | {s}         |
           |  Snapshot   | Child refers |  Clone of   |
           |  of Image   |<------------*|  Snapshot   |
           |             |  to Parent   |             |
           | (read only) |              | (writable)  |
           +-------------+              +-------------+

               Parent                        Child
注意

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

每个克隆的映像(子镜像)存储对其父镜像的引用,这使得克隆的镜像能够打开父快照并读取它。当克隆 扁平化 时,当快照中的信息完全复制到克隆时,会删除此引用。

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

快照的克隆可以是写时复制(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 来 显式启用此功能。

其它资源

  • 有关 扁平化的更多信息,请参阅 Red Hat Ceph Storage Block Gudie 中的 扁平克隆映像 部分。

4.11. 保护块设备快照

克隆访问父快照。如果用户意外删除父快照,则所有克隆都会中断。为防止数据丢失,MUST 默认保护快照,然后才能克隆快照。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 在以下 命令中指定 POOL _NAME 、IMAGE _NAME 和 SNAP_SHOT_NAME

    语法

    rbd --pool POOL_NAME snap protect --image IMAGE_NAME --snap SNAPSHOT_NAME
    rbd snap protect POOL_NAME/IMAGE_NAME@SNAPSHOT_NAME

    示例

    [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

    注意

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

4.12. 克隆块设备快照

克隆块设备快照,以在同一个池或其他池中创建快照的读取或写入子镜像。种用例是将只读映像和快照维护为一个池中的模板,然后在另一个池中维护可写克隆。

重要

默认情况下,您必须先保护快照,然后才能克隆快照。为避免在克隆快照前对其进行保护,请设置 ceph osd set-require-min-compat-clientimic。您也可以将其设置为比模拟更高的版本。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 要克隆快照,您需要指定父池、快照、子池和镜像名称:

    语法

    rbd --pool POOL_NAME --image PARENT_IMAGE --snap SNAP_NAME --dest-pool POOL_NAME --dest CHILD_IMAGE_NAME
    rbd clone POOL_NAME/PARENT_IMAGE@SNAP_NAME  POOL_NAME/CHILD_IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd --pool rbd --image my-image --snap my-snapshot --dest-pool rbd --dest new-image
    [root@rbd-client ~]# rbd clone rbd/my-image@my-snapshot rbd/new-image

4.13. 取消保护块设备快照

您必须先取消保护快照,然后才能删除快照。此外,您 不得 删除从克隆引用的快照。您必须扁平化快照的每个克隆,然后才能删除快照。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 运行以下命令:

    语法

    rbd --pool POOL_NAME snap unprotect --image IMAGE_NAME --snap SNAPSHOT_NAME
    rbd snap unprotect POOL_NAME/IMAGE_NAME@SNAPSHOT_NAME

    示例

    [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

4.14. 列出快照的子项

列出快照的子项。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

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

    语法

    rbd --pool POOL_NAME children --image IMAGE_NAME --snap SNAP_NAME
    rbd children POOL_NAME/IMAGE_NAME@SNAPSHOT_NAME

    示例

    rbd --pool rbd children --image my-image --snap my-snapshot
    rbd children rbd/my-image@my-snapshot

4.15. 扁平化克隆的镜像

克隆的映像保留对父快照的引用。当您从子克隆删除引用到父快照时,您有效地通过将信息从快照复制到克隆来"扁平化"镜像。随着快照的大小,扁平化克隆所需的时间会增加。由于扁平化的映像包含快照的所有信息,因此扁平化的映像将占用比分层克隆更多的存储空间。

注意

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

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

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

    语法

    rbd --pool POOL_NAME flatten --image IMAGE_NAME
    rbd flatten POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd --pool rbd flatten --image my-image
    [root@rbd-client ~]# rbd flatten rbd/my-image

第 5 章 镜像 Ceph 块设备

作为存储管理员,您可以通过镜像红帽 Ceph 存储集群之间的数据镜像,为 Ceph 块设备添加另一层冗余。了解和使用 Ceph 块设备镜像功能可帮助您防止数据丢失,如站点故障。镜像 Ceph 块设备有两种配置,单向镜像(单向镜像)或双向镜像,您可以在池和单个镜像上配置镜像功能。

5.1. 先决条件

  • 至少运行两个健康的红帽 Ceph 存储集群。
  • 两个存储集群之间的网络连接。
  • 为每个红帽 Ceph 存储集群访问 Ceph 客户端节点。

5.2. Ceph 块设备镜像

RADOS 块设备(RBD)镜像是在两个或多个 Ceph 存储集群之间异步复制 Ceph 块设备镜像的过程。通过在不同的地理位置查找 Ceph 存储集群,RBD 镜像功能可帮助您从站点灾难中恢复。基于日志的 Ceph 块设备镜像可确保镜像所有更改的时间点一致性副本,包括读取和写入、块设备调整大小、快照、克隆和扁平化。

RBD 镜像使用专用锁定和日志记录功能,按照镜像发生的顺序记录对镜像的所有修改。这样可确保镜像的崩溃一致性镜像可用。

重要

支持镜像块设备镜像的主要和次要池的 CRUSH 层次结构必须具有相同的容量和性能特性,并且必须具有足够的带宽才能确保镜像无延迟。例如,如果您的主存储集群中有 X MB/s 平均写入吞吐量,则网络必须支持连接至次要站点的 N * X 吞吐量,以及 Y% 用于镜像 N 镜像的安全因子。

rbd-mirror 守护进程负责通过从远程主镜像拉取更改,将镜像从一个 Ceph 存储集群同步到另一个 Ceph 存储集群,并将这些更改写入本地的非主镜像。rbd-mirror 守护进程可以在单个 Ceph 存储集群上运行,实现单向镜像功能,也可以在两个 Ceph 存储集群上运行,以实现参与镜像关系的双向镜像。

要使 RBD 镜像工作(可使用单向复制或双向复制),进行几个假设:

  • 两个存储集群中都存在一个名称相同的池。
  • 池包含您要镜像的启用了日志的镜像。
重要

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

单向复制

单向镜像意味着一个存储集群中的主要镜像或镜像池会被复制到次要存储集群。单向镜像还支持复制到多个次要存储集群。

在辅助存储群集上,镜像是非主要复制;即,Ceph 客户端无法写入镜像。当数据从主存储集群镜像到次要存储集群时,rbd -mirror 在次要存储集群上运行 ONLY。

为了进行单向镜像工作,应进行几项假设:

  • 您有两个 Ceph 存储集群,希望将镜像从主存储集群复制到辅助存储集群。
  • 辅助存储集群附加有运行 rbd-mirror 守护进程的 Ceph 客户端节点。rbd-mirror 守护进程将连接到主存储集群,将镜像同步到次要存储集群。
单向镜像

双向复制

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

要进行双向镜像工作,请进行几项假设:

  • 您有两个存储集群,希望在它们之间以任一方向复制镜像。
  • 两个存储集群都附加了一个客户端节点,它们运行 rbd-mirror 守护进程。次要存储集群上运行的 rbd-mirror 守护进程将连接到主存储集群,将镜像同步到次要存储集群,而主存储集群上运行的 rbd-mirror 守护进程将连接到次要存储集群,将镜像同步到主要位置。
双向镜像
注意

自 Red Hat Ceph Storage 4 起,支持在一个集群中运行多个活跃的 rbd-mirror 守护进程。

镜像模式

镜像以每个池为基础配置,带有镜像对等存储集群。Ceph 支持两种镜像模式,具体取决于池中镜像的类型。

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

镜像状态

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

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

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

  • 通过在池模式中启用镜像来隐式执行镜像。
  • 通过启用特定镜像的镜像来显式启用。

可以降级主映像并提升非主映像。

其它资源

5.3. 使用 Ansible 配置单向镜像

此流程使用 ceph-ansible,在称为 site-a 的主存储集群上配置镜像的单向复制,到名为 site-b 的辅助存储集群。在以下示例中,data 是包含要镜像的镜像的池名称。

先决条件

  • 两个正在运行的 Red Hat Ceph Storage 集群。
  • Ceph 客户端节点.
  • 两个集群中都存在具有相同名称的池。
  • 池中的镜像必须启用独占锁和日志。
注意

使用单向复制时,您可以镜像到多个次要存储集群。

流程

  1. 在镜像上启用专用锁定和日志记录功能。

    1. 对于 新镜像,使用 --image-feature 选项:

      语法

      rbd create IMAGE_NAME --size MEGABYTES --pool POOL_NAME --image-feature FEATURE[,FEATURE]

      示例

      [root@rbd-client ~]# rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journaling

    2. 对于 现有镜像,请使用 rbd feature enable 命令:

      语法

      rbd feature enable POOL_NAME/IMAGE_NAME FEATURE_NAME

      示例

      [root@rbd-client ~]# rbd feature enable data/image1 exclusive-lock,journaling

    3. 要默认在所有新镜像上启用专用锁定和日志记录功能,请在 Ceph 配置文件中添加以下设置:

      rbd_default_features = 125
  2. site-b 集群的 Ansible 管理节点上,在 Ansible 清单文件中添加 [rbdmirrors] 组。通常的清单文件为 /etc/ansible/hosts
  3. [rbdmirrors] 组下,添加将在其上运行 rbd -mirror 守护进程的 site- b 客户端节点的名称。守护进程将从 site-a 拉取镜像更改到 site-b

    [rbdmirrors]
    ceph-client
  4. 进入 /usr/share/ceph-ansible/ 目录:

    [root@admin ~]# cd /usr/share/ceph-ansible
  5. 通过将 group_vars/rbd mirrors.yml. sample 复制到 group_vars/rbdmirrors.yml,以创建新的 rbd mirrors.yml 文件。

    [root@admin ceph-ansible]# cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.yml
  6. 打开 group_vars/rbdmirrors.yml 文件进行编辑。
  7. ceph_rbd_mirror_configure 设置为 true。将 ceph_rbd_mirror_pool 设置为您要在其中镜像镜像的池。在这些示例中 data 是池的名称。

    ceph_rbd_mirror_configure: true
    ceph_rbd_mirror_pool: "data"
  8. 可选:默认情况下,ceph -ansible 使用池模式配置镜像,该模式镜像到池中的所有镜像。也可以使用镜像模式,其中只有显式启用镜像的镜像才会被镜像(mirror)。要启用镜像模式,将 ceph_rbd_mirror_mode 设置为 image

    ceph_rbd_mirror_mode: image
  9. 可选:如果设置镜像模式,请在所需镜像上显式启用镜像:

    语法

    rbd mirror image enable POOL/IMAGE

    示例

    [root@mon ~]# rbd mirror image enable data/image1

  10. site-a 集群中的监控节点上,创建 rbd-mirror 守护进程将用于连接集群的用户。这个示例创建一个 站点用户, 并将密钥输出到名为 site-a.client.site-a.keyring 的文件中:

    语法

    ceph auth get-or-create client.CLUSTER_NAME mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/CLUSTER_NAME.client.USER_NAME.keyring

    示例

    [root@mon ~]# 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

  11. 将 Ceph 配置文件和新创建的密钥文件从 site-a 监控 节点复制到 site-b 监控 器和客户端节点。将 Ceph 配置文件从 ceph.conf 重命名为 CLUSTER-NAME.conf。在这些示例中,文件为 /etc/ceph/site-a.conf
  12. rbd-mirror 将从中拉取的集群设置名称。在这些示例中,其他集群为 site-a

    ceph_rbd_mirror_remote_cluster: "site-a"
  13. 在 Ansible 管理节点上,使用 ceph_rbd_mirror_remote_user 设置密钥的用户名。使用您在创建密钥时使用的相同名称。在这些示例中,该用户命名为 client.site-a

    ceph_rbd_mirror_remote_user: "client.site-a"
  14. site-a 上启用镜像功能:

    语法

    rbd mirror pool enable pool -p POOL_NAME

    示例

    [root@mon ~]# rbd mirror pool enable pool -p data

  15. 以 ceph-ansible 用户身份,运行 Ansible playbook:

    • 裸机部署:

      [user@admin ceph-ansible]$ ansible-playbook site.yml --limit rbdmirrors -i hosts
    • 容器部署:

      [ansible@admin ceph-ansible]$ ansible-playbook site-container.yml --limit rbdmirrors -i hosts
  16. 验证镜像状态。从 site-b 集群的 Ceph 监控节点运行以下命令:

    示例

    [root@mon ~]# rbd mirror image status data/image1
    image1:
      global_id:   7d486c3f-d5a1-4bee-ae53-6c4f1e0c8eac
      state:       up+replaying 1
      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

    1
    如果镜像处于 up+replaying 状态, 则镜像可以正常工作。
    注意

    根据站点之间的连接,镜像可能需要很长时间才能同步镜像。

5.4. 使用 Ansible 配置双向镜像

此流程使用 ceph-ansible 来配置双向复制,以便镜像可以按照称为 site-a 和 site- b 的两个集群之间的任一方向进行镜像。在以下示例中,data 是包含要镜像的镜像的池名称。

注意

双向镜像不允许对任一集群中的同一镜像同时写入。镜像在一个集群中被提升并降级到另一个集群中。根据自己的状态,它们将从一个方向或另一个方向进行镜像。

先决条件

  • 两个正在运行的 Red Hat Ceph Storage 集群。
  • 每个群集都有一个客户端节点。
  • 两个集群中都存在具有相同名称的池。
  • 池中的镜像必须启用独占锁和日志。

流程

  1. 在镜像源自的集群中,在镜像上启用 exclusive-lock 和 journaling 功能。

    1. 对于 新镜像,使用 --image-feature 选项:

      语法

      rbd create IMAGE_NAME --size MEGABYTES --pool POOL_NAME --image-feature FEATURE[,FEATURE]

      示例

      [root@rbd-client ~]# rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journaling

    2. 对于 现有镜像,请使用 rbd feature enable 命令:

      语法

      rbd feature enable POOL_NAME/IMAGE_NAME FEATURE_NAME

      示例

      [root@rbd-client ~]# rbd feature enable data/image1 exclusive-lock,journaling

    3. 要默认在所有新镜像上启用专用锁定和日志记录功能,请在 Ceph 配置文件中添加以下设置:

      rbd_default_features = 125
  2. 配置从 site-a 到 site-b 的镜像功能。在 site-b 集群的 Ansible 管理节点上,在 Ansible 清单文件中添加 [rbdmirrors] 组,通常是 /usr/share/ceph-ansible/hosts
  3. [rbdmirrors] 组下,添加 rbd -mirror 守护进程将要运行的 site- b 客户端节点的名称。此守护进程拉取从 site-a 到 site- b 的镜像更改。

    [rbdmirrors]
    ceph-client
  4. 进入 /usr/share/ceph-ansible/ 目录:

    [root@admin ~]$ cd /usr/share/ceph-ansible
  5. 通过将 group_vars/rbd mirrors.yml. sample 复制到 group_vars/rbdmirrors.yml,以创建新的 rbd mirrors.yml 文件。

    [root@admin ceph-ansible]# cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.yml
  6. 打开 以编辑 group_vars/rbdmirrors.yml 文件。
  7. ceph_rbd_mirror_configure 设置为 true,并将 ceph_rbd_mirror_pool 设置为您要在其中镜像镜像的池。在这些示例中 data 是池的名称。

    ceph_rbd_mirror_configure: true
    ceph_rbd_mirror_pool: "data"
  8. 可选:默认情况下,ceph-ansible 使用池模式配置镜像,这会镜像池中的所有镜像。也可以使用镜像模式,其中只有显式启用镜像的镜像才会被镜像(mirror)。要启用镜像模式,将 ceph_rbd_mirror_mode 设置为 image

    ceph_rbd_mirror_mode: image
  9. 可选:如果设置镜像模式,请在所需镜像上显式启用镜像:

    语法

    rbd mirror image enable POOL/IMAGE

    示例

    [root@mon ~]# rbd mirror image enable data/image1

  10. site-a 集群中的 monitor 节点上,创建 rbd-mirror 守护进程将用于连接集群的用户。这个示例创建一个 站点用户, 并将密钥输出到名为 site-a.client.site-a.keyring 的文件中:

    语法

    ceph auth get-or-create client.CLUSTER_NAME mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/CLUSTER_NAME.client.USER_NAME.keyring

    示例

    [root@mon ~]# 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

  11. 将 Ceph 配置文件和新创建的密钥文件从 site-a 监控 节点复制到 site-b 监控 器和客户端节点。将 Ceph 配置文件从 ceph.conf 重命名为 CLUSTER-NAME.conf。在这些示例中,文件为 /etc/ceph/site-a.conf
  12. rbd-mirror 将从中拉取的集群设置名称。在这些示例中,其他集群为 site-a

    ceph_rbd_mirror_remote_cluster: "site-a"
  13. 在 Ansible 管理节点上,使用 ceph_rbd_mirror_remote_user 设置密钥的用户名。使用您在创建密钥时使用的相同名称。在这些示例中,该用户命名为 client.site-a

    ceph_rbd_mirror_remote_user: "client.site-a"
  14. 以 ansible 用户身份,运行 Ansible playbook:

    • 裸机部署:

      [user@admin ceph-ansible]$ ansible-playbook site.yml --limit rbdmirrors -i hosts
    • 容器部署:

      [user@admin ceph-ansible]$ ansible-playbook site-container.yml --limit rbdmirrors -i hosts
  15. 验证镜像状态。从 site-b 集群的 Ceph 监控节点运行以下命令:

    示例

    [root@mon ~]# rbd mirror image status data/image1
    image1:
      global_id:   7d486c3f-d5a1-4bee-ae53-6c4f1e0c8eac
      state:       up+replaying 1
      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

    1
    如果镜像处于 up+replaying 状态, 则镜像可以正常工作。
    注意

    根据站点之间的连接,镜像可能需要很长时间才能同步镜像。

  16. 配置从 site-b 到 site-a 的镜像。这些步骤与上述步骤基本相同。在 site-a 集群的 Ansible 管理节点上,在 Ansible 清单文件中添加 [rbdmirrors] 组,通常是 /usr/share/ceph-ansible/hosts
  17. [rbdmirrors] 组下,添加 rbd -mirror 守护进程将要运行的 site-mirror 守护进程的 client 节点的名称。此守护进程拉取从 site-b 到 site- a 的镜像更改。

    [rbdmirrors]
    ceph-client
  18. 进入 /usr/share/ceph-ansible/ 目录:

    [root@admin ~]# cd /usr/share/ceph-ansible
  19. 通过将 group_vars/rbd mirrors.yml. sample 复制到 group_vars/rbdmirrors.yml,以创建新的 rbd mirrors.yml 文件。

    [root@admin ceph-ansible]# cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.yml
  20. 打开 以编辑 group_vars/rbdmirrors.yml 文件。
  21. ceph_rbd_mirror_configure 设置为 true,并将 ceph_rbd_mirror_pool 设置为您要在其中镜像镜像的池。在这些示例中 data 是池的名称。

    ceph_rbd_mirror_configure: true
    ceph_rbd_mirror_pool: "data"
  22. 可选:默认情况下,ceph -ansible 使用池模式配置镜像,该模式镜像到池中的所有镜像。也可以使用镜像模式,其中只有显式启用镜像的镜像才会被镜像(mirror)。要启用镜像模式,将 ceph_rbd_mirror_mode 设置为 image

    ceph_rbd_mirror_mode: image
  23. 可选:如果设置镜像模式,请在所需镜像上显式启用镜像:

    语法

    rbd mirror image enable POOL/IMAGE

    示例

    [root@mon ~]# rbd mirror image enable data/image1

  24. 将 RBD 密钥从 site-b 集群复制到 site-a 集群。密钥位于您将 rbd-mirror 守护进程配置为在第 3 步中运行的客户端节点上。文件位于 /etc/ceph/ 目录中,名称中为 rbd-mirror,结尾是 .keyring 扩展名。将 文件复制到 rbd-daemon 将运行的 site-a 集群中客户端节点。按照示例,将文件保存到 /etc/ceph/site-b.client.site-b.keyring
  25. 将 Ceph 配置文件从 site-b 集群复制到 rbd -daemon 将运行的 site- a 集群中客户端节点。按照示例,将文件保存到 /etc/ceph/site-b.conf
  26. site-a 集群上的 Ansible 管理节点上,为 rbd-mirror 将从中拉取的集群设置名称。在以下示例中,其他集群命名为 site-b

    ceph_rbd_mirror_remote_cluster: "site-b"
  27. site-a 集群上的 Ansible 管理节点上,使用 group_vars/ rbdmirrors.yml 中的 ceph_rbd_mirror_ remote_user 设置密钥的用户名。在这些示例中,该用户命名为 client.site-b

    ceph_rbd_mirror_remote_user: "client.site-b"
  28. site-a 集群的管理节点上,以 Ansible 用户身份运行 Ansible playbook:

    • 裸机部署:

      [user@admin ceph-ansible]$ ansible-playbook site.yml --limit rbdmirrors -i hosts
    • 容器部署:

      [user@admin ceph-ansible]$ ansible-playbook site-container.yml --limit rbdmirrors -i hosts
  29. site-a 集群上的客户端节点检查镜像状态。

    [root@mon ~]# 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
    [root@mon ~]# 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

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

5.5. 使用命令行界面配置单向镜像

此流程配置池从主存储集群到辅助存储集群的单向复制。

注意

使用单向复制时,您可以镜像到多个次要存储集群。

注意

本节中的示例通过将主镜像作为 site-a 引用主存储集群和您将要复制镜像的辅助存储集群作为 site-b 来区分两个存储集群。这些示例中使用的池名称称为 data

先决条件

  • 至少两个健康状态并运行红帽 Ceph 存储集群。
  • 对每个存储集群的 Ceph 客户端节点的根级别访问权限。
  • 具有管理员级别功能的 CephX 用户。
  • 池中的镜像必须启用独占锁和日志。

流程

  1. 在连接到 site -b 存储集群的客户端节点上安装 rbd- mirror 软件包:

    Red Hat Enterprise Linux 7

    [root@rbd-client ~]# yum install rbd-mirror

    Red Hat Enterprise Linux 8

    [root@rbd-client ~]# dnf install rbd-mirror

    注意

    软件包由红帽 Ceph 存储工具存储库提供。

  2. 在镜像上启用 exclusive-lock 和 loging 功能。

    1. 对于 新镜像,使用 --image-feature 选项:

      语法

      rbd create IMAGE_NAME --size MEGABYTES --pool POOL_NAME --image-feature FEATURE [,FEATURE]

      示例

      [root@rbd-client ~]# rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journaling

    2. 对于 现有镜像,请使用 rbd feature enable 命令:

      语法

      rbd feature enable POOL_NAME/IMAGE_NAME FEATURE [,FEATURE]

      示例

      [root@rbd-client ~]# rbd feature enable data/image1 exclusive-lock,journaling

    3. 要默认在所有新镜像上启用专用锁定和日志记录功能,请在 Ceph 配置文件中添加以下设置:

      rbd_default_features = 125
  3. 选择镜像模式,可以是池或镜像模式。

    1. 启用 池模式

      语法

      rbd mirror pool enable POOL_NAME MODE

      示例

      [root@rbd-client ~]# rbd mirror pool enable data pool

      这个示例启用对名为 data 的完整池进行镜像。

    2. 启用 镜像模式

      语法

      rbd mirror pool enable POOL_NAME MODE

      示例

      [root@rbd-client ~]# rbd mirror pool enable data image

      这个示例在名为 data 的池上启用镜像模式镜像。

    3. 验证镜像是否已成功启用:

      语法

      rbd mirror pool info POOL_NAME

      示例

      [root@rbd-client ~]# rbd mirror pool info data
      Mode: pool
      Peers: none

  4. 在 Ceph 客户端节点上,创建一个用户:

    语法

    ceph auth get-or-create client.PRIMARY_CLUSTER_NAME mon 'profile rbd-mirror' osd 'profile rbd' -o /etc/ceph/ceph.PRIMARY_CLUSTER_NAME.keyring

    示例

    [root@rbd-client-site-a ~]# ceph auth get-or-create client.rbd-mirror.site-a mon 'profile rbd-mirror' osd 'profile rbd' -o /etc/ceph/ceph.client.rbd-mirror.site-a.keyring

  5. 将密钥环复制到次要集群:

    语法

    scp /etc/ceph/ceph.PRIMARY_CLUSTER_NAME.keyring root@SECONDARY_CLUSTER:_PATH_

    示例

    [root@rbd-client-site-a ~]# scp /etc/ceph/ceph.client.rbd-mirror.site-a.keyring root@rbd-client-site-b:/etc/ceph/

  6. 在 Ceph 客户端节点上,引导存储集群对等点。

    1. 将存储集群对点注册到池:

      语法

      rbd mirror pool peer bootstrap create --site-name LOCAL_SITE_NAME POOL_NAME > PATH_TO_BOOTSTRAP_TOKEN

      示例

      [root@rbd-client-site-a ~]# rbd mirror pool peer bootstrap create --site-name rbd-mirror.site-a data > /root/bootstrap_token_rbd-mirror.site-a

      注意

      此示例 bootstrap 命令创建 client.rbd-mirror-peer Ceph 用户。

    2. 将 bootstrap 令牌文件复制到 site-b 存储集群。

      语法

      scp PATH_TO_BOOTSTRAP_TOKEN root@SECONDARY_CLUSTER:/root/

      示例

      [root@rbd-client-site-a ~]# scp /root/bootstrap_token_site-a root@ceph-rbd2:/root/

  7. 在辅助客户端节点上创建一个用户:

    语法

    ceph auth get-or-create client.SECONDARY_CLUSTER_NAME mon 'profile rbd-mirror' osd 'profile rbd' -o /etc/ceph/ceph.SECONDARY_CLUSTER_NAME.keyring

    示例

    [root@rbd-client-site-b ~]# ceph auth get-or-create client.rbd-mirror.site-b mon 'profile rbd-mirror' osd 'profile rbd' -o /etc/ceph/ceph.client.rbd-mirror.site-b.keyring

  8. 将密钥环复制到主集群,即 ceph 客户端节点:

    语法

    scp /etc/ceph/ceph.SECONDARY_CLUSTER_NAME.keyring root@PRIMARY_CLUSTER:_PATH_

    示例

    [root@rbd-client-site-b ~]# scp /etc/ceph/ceph.client.rbd-mirror.site-b.keyring root@rbd-client-site-a:/etc/ceph/

  9. site-b 存储集群中导入 bootstrap 令牌:

    语法

    rbd mirror pool peer bootstrap import --site-name LOCAL_SITE_NAME --direction rx-only POOL_NAME PATH_TO_BOOTSTRAP_TOKEN

    示例

    [root@rbd-client-site-b ~]# rbd mirror pool peer bootstrap import --site-name rbd-mirror.site-b --direction rx-only data /root/bootstrap_token_rbd-mirror.site-a

    注意

    对于单向 RBD 镜像功能,您必须使用 --direction rx-only 参数,因为在引导对等时双向镜像是默认设置。

  10. 在辅助客户端节点上启用并启动 rbd-mirror 守护进程:

    语法

    systemctl enable ceph-rbd-mirror.target
    systemctl enable ceph-rbd-mirror@rbd-mirror.CLIENT_ID
    systemctl start ceph-rbd-mirror@rbd-mirror.CLIENT_ID

    CLIENT_ID 替换为前面创建的 Ceph 用户。

    示例

    [root@rbd-client-site-b ~]# systemctl enable ceph-rbd-mirror.target
    [root@rbd-client-site-b ~]# systemctl enable ceph-rbd-mirror@rbd-mirror.site-a
    [root@rbd-client-site-b ~]# systemctl start ceph-rbd-mirror@rbd-mirror.site-a

    重要

    每个 rbd-mirror 守护进程都必须具有唯一的客户端 ID。

  11. 要验证镜像状态,请从主站点和次要站点的 Ceph monitor 节点运行以下命令:

    语法

    rbd mirror image status POOL_NAME/IMAGE_NAME

    示例

    [root@mon-site-a ~]# rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped 1
      description: local image is primary
      last_update: 2021-04-22 13:45:31

    1
    在这里,上移 表示 rbd-mirror 守护进程正在运行,并且 已停止 意味着此镜像不是从另一个存储集群复制的目标。这是因为镜像是这个存储集群的主要部分。

    示例

    [root@mon-site-b ~]# rbd mirror image status data/image1
    image1:
      global_id:   7d486c3f-d5a1-4bee-ae53-6c4f1e0c8eac
      state:       up+replaying 1
      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: 2021-04-22 14:19:27

    1
    如果镜像处于 up+replaying 状态, 则镜像可以正常工作。在这里,上移 表示 rbd-mirror 守护进程正在运行,而 repwrite 则表示此镜像是从另一个存储集群复制的目标。
    注意

    根据站点之间的连接,镜像可能需要很长时间才能同步镜像。

5.6. 使用命令行界面配置双向镜像

此流程配置主存储集群和辅助存储集群之间的池的双向复制。

注意

使用双向复制时,您只能在两个存储集群之间镜像。

注意

本节中的示例通过将主镜像作为 site-a 引用主存储集群和您将要复制镜像的辅助存储集群作为 site-b 来区分两个存储集群。这些示例中使用的池名称称为 data

先决条件

  • 至少两个健康状态并运行红帽 Ceph 存储集群。
  • 对每个存储集群的 Ceph 客户端节点的根级别访问权限。
  • 具有管理员级别功能的 CephX 用户。
  • 池中的镜像必须启用独占锁和日志。

流程

  1. 在连接到 site - a 存储集群的客户端节点上安装 rbd-mirror 软件包,并通过连接到 site- b 存储集群的客户端节点安装 rbd- mirror 软件包:

    Red Hat Enterprise Linux 7

    [root@rbd-client ~]# yum install rbd-mirror

    Red Hat Enterprise Linux 8

    [root@rbd-client ~]# dnf install rbd-mirror

    注意

    软件包由红帽 Ceph 存储工具存储库提供。

  2. 在镜像上启用 exclusive-lock 和 loging 功能。

    1. 对于 新镜像,使用 --image-feature 选项:

      语法

      rbd create IMAGE_NAME --size MEGABYTES --pool POOL_NAME --image-feature FEATURE [,FEATURE]

      示例

      [root@rbd-client ~]# rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journaling

    2. 对于 现有镜像,请使用 rbd feature enable 命令:

      语法

      rbd feature enable POOL_NAME/IMAGE_NAME FEATURE [,FEATURE]

      示例

      [root@rbd-client ~]# rbd feature enable data/image1 exclusive-lock,journaling

    3. 要默认在所有新镜像上启用专用锁定和日志记录功能,请在 Ceph 配置文件中添加以下设置:

      rbd_default_features = 125
  3. 选择镜像模式,可以是池或镜像模式。

    1. 启用 池模式

      语法

      rbd mirror pool enable POOL_NAME MODE

      示例

      [root@rbd-client ~]# rbd mirror pool enable data pool

      这个示例启用对名为 data 的完整池进行镜像。

    2. 启用 镜像模式

      语法

      rbd mirror pool enable POOL_NAME MODE

      示例

      [root@rbd-client ~]# rbd mirror pool enable data image

      这个示例在名为 data 的池上启用镜像模式镜像。

    3. 验证镜像是否已成功启用:

      语法

      rbd mirror pool info POOL_NAME

      示例

      [root@rbd-client ~]# rbd mirror pool info data
      Mode: pool
      Peers: none

  4. 在 Ceph 客户端节点上,创建一个用户:

    语法

    ceph auth get-or-create client.PRIMARY_CLUSTER_NAME mon 'profile rbd-mirror' osd 'profile rbd' -o /etc/ceph/ceph.PRIMARY_CLUSTER_NAME.keyring

    示例

    [root@rbd-client-site-a ~]# ceph auth get-or-create client.rbd-mirror.site-a mon 'profile rbd-mirror' osd 'profile rbd' -o /etc/ceph/ceph.client.rbd-mirror.site-a.keyring

  5. 将密钥环复制到次要集群:

    语法

    scp /etc/ceph/ceph.PRIMARY_CLUSTER_NAME.keyring root@SECONDARY_CLUSTER:_PATH_

    示例

    [root@rbd-client-site-a ~]# scp /etc/ceph/ceph.client.rbd-mirror.site-a.keyring root@rbd-client-site-b:/etc/ceph/

  6. 在 Ceph 客户端节点上,引导存储集群对等点。

    1. 将存储集群对点注册到池:

      语法

      rbd mirror pool peer bootstrap create --site-name LOCAL_SITE_NAME POOL_NAME > PATH_TO_BOOTSTRAP_TOKEN

      示例

      [root@rbd-client-site-a ~]# rbd mirror pool peer bootstrap create --site-name rbd-mirror.site-a data > /root/bootstrap_token_rbd-mirror.site-a

      注意

      此示例 bootstrap 命令创建 client.rbd-mirror-peer Ceph 用户。

    2. 将 bootstrap 令牌文件复制到 site-b 存储集群。

      语法

      scp PATH_TO_BOOTSTRAP_TOKEN root@SECONDARY_CLUSTER:/root/

      示例

      [root@rbd-client-site-a ~]# scp /root/bootstrap_token_site-a root@ceph-rbd2:/root/

  7. 在辅助客户端节点上创建一个用户:

    语法

    ceph auth get-or-create client.SECONDARY_CLUSTER_NAME mon 'profile rbd-mirror' osd 'profile rbd' -o /etc/ceph/ceph.SECONDARY_CLUSTER_NAME.keyring

    示例

    [root@rbd-client-site-b ~]# ceph auth get-or-create client.rbd-mirror.site-b mon 'profile rbd-mirror' osd 'profile rbd' -o /etc/ceph/ceph.client.rbd-mirror.site-b.keyring

  8. 将密钥环复制到主集群,即 ceph 客户端节点:

    语法

    scp /etc/ceph/ceph.SECONDARY_CLUSTER_NAME.keyring root@PRIMARY_CLUSTER:_PATH_

    示例

    [root@rbd-client-site-b ~]# scp /etc/ceph/ceph.client.rbd-mirror.site-b.keyring root@rbd-client-site-a:/etc/ceph/

  9. site-b 存储集群中导入 bootstrap 令牌:

    语法

    rbd mirror pool peer bootstrap import --site-name LOCAL_SITE_NAME --direction rx-tx POOL_NAME PATH_TO_BOOTSTRAP_TOKEN

    示例

    [root@rbd-client-site-b ~]# rbd mirror pool peer bootstrap import --site-name rbd-mirror.site-b --direction rx-tx data /root/bootstrap_token_rbd-mirror.site-a

    注意

    --direction 参数是可选的,因为在 bootstrapping peers 时双向镜像是默认设置。

  10. 在主客户端和次要客户端节点上启用并启动 rbd-mirror 守护进程:

    语法

    systemctl enable ceph-rbd-mirror.target
    systemctl enable ceph-rbd-mirror@rbd-mirror.CLIENT_ID
    systemctl start ceph-rbd-mirror@rbd-mirror.CLIENT_ID

    CLIENT_ID 替换为前面创建的 Ceph 用户。

    示例

    [root@rbd-client-site-a ~]# systemctl enable ceph-rbd-mirror.target
    [root@rbd-client-site-a ~]# systemctl enable ceph-rbd-mirror@rbd-mirror.site-a
    [root@rbd-client-site-a ~]# systemctl start ceph-rbd-mirror@rbd-mirror.site-a
    [root@rbd-client-site-a ~]# systemctl enable ceph-rbd-mirror@rbd-mirror.site-b
    [root@rbd-client-site-a ~]# systemctl start ceph-rbd-mirror@rbd-mirror.site-b

    在上例中,用户在主集群 站点(a)中被启用

    示例

    [root@rbd-client-site-b ~]# systemctl enable ceph-rbd-mirror.target
    [root@rbd-client-site-b ~]# systemctl enable ceph-rbd-mirror@rbd-mirror.site-a
    [root@rbd-client-site-b ~]# systemctl start ceph-rbd-mirror@rbd-mirror.site-a
    [root@rbd-client-site-b ~]# systemctl enable ceph-rbd-mirror@rbd-mirror.site-b
    [root@rbd-client-site-b ~]# systemctl start ceph-rbd-mirror@rbd-mirror.site-b

    在上例中,用户在第二个集群 site-b中启用

    重要

    每个 rbd-mirror 守护进程都必须具有唯一的客户端 ID。

  11. 要验证镜像状态,请从主站点和次要站点的 Ceph monitor 节点运行以下命令:

    语法

    rbd mirror image status POOL_NAME/IMAGE_NAME

    示例

    [root@mon-site-a ~]# rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped 1
      description: local image is primary
      last_update: 2021-04-22 13:45:31

    1
    在这里,上移 表示 rbd-mirror 守护进程正在运行,并且 已停止 意味着此镜像不是从另一个存储集群复制的目标。这是因为镜像是这个存储集群的主要部分。

    示例

    [root@mon-site-b ~]# rbd mirror image status data/image1
    image1:
      global_id:   7d486c3f-d5a1-4bee-ae53-6c4f1e0c8eac
      state:       up+replaying 1
      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: 2021-04-22 14:19:27

    1
    如果镜像处于 up+replaying 状态, 则镜像可以正常工作。在这里,上移 表示 rbd-mirror 守护进程正在运行,而 repwrite 则表示此镜像是从另一个存储集群复制的目标。
    注意

    根据站点之间的连接,镜像可能需要很长时间才能同步镜像。

5.7. 镜像 Ceph 块设备的管理

作为存储管理员,您可以执行各种任务来帮助您管理 Ceph 块设备镜像环境。您可以执行以下任务:

  • 查看有关存储群集对等点的信息.
  • 添加或删除对等存储群集。
  • 获取池或镜像的镜像状态。
  • 启用对池或镜像的镜像。
  • 禁用对池或镜像的镜像。
  • 延迟块设备复制.
  • 提升和降级映像.

5.7.1. 先决条件

  • 至少运行两个健康的红帽 Ceph 存储集群。
  • 对 Ceph 客户端节点的根级别访问权限。
  • 单向或双向 Ceph 块设备镜像关系。

5.7.2. 查看有关同级的信息

查看有关存储集群对等点的信息。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 查看对等点的信息:

    语法

    rbd mirror pool info POOL_NAME

    示例

    [root@rbd-client ~]# rbd mirror pool info data
    Mode: pool
    Peers:
      UUID                                 NAME   CLIENT
      7e90b4ce-e36d-4f07-8cbc-42050896825d site-a client.site-a

5.7.3. 启用对池的镜像

在两个对等集群中运行以下命令,在池上启用镜像功能。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 在池上启用镜像:

    语法

    rbd mirror pool enable POOL_NAME MODE

    示例

    [root@rbd-client ~]# rbd mirror pool enable data pool

    这个示例启用对名为 data 的完整池进行镜像。

    示例

    [root@rbd-client ~]# rbd mirror pool enable data image

    这个示例在名为 data 的池上启用镜像模式镜像。

其它资源

5.7.4. 禁用对池的镜像

在禁用镜像前,删除对等集群。

注意

当您禁用对池的镜像时,您还会在池中在镜像模式中单独启用镜像的镜像禁用它。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 在池上禁用镜像:

    语法

    rbd mirror pool disable POOL_NAME

    示例

    [root@rbd-client ~]# rbd mirror pool disable data

    此示例禁用名为 data 的池的镜像。

其它资源

5.7.5. 启用镜像镜像

在两个对等存储集群中,以镜像模式对整个池启用镜像功能。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 为池中的特定镜像启用镜像功能:

    语法

    rbd mirror image enable POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image enable data/image2

    本例为 数据 池中的 image2 镜像启用镜像。

其它资源

  • 详情请参阅 Red Hat Ceph Storage Block Device 指南 中的 对池启用镜像 部分。

5.7.6. 禁用镜像镜像

禁用镜像的镜像。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 禁用特定镜像的镜像:

    语法

    rbd mirror image disable POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image disable data/image2

    本例禁用 数据 池中 image2 镜像的镜像。

5.7.7. 镜像提升和降级

提升或降级镜像。

注意

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

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

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

    语法

    rbd mirror image demote POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image demote data/image2

    本例降级 数据 池中的 image2 镜像。

  2. 将镜像提升为主要步骤:

    语法

    rbd mirror image promote POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image promote data/image2

    本例提升了 数据 池中的 image2

    根据您使用的镜像类型,请参阅通过 单向镜像从灾难 中恢复,或者通过双向镜像从灾难 中恢复。

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

    语法

    rbd mirror image promote --force POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image promote --force data/image2

    当降级无法传播到对等 Ceph 存储群集时,请使用强制提升。例如,由于群集失败或通信中断。

5.7.8. 镜像重新同步

重新同步镜像.如果两个对等集群之间状态不一致,rbd-mirror 守护进程不会尝试镜像导致不一致的镜像。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 请求主镜像重新同步:

    语法

    rbd mirror image resync POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image resync data/image2

    这个示例请求在 data 池中重新同步 image2

其它资源

5.7.9. 添加存储集群对等集群

rbd-mirror 守护进程添加一个存储集群 peer,以发现其对等存储集群。例如,要将 site-a 存储集群添加为 site-b 存储集群 的对等点,然后从 site-b 存储集群中的客户端节点按照以下步骤操作。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 将 peer 注册到池:

    语法

    rbd --cluster CLUSTER_NAME mirror pool peer add POOL_NAME PEER_CLIENT_NAME@PEER_CLUSTER_NAME -n CLIENT_NAME

    示例

    [root@rbd-client ~]# rbd --cluster site-b mirror pool peer add data client.site-a@site-a -n client.site-b

5.7.10. 删除存储集群对等

通过指定对等 UUID 来删除存储群集对等。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 指定池名称和同级通用唯一标识符(UUID)。

    语法

    rbd mirror pool peer remove POOL_NAME PEER_UUID

    示例

    [root@rbd-client ~]# rbd mirror pool peer remove data 7e90b4ce-e36d-4f07-8cbc-42050896825d

    提示

    若要查看对等 UUID,可使用 rbd mirror pool info 命令。

5.7.11. 获取池的镜像状态

获取池的镜像状态。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 获取镜像池概述:

    语法

    rbd mirror pool status POOL_NAME

    示例

    [root@rbd-client ~]# rbd mirror pool status data
    health: OK
    images: 1 total

    提示

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

5.7.12. 获取单个镜像的镜像状态

获取镜像的镜像状态。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 获取已镜像镜像的状态:

    语法

    rbd mirror image status POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# 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

    本例获取 data 池中 image2 镜像的状态。

5.7.13. 延迟块设备复制

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

为实施延迟复制,目标存储集群内的 rbd-mirror 守护进程应设置 rbd_mirroring_replay_delay = MINIMUM_DELAY_IN_SECONDS 配置选项。此设置可以在 rbd-mirror 守护进程使用的 ceph.conf 文件中全局应用,也可以在单个镜像基础上应用。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

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

    语法

    rbd image-meta set POOL_NAME/IMAGE_NAME conf_rbd_mirroring_replay_delay MINIMUM_DELAY_IN_SECONDS

    示例

    [root@rbd-client ~]# rbd image-meta set vms/vm-1 conf_rbd_mirroring_replay_delay 600

    本例在 vm s 池中设置 image vm-1 的最小复制延迟 10 分钟。

5.7.14. 异步更新和 Ceph 块设备镜像

使用带有异步更新的 Ceph 块设备镜像来更新存储集群时,请遵循《 红帽 Ceph 存储安装指南》 中的更新说明。完成更新后,重新启动 Ceph 块设备实例。

注意

重新启动实例不需要的顺序。红帽建议重启实例,使其指向主镜像池,然后实例指向镜像池。

5.7.15. 创建镜像 mirror-snapshot

在使用基于快照的镜像功能时,创建镜像 mirror-snapshot,以镜像 RBD 镜像已更改的内容。

先决条件

  • 至少运行两个健康的红帽 Ceph 存储集群。
  • 对红帽 Ceph 存储集群的 Ceph 客户端节点的根级别访问权限。
  • 具有管理员级别功能的 CephX 用户。
  • 访问创建快照镜像的红帽 Ceph 存储集群。
重要

默认情况下,每个镜像只能创建 3 个镜像 mirror-snapshot。如果达到限制,则最新镜像 mirror-snapshot 会自动被删除。如果需要,可以通过 rbd_mirroring_max_mirroring_snapshots 配置覆盖限制。镜像 mirror-snapshot 会在镜像被删除或禁用镜像时自动删除。

流程

  1. 创建 image-mirror 快照:

    语法

    rbd --cluster CLUSTER_NAME mirror image snapshot POOL_NAME/IMAGE_NAME

    示例

    root@rbd-client ~]# rbd --cluster site-a mirror image snapshot data/image1

其它资源

5.7.16. 调度 mirror-snapshot

在定义 mirror-snapshot 调度时,可以自动创建 mirror-snapshots。mirror-snapshot 可以按池或镜像级别进行全局调度。可以在任何级别上定义多个 mirror-snapshot 调度,但只有与单个镜像映像匹配的最具体的快照调度才会运行。

其它资源

5.7.17. 创建 mirror-snapshot 计划

创建 mirror-snapshot 计划。

先决条件

  • 至少运行两个健康的红帽 Ceph 存储集群。
  • 对红帽 Ceph 存储集群的 Ceph 客户端节点的根级别访问权限。
  • 具有管理员级别功能的 CephX 用户。
  • 访问创建快照镜像的红帽 Ceph 存储集群。

流程

  1. 创建 mirror-snapshot 调度:

    语法

    rbd --cluster CLUSTER_NAME mirror snapshot schedule add POOL_NAME/IMAGE_NAME INTERVAL START_TIME

    间隔可以分别使用 d、h 或 m 后缀以天、小时或分钟为单位指定。可选的 START_TIME 可以使用 ISO 8601 时间格式指定。

    示例

    [root@rbd-client ~]# rbd --cluster site-a mirror snapshot schedule add data/image1 6h

    示例

    [root@rbd-client ~]# rbd --cluster site-a mirror snapshot schedule add data/image1 24h 14:00:00-05:00

其它资源

5.7.18. 列出特定级别的所有快照计划

列出特定级别的所有快照计划。

先决条件

  • 至少运行两个健康的红帽 Ceph 存储集群。
  • 对红帽 Ceph 存储集群的 Ceph 客户端节点的根级别访问权限。
  • 具有管理员级别功能的 CephX 用户。
  • 访问创建快照镜像的红帽 Ceph 存储集群。

流程

  1. 使用可选池或镜像名称列出特定全局、池或镜像级别的所有快照调度:

    语法

    rbd --cluster site-a mirror snapshot schedule ls --pool POOL_NAME --recursive

    此外,还可指定 '-- 递归 选项来列出指定级别的所有调度,如下所示:

    示例

    [root@rbd-client ~]# rbd --cluster site-a mirror snapshot schedule ls --pool data --recursive
    POOL        NAMESPACE IMAGE  SCHEDULE
    data         -         -      every 1d starting at 14:00:00-05:00
    data         -        image1   every 6h

其它资源

5.7.19. 删除 mirror-snapshot 调度

删除 mirror-snapshot 计划。

先决条件

  • 至少运行两个健康的红帽 Ceph 存储集群。
  • 对红帽 Ceph 存储集群的 Ceph 客户端节点的根级别访问权限。
  • 具有管理员级别功能的 CephX 用户。
  • 访问创建快照镜像的红帽 Ceph 存储集群。

流程

  1. 删除 mirror-snapshot 调度:

    语法

    rbd --cluster CLUSTER_NAME mirror snapshot schedule remove POOL_NAME/IMAGE_NAME INTERVAL START_TIME

    间隔可以分别使用 d、h 和 m 后缀来以天数、小时或分钟为单位指定。可选的 START_TIME 可以使用 ISO 8601 时间格式指定。

    示例

    [root@rbd-client ~]# rbd --cluster site-a mirror snapshot schedule remove data/image1 6h

    示例

    [root@rbd-client ~]# rbd --cluster site-a mirror snapshot schedule remove data/image1 24h 14:00:00-05:00

其它资源

5.7.20. 查看要创建的下一个快照的状态

查看要为基于快照的镜像 RBD 镜像创建下一快照的状态。

先决条件

  • 至少运行两个健康的红帽 Ceph 存储集群。
  • 对红帽 Ceph 存储集群的 Ceph 客户端节点的根级别访问权限。
  • 具有管理员级别功能的 CephX 用户。
  • 访问创建快照镜像的红帽 Ceph 存储集群。

流程

  1. 查看要创建的下一个快照的状态:

    语法

    rbd --cluster site-a mirror snapshot schedule status POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd --cluster site-a mirror snapshot schedule status
    SCHEDULE    TIME       IMAGE
    2020-02-26 18:00:00 data/image1

其它资源

5.8. 从灾难中恢复

作为存储管理员,您可以通过了解如何从配置了镜像功能的另一个存储集群恢复数据,为最终的硬件故障做好准备。

在示例中,主存储集群称为 site-a,辅助存储集群称为 site-b。此外,存储集群还拥有一个含有两个镜像,image 1 和 image 2 的数据 池。

5.8.1. 先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 配置了单向或双向镜像。

5.8.2. 灾难恢复

在两个或多个红帽 Ceph 存储集群间异步复制块数据可减少停机时间,并防止发生重大数据中心故障时出现数据丢失。这些故障具有广泛的影响,也称为 大刀片,并且可能源自对电网和危险性的影响。

客户数据需要在这些情况下受到保护。卷必须遵循一致性和效率,并在恢复点目标(RPO)和恢复时间目标(RTO)目标内进行复制。此解决方案称为广域网灾难恢复(WAN-DR)。

在这种情况下,很难恢复主系统和数据中心。恢复的最快速方法是将应用程序故障转移到备用的红帽 Ceph 存储集群(灾难恢复站点),并使集群能够运行最新可用数据副本。用于从这些故障场景中恢复的解决方案由应用程序指导:

  • 恢复点目标(RPO) :数据丢失的数量,在最糟糕的情况下,应用程序容许。
  • 恢复时间目标(RTO) :使用最新可用数据副本使应用程序重新上线所需的时间。

其它资源

  • 详情请参阅 红帽 Ceph 存储块设备 指南中的镜像 Ceph 块设备 一节。
  • 请参阅红帽 Ceph 存储数据安全和硬化指南 中的加密传输 部分,以了解更多有关通过 加密状态通过线路传输数据的信息。

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

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

重要

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

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

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

其它资源

  • 有关演示、提升和重新同步镜像的详情,请参阅 Red Hat Ceph Storage Block Device Guide 中的 配置镜像 部分。

5.8.5. 有序关闭后故障转移

正常关闭后故障转移到辅助存储集群。

先决条件

流程

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

    语法

    rbd mirror image demote POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image demote data/image1
    [root@rbd-client ~]# rbd mirror image demote data/image2

  3. site-b 集群中的监控节点中运行以下命令来提升位于 site-b 集群中的非主镜像:

    语法

    rbd mirror image promote POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image promote data/image1
    [root@rbd-client ~]# rbd mirror image promote data/image2

  4. 段时间后,检查 site-b 集群中监控节点中的镜像状态。它们应当显示 up+stopped 状态,并列为主要状态:

    [root@rbd-client ~]# 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
    [root@rbd-client ~]# 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
  5. 恢复对镜像的访问。此步骤取决于哪些客户端使用该镜像。

其它资源

  • 请参阅《 红帽 OpenStack 平台存储指南 》中的 块存储和卷 章节。

5.8.6. 非有序关闭后故障转移

非有序关闭后故障转移到次要存储集群。

先决条件

流程

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

    语法

    rbd mirror image promote --force POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image promote --force data/image1
    [root@rbd-client ~]# rbd mirror image promote --force data/image2

  4. 检查 site-b 存储集群中 Ceph 监控节点的镜像状态。它们应当显示 up+stopping_replay 状态,描述应显示 force提升

    示例

    [root@rbd-client ~]# 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
    [root@rbd-client ~]# 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

其它资源

  • 请参阅《 红帽 OpenStack 平台存储指南 》中的 块存储和卷 章节。

5.8.7. 准备故障恢复

如果两个存储集群最初只配置为单向镜像,为了避免故障,请配置主存储集群以进行镜像,以便按照相反方向复制镜像。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. site-a 存储集群的客户端节点上,安装 rbd-mirror 软件包:

    [root@rbd-client ~]# yum install rbd-mirror
    注意

    软件包由红帽 Ceph 存储工具存储库提供。

  2. site-a 存储集群的客户端节点上,通过在 /etc/sysconfig/ceph 文件中添加 CLUSTER 选项来指定存储集群名称:

    CLUSTER=site-b
  3. site-b Ceph 配置文件和密钥环文件从 site-b Ceph Monitor 节点复制到 site-a Ceph monitor 和客户端节点:

    语法

    scp /etc/ceph/ceph.conf USER@SITE_A_MON_NODE_NAME:/etc/ceph/site-b.conf
    scp /etc/ceph/site-b.client.site-b.keyring root@SITE_A_MON_NODE_NAME:/etc/ceph/
    scp /etc/ceph/ceph.conf user@SITE_A_CLIENT_NODE_NAME:/etc/ceph/site-b.conf
    scp /etc/ceph/site-b.client.site-b.keyring user@SITE_A_CLIENT_NODE_NAME:/etc/ceph/

    注意

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

  4. site-a Ceph Monitor 节点的 site-a keyring 文件复制到 site-a 客户端节点:

    语法

    scp /etc/ceph/site-a.client.site-a.keyring <user>@SITE_A_CLIENT_HOST_NAME:/etc/ceph/

  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

    CLIENT_ID 更改为 rbd-mirror 守护进程将使用的 Ceph 存储集群用户。用户必须具有对存储集群的适当 cephx 访问权限。

    示例

    [root@rbd-client ~]# systemctl enable ceph-rbd-mirror.target
    [root@rbd-client ~]# systemctl enable ceph-rbd-mirror@site-a
    [root@rbd-client ~]# systemctl start ceph-rbd-mirror@site-a

  6. site-a 集群的客户端节点中,将 site-b 集群添加为对等集群:

    示例

    [root@rbd-client ~]# rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-a

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

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

    示例

    [root@rbd-client ~]# rbd mirror pool info -p data
    Mode: image
    Peers:
      UUID                                 NAME   CLIENT
      d2ae0594-a43b-4c67-a167-a36c646e8643 site-b client.site-b

其它资源

  • 如需更多信息,请参见《 红帽 Ceph 存储管理指南》 中的用户管理 一章。

5.8.7.1. 返回主存储集群失败

当以前的主存储集群恢复时,失败回主存储集群。

先决条件

流程

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

    示例

    [root@rbd-client ~]# 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
    [root@rbd-client ~]# 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

  2. site-a 存储集群的 Ceph 监控节点确定镜像是否仍然是主镜像:

    语法

    rbd mirror pool info POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd info data/image1
    [root@rbd-client ~]# rbd info data/image2

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

  3. site-a 存储集群中的 Ceph monitor 节点运行以下命令来降级列为主要镜像:

    语法

    rbd mirror image demote POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image demote data/image1

  4. 如果未按顺序关闭,则仅重新同步映像。在 site-a 存储集群中的监控节点上运行以下命令,以重新同步从 site-b 到 site- a 的镜像:

    语法

    rbd mirror image resync POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image resync data/image1
    Flagged image for resync from primary
    [root@rbd-client ~]# rbd mirror image resync data/image2
    Flagged image for resync from primary

  5. 段时间后,通过验证映像是否处于 up+replaying 状态,确保完成映像重新同步。通过在 site-a 存储集群中的监控节点中运行以下命令来检查其状态:

    语法

    rbd mirror image status POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image status data/image1
    [root@rbd-client ~]# rbd mirror image status data/image2

  6. site-b 存储集群中的 Ceph monitor 节点上运行以下命令来降级 site-b 存储集群 中的镜像:

    语法

    rbd mirror image demote POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image demote data/image1
    [root@rbd-client ~]# rbd mirror image demote data/image2

    注意

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

  7. site-a 存储集群中的 Ceph monitor 节点中运行以下命令来提升位于 site-a 存储集群中的以前主镜像:

    语法

    rbd mirror image promote POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# rbd mirror image promote data/image1
    [root@rbd-client ~]# rbd mirror image promote data/image2

  8. 检查 site-a 存储集群中 Ceph 监控节点的镜像状态。它们应当显示 up+stopped 状态,描述应该假设 本地镜像为 primary:

    语法

    rbd mirror image status POOL_NAME/IMAGE_NAME

    示例

    [root@rbd-client ~]# 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
    [root@rbd-client ~]# 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

5.8.8. 删除双向镜像

恢复失败后,您可以移除双向镜像功能,并禁用 Ceph 块设备镜像服务。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

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

    示例

    [root@rbd-client ~]# rbd mirror pool peer remove data client.remote@remote --cluster local
    [root@rbd-client ~]# rbd --cluster site-a mirror pool peer remove data client.site-b@site-b -n client.site-a

  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

    示例

    [root@rbd-client ~]# systemctl stop ceph-rbd-mirror@site-a
    [root@rbd-client ~]# systemctl disable ceph-rbd-mirror@site-a
    [root@rbd-client ~]# systemctl disable ceph-rbd-mirror.target

第 6 章 使用 Ceph 块设备 Python 模块

rbd python 模块提供对 Ceph 块设备镜像的类文件访问。要使用此内置工具,请导入 rbd andrados Python 模块。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

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

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

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

    image = rbd.Image(ioctx, 'myimage')
    data = 'foo' * 200
    image.write(data, 0)

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

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

    image.close()
    ioctx.close()
    cluster.shutdown()

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

    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()

    这可能很麻烦,因此 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)

第 7 章 Ceph iSCSI 网关

作为存储管理员,您可以为红帽 Ceph 存储集群安装和配置 iSCSI 网关。利用 Ceph 的 iSCSI 网关,您可以有效地运行完全集成的块存储基础架构,其具备传统存储区域网络(SAN)的所有功能和好处。

7.1. Ceph iSCSI 网关简介

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

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

图 7.1. Ceph iSCSI 网关 HA 设计

Ceph iSCSI HA 424879 1116¼ 01

7.2. iSCSI 目标的要求

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

所需节点数

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

内存要求

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

检测关闭 OSD

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

其它资源

7.3. 安装 iSCSI 网关

作为存储管理员,您必须先安装必要的软件包,然后才能利用 Ceph iSCSI 网关的优势。您可以使用 Ansible 部署工具或 命令行界面 来安装 Ceph iSCSI 网关。

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

7.3.1. 先决条件

  • 红帽企业 Linux 8 或 7.7 或更高版本.
  • 正在运行的红帽 Ceph 存储 4 或更高版本集群。

7.3.2. 使用 Ansible 安装 Ceph iSCSI 网关

使用 Ansible 实用程序安装软件包,并为 Ceph iSCSI 网关设置守护进程。

先决条件

  • 安装了 ceph-ansible 软件包的 Ansible 管理节点。

流程

  1. 在 iSCSI 网关节点上,启用红帽 Ceph 存储 4 工具存储库。详情请参阅 《红帽 Ceph 存储 安装指南》中的启用红帽 Ceph 存储 存储库 一节。
  2. 在 Ansible 管理节点上,在 /etc/ansible/hosts 文件中为 gateway 组添加一个条目。如果您将 iSCSI 网关与 OSD 节点并置,请将 OSD 节点添加到 [iscsigws] 部分中。

    [iscsigws]
    ceph-igw-1
    ceph-igw-2
  3. Ansible 将文件放置在 /usr/share/ceph-ansible/group_vars/ 目录中,名为 iscsigws.yml.sample。创建 iscsigws.yml.sample 文件的副本,取名为 iscsigws.yml
  4. (可选)查看 iSCSI 网关变量部分中的 Ansible 变量 和描述,并根据需要更新 iscsigws.yml

    警告

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

    警告

    在使用 ansible -playbook 命令时,Ansible 安装 ceph-iscsi 软件包,创建和更新 /etc/ceph/iscsi-gateway.cfg 文件,具体取决于 group_vars/iscsigws.yml 文件中的设置。如果您之前已经使用 命令行界面安装了 ceph-iscsi 软件包,请将 iscsi-gateway.cfg 文件中的现有设置从 iscsi-gateway.cfg 文件中 复制到 group_vars/iscsigws.yml 文件中。

  5. 在 Ansible 管理节点上,执行 Ansible playbook。

    • 裸机部署:

      [admin@ansible ~]$ cd /usr/share/ceph-ansible
      [admin@ansible ceph-ansible]$ ansible-playbook site.yml -i hosts
    • 容器部署:

      [admin@ansible ~]$ cd /usr/share/ceph-ansible
      [admin@ansible ceph-ansible]$ ansible-playbook site-container.yml -i hosts
      警告

      在独立 iSCSI 网关节点上,验证是否已启用正确的红帽 Ceph 存储 4 软件存储库。如果它们不可用,Ansible 可能会安装不正确的软件包。

  6. 若要创建目标、LUN 和客户端,可使用 gwcli 实用程序或红帽 Ceph 存储仪表板。

    重要

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

其它资源

7.3.3. 使用命令行界面安装 Ceph iSCSI 网关

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

先决条件

  • Red Hat Enterprise Linux 8 或 7.7 及更新的版本
  • Red Hat Ceph Storage 4 集群或更新版本
  • 在存储集群的所有 Ceph 监控节点上,以 root 用户身份 重启 ceph-mon 服务:

    语法

    systemctl restart ceph-mon@MONITOR_HOST_NAME

    示例

    [root@mon ~]# systemctl restart ceph-mon@monitor1

  • 如果 Ceph iSCSI 网关不在 OSD 节点上并置,请将位于 /etc/ceph/ 目录下的 Ceph 配置文件从存储集群中正在运行的 Ceph 节点复制到所有 iSCSI 网关节点。Ceph 配置文件必须存在于 /etc/ceph/ 的 iSCSI 网关节点上。
  • 在所有 Ceph iSCSI 网关节点上,启用 Ceph Tools 存储库。详情请参阅《 安装指南 》中的启用红帽 Ceph 存储存储库 一节。
  • 在所有 Ceph iSCSI 网关节点上,安装和配置 Ceph 命令行界面。详情请参阅《红帽 Ceph 存储 4 安装指南 》中的安装 Ceph 命令行界面 一章。
  • 如果需要,在所有 Ceph iSCSI 节点上的防火墙上打开 TCP 端口 3260 和 5000。
  • 新建或使用现有的 RADOS 块设备(RBD)。

流程

  1. 在所有 Ceph iSCSI 网关节点上,安装 ceph-iscsitcmu-runner 软件包:

    [root@iscsigw ~]# yum install ceph-iscsi tcmu-runner
    重要

    如果这些软件包以前的版本存在,请在安装更新的版本前将其删除。您必须从 Red Hat Ceph Storage 存储库安装这些较新版本。

  2. (可选)在所有 Ceph iSCSI 网关节点上,根据需要安装和配置 OpenSSL 实用程序。

    1. 安装 openssl 软件包:

      [root@iscsigw ~]# yum install openssl
    2. 在主 iSCSI 网关节点上,创建一个目录来存放 SSL 密钥:

      [root@iscsigw ~]# mkdir ~/ssl-keys
      [root@iscsigw ~]# cd ~/ssl-keys
    3. 在主 iSCSI 网关节点上,创建证书和密钥文件。出现提示时,输入环境信息。

      [root@iscsigw ~]# openssl req -newkey rsa:2048 -nodes -keyout iscsi-gateway.key -x509 -days 365 -out iscsi-gateway.crt
    4. 在主 iSCSI 网关节点上,创建一个 PEM 文件:

      [root@iscsigw ~]# cat iscsi-gateway.crt iscsi-gateway.key > iscsi-gateway.pem
    5. 在主 iSCSI 网关节点上,创建一个公钥:

      [root@iscsigw ~]# openssl x509 -inform pem -in iscsi-gateway.pem -pubkey -noout > iscsi-gateway-pub.key
    6. 从主 iSCSI 网关节点,将 iscsi-gateway.crtiscsi-gateway.pemiscsi-gateway-pub.keyiscsi-gateway.key 文件复制到其他 iSCSI 网关节点上的 /etc/ceph/ 目录中。
  3. 在 Ceph iSCSI 网关节点上创建配置文件,然后将它复制到所有 iSCSI 网关节点。

    1. /etc/ceph/ 目录中创建一个名为 iscsi-gateway.cfg 的文件:

      [root@iscsigw ~]# touch /etc/ceph/iscsi-gateway.cfg
    2. 编辑 iscsi-gateway.cfg 文件并添加以下几行:

      语法

      [config]
      cluster_name = CLUSTER_NAME
      gateway_keyring = CLIENT_KEYRING
      api_secure = false
      trusted_ip_list = IP_ADDR,IP_ADDR

      示例

      [config]
      cluster_name = ceph
      gateway_keyring = ceph.client.admin.keyring
      api_secure = false
      trusted_ip_list = 192.168.0.10,192.168.0.11

    3. iscsi-gateway.cfg 文件复制到所有 iSCSI 网关节点。请注意,该文件在所有 iSCSI 网关节点上必须相同。
  4. 在所有 Ceph iSCSI 网关节点上,启用并启动 API 服务:

    [root@iscsigw ~]# systemctl enable rbd-target-api
    [root@iscsigw ~]# systemctl start rbd-target-api
    [root@iscsigw ~]# systemctl enable rbd-target-gw
    [root@iscsigw ~]# systemctl start rbd-target-gw
  5. 接下来,配置目标、LUN 和客户端。详情请参阅 使用命令行界面配置 iSCSI 目标 部分。

其它资源

7.3.4. 其它资源

7.4. 配置 iSCSI 目标

作为存储管理员,您可以使用 gwcli 命令行实用程序 配置 目标、LUN 和客户端。您还可以使用 gwcli 重新配置 子命令来 优化 iSCSI 目标的性能

警告

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

警告

在从 iSCSI 网关配置移除 RBD 镜像之前,请遵循从操作系统中删除存储设备的标准步骤。详情请查看 Red Hat Enterprise Linux 7 的存储管理指南中的删除存储设备 章节或 Red Hat Enterprise Linux 8 的系统 设计指南

7.4.1. 先决条件

  • 安装 Ceph iSCSI 网关软件。

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

Ceph iSCSI 网关是 iSCSI 目标节点,也是 Ceph 客户端节点。在独立节点上配置 Ceph iSCSI 网关,或者将它与 Ceph 对象存储设备(OSD)节点共存。

警告

除非在本文档中指定,或者红帽支持指示您这样做,否则不要使用 or gwcli 重新配置 子命令来调整其他选项。

先决条件

  • 安装 Ceph iSCSI 网关软件。

流程

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

    [root@iscsigw ~]# gwcli
  2. 使用 IPv4 或 IPv6 地址创建 iSCSI 网关:

    语法

    >/iscsi-targets 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

    示例

    >/iscsi-targets 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

    注意

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

  3. 添加 Ceph 块设备:

    语法

    > cd /disks
    >/disks/ create POOL_NAME image=IMAGE_NAME size=IMAGE_SIZE_m|g|t

    示例

    > cd /disks
    >/disks/ create rbd image=disk_1 size=50g

    注意

    不要在池或镜像名称中使用任何句点(.)。

  4. 创建客户端:

    语法

    > goto hosts
    > create iqn.1994-05.com.redhat:_client_name_
    > auth use username=USER_NAME password=PASSWORD

    示例

    > goto hosts
    > create iqn.1994-05.com.redhat:rh7-client
    > auth username=iscsiuser1 password=temp12345678

    重要

    红帽不支持混合客户端,有些客户启用了 Challenge Handshake Authentication Protocol(CHAP),并禁用了一些 CHAP。所有客户端都必须启用 CHAP,或者禁用 CHAP。默认的行为是仅通过其启动器名称验证启动器。

    如果启动器无法登录到目标,某些启动器可能无法正确配置 CHAP 身份验证,例如:

    o- hosts ................................ [Hosts: 2: Auth: MISCONFIG]

    主机 级别使用以下命令重置所有 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)]
  5. 向客户端添加磁盘:

    语法

    >/iscsi-target..eph-igw/hosts
    > cd iqn.1994-05.com.redhat:_CLIENT_NAME_
    > disk add POOL_NAME/IMAGE_NAME

    示例

    >/iscsi-target..eph-igw/hosts
    > cd iqn.1994-05.com.redhat:rh7-client
    > disk add rbd/disk_1

  6. 若要确认 API 正确使用 SSL,请搜索位于 /var/log/rbd -target-api.log 或 /var/log/rbd-target /rbd-target-api.log 的 rbd -target-api.log 例如:

    Aug 01 17:27:42 test-node.example.com python[1879]:  * Running on https://0.0.0.0:5000/
  7. 验证 Ceph 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)]

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

  8. 另外,还可重新配置 max_data_area_mb 选项:

    语法

    >/disks/ reconfigure POOL_NAME/IMAGE_NAME max_data_area_mb NEW_BUFFER_SIZE

    示例

    >/disks/ reconfigure rbd/disk_1 max_data_area_mb 64

    注意

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

  9. 配置 iSCSI 启动器.

其它资源

7.4.3. 优化 iSCSI 目标的性能

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

警告

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

The gwcli 重新配置 子命令可控制用于优化 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

其它资源

7.4.4. 降低检测 down OSD 的计时器设置

有时,需要降低检测 down OSD 的定时器设置。例如,在将红帽 Ceph 存储用作 iSCSI 网关时,您可以通过降低检测 down OSD 的计时器设置来降低启动器超时的可能性。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 访问 Ansible 管理节点.

流程

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

    1. 在 Ansible 管理节点上,在 group _vars/all.yml 文件中添加 ceph_ conf_overrides 部分,如下所示,或编辑任何现有的 ceph_conf_overrides 部分:

      ceph_conf_overrides:
           osd:
             osd_client_watch_timeout: 15
             osd_heartbeat_grace: 20
             osd_heartbeat_interval: 5

      在 Ansible playbook 运行时,上面的设置将添加到 OSD 节点上的 ceph.conf 配置文件中。

    2. 进入 ceph-ansible 目录:

      [admin@ansible ~]$ cd /usr/share/ceph-ansible
    3. 使用 Ansible 更新 ceph.conf 文件,并在所有 OSD 节点上重新启动 OSD 守护进程。在 Ansible admin 节点上运行以下命令:

      裸机 部署

      [admin@ansible ceph-ansible]$ ansible-playbook site.yml --limit osds

      容器 部署

      [admin@ansible ceph-ansible]$ ansible-playbook site-container.yml --limit osds -i hosts

  2. 验证定时器设置与 ceph_conf_overrides 中设置的相同:

    语法

    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

    示例

    [root@osd ~]# ceph daemon osd.0 config get osd_client_watch_timeout
    {
        "osd_client_watch_timeout": "15"
    }
    
    [root@osd ~]#  ceph daemon osd.0 config get osd_heartbeat_grace
    {
        "osd_heartbeat_grace": "20"
    }
    
    [root@osd ~]# ceph daemon osd.0 config get osd_heartbeat_interval
    {
        "osd_heartbeat_interval": "5"
    }

  3. 可选:如果无法立即重新启动 OSD 守护进程,您可以从 Ceph 监控节点进行在线更新,或者直接更新所有 Ceph OSD 节点。在您能够重新启动 OSD 守护进程后,如上所述,使用 Ansible 将新的计时器设置添加到 ceph.conf 中,以便在重启后保留设置。

    1. 从 Ceph 监控节点在线更新 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'

      示例

      [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'

    2. 从 Ceph 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

      示例

      [root@osd ~]# ceph daemon osd.0 config set osd_client_watch_timeout 15
      [root@osd ~]# ceph daemon osd.0 config set osd_heartbeat_grace 20
      [root@osd ~]# ceph daemon osd.0 config set osd_heartbeat_interval 5

其它资源

7.4.5. 使用命令行界面配置 iSCSI 主机组

Ceph iSCSI 网关可以配置主机组,以管理共享同一磁盘配置的多个服务器。iSCSI 主机组创建主机以及该组中每一主机有权访问的磁盘的逻辑分组。

重要

将磁盘设备共享到多个主机必须使用群集感知型文件系统。

先决条件

  • 安装 Ceph iSCSI 网关软件。
  • 对 Ceph iSCSI 网关节点的 root 级别访问权限。

流程

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

    [root@iscsigw ~]# gwcli
  2. 创建新主机组:

    语法

    cd iscsi-targets/
    cd IQN/host-groups
    create group_name=GROUP_NAME

    示例

    /> cd iscsi-targets/
    /iscsi-targets> cd iqn.2003-01.com.redhat.iscsi-gw:ceph-igw/host-groups/
    /iscsi-target.../host-groups> create group_name=igw_grp01

  3. 在主机组中添加主机:

    语法

    cd GROUP_NAME
    host add client_iqn=CLIENT_IQN

    示例

    > cd igw_grp01
    /iscsi-target.../host-groups/igw_grp01> host add client_iqn=iqn.1994-05.com.redhat:rh8-client

    重复此步骤,将其他主机添加到组中。

  4. 在主机组中添加磁盘:

    语法

    cd /disks/
    /disks> create pool=POOL image=IMAGE_NAME size=SIZE
    cd /IQN/host-groups/GROUP_NAME
    disk add POOL/IMAGE_NAME

    示例

    > cd /disks/
    /disks> create pool=rbd image=rbdimage size=1G
    /> cd iscsi-targets/iqn.2003-01.com.redhat.iscsi-gw:ceph-igw/host-groups/igw_grp01/
    /iscsi-target...s/igw_grp01> disk add rbd/rbdimage

    重复此步骤,向该组添加其他磁盘。

7.4.6. 其它资源

  • 有关使用红帽 Ceph 存储仪表板配置 iSCSI 目标的详情,请参阅红帽 Ceph 存储仪表板指南中的创建 iSCSI 目标 部分。

7.5. 配置 iSCSI 启动器

您可以配置 iSCSI 启动器,以连接到以下平台上的 Ceph iSCSI 网关:

7.5.1. 为 Red Hat Enterprise Linux 配置 iSCSI 启动器

先决条件

  • 红帽企业 Linux 7.7 或更高版本.
  • 必须 安装软件包 iscsi-initiator-utils-6.2.0.873-35 或更新版本。
  • 必须安装 package device-mapper-multipath-0.4.9-99 或更新版本。

流程

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

    [root@rhel ~]# yum install iscsi-initiator-utils
    [root@rhel ~]# yum install device-mapper-multipath
  2. 通过编辑 /etc/iscsi/initiatorname.iscsi 文件来设置启动器名称。请注意,启动器名称必须与使用 gwcli 命令在初始设置期间使用的启动器名称匹配。
  3. 配置多路径 I/O.

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

      [root@rhel ~]# mpathconf --enable --with_multipathd y
    2. 更新 /etc/multipath.conf 文件,如下所示:

      devices {
              device {
                      vendor                 "LIO-ORG"
                      product                "TCMU device"
                      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
              }
      }
    3. 重启 multipathd 服务:

      [root@rhel ~]# systemctl reload multipathd
  4. 设置 CHAP 和 iSCSI 发现和登录。

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

      node.session.auth.authmethod = CHAP
      node.session.auth.username = user
      node.session.auth.password = password
    2. 发现目标门户:

      语法

      iscsiadm -m discovery -t st -p IP_ADDR

    3. 登录到目标:

      语法

      iscsiadm -m node -T TARGET -l

  5. 查看多路径 I/O 配置。multipathd 守护进程根据 multipath.conf 文件中的设置自动设置设备。

    1. 使用 multipath 命令显示故障切换配置中的设备设置,以及每个路径的优先级组,例如:

      示例

      [root@rhel ~]# multipath -ll
      mpathbt (360014059ca317516a69465c883a29603) dm-1 LIO-ORG,TCMU device
      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

      multipath -ll output prio 值指示 ALUA 状态,其中 prio=50 表示它是在 ALUA Active-Optimized 状态下拥有 iSCSI 网关的路径,prio =10 表示它是一个 Active-non-Optimized 路径。status 字段指示正在使用的路径,其中 active 表示当前使用的路径,启用 则表示 活动 失败时的故障转移路径。

    2. 要将设备名称(例如 multipath -ll 输出中的 sde )与 iSCSI 网关匹配:

      示例

      [root@rhel ~]# iscsiadm -m session -P 3

      Persistent Portal 值是分配给 iSCSI 网关的 IP 地址,列在 the gwcli 实用程序中。

7.5.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 软件包或更新版本

流程

  1. 配置多路径 I/O.

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

      [root@rhv ~]# mpathconf --enable --with_multipathd y
    2. 更新 /etc/multipath.conf 文件,如下所示:

      devices {
              device {
                      vendor                 "LIO-ORG"
                      product                "TCMU device"
                      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
              }
      }
    3. 重启 multipathd 服务:

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

    1. 单击 Discover Targets 以启用目标发现选项发现目标并登录后,新建域窗口将自动显示环境未使用的目标。请注意,环境外部的 LUN 也会显示。您可以使用 发现目标 选项在多个目标或同一 LUN 的多个路径中添加 LUN。
    2. Address 字段中输入 iSCSI 主机的完全限定域名或 IP 地址。
    3. 在端口字段中浏览目标时,输入用于连接 上主机的端口 默认值为 3260
    4. 如果使用 Challenge Handshake Authentication Protocol(CHAP)来保护存储,请选中 User Authentication 复选框。输入 CHAP 用户名和 CHAP 密码
    5. 单击 Discover 按钮。
    6. 从发现结果中选择要使用的目标,然后单击 登录 按钮。或者,单击 Login All 以登录所有发现的目标。

      重要

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

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

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

7.5.3. 为 Microsoft Windows 配置 iSCSI 启动器

先决条件

  • Microsoft Windows Server 2016

流程

  1. 安装 iSCSI 启动器并配置发现和设置。

    1. 安装 iSCSI 启动器驱动程序和 MPIO 工具。
    2. 启动 MPIO 程序,单击 Discover Multi-Paths 选项卡,选中 iSCSI 设备添加支持 框,然后单击 Add
    3. 重启 MPIO 程序。
    4. 在 iSCSI 启动器属性窗口中,在发现 选项卡 1 中添加一个目标门户。输入 Ceph iSCSI 网关的 IP 地址或 DNS 名称 2 和端口 3 :

      iSCSI 发现选项卡 mod
    5. Targets 选项卡 1 中,选择目标并点击 Connect 2

      iSCSI 目标标签页 mod
    6. Connect To Target 窗口中,选择 启用多路径选项 1 ,然后点击 高级 按钮 2

      iSCSI 连接到目标模式
    7. 在使用 连接 部分下,选择一个 目标门户 IP 1 。选择 Enable CHAP login on 2 并从 Ceph iSCSI 客户端凭证部分输入 NameTarget secret3 ,然后单击 OK 4

      iSCSI 高级窗口 mod
      重要

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

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

      iSCSI 窗口启动器属性 mod
  2. 设置 多路径 I/O。在 PowerShell 中,使用 PDORemovePeriod 命令设置 MPIO 负载平衡策略和 mpclaim 命令来设置负载平衡策略。iSCSI 启动器工具配置剩余的选项。

    注意

    红帽建议将 PDORemovePeriod 选项从 PowerShell 增加到 120 秒。您可能需要根据应用调整此值。当所有路径都关闭且 120 秒过期时,操作系统将启动 I/O 请求失败。

    Set-MPIOSetting -NewPDORemovePeriod 120
    1. 设置故障切换策略

      mpclaim.exe -l -m 1
    2. 验证故障转移策略

      mpclaim -s -m
      MSDSM-wide Load Balance Policy: Fail Over Only
    3. 使用 iSCSI 启动器工具 1Targets 选项卡点击 Devices…​ 按钮 2 :

      iSCSI 目标标签2 mod
    4. Devices 窗口中选择一个磁盘 1 并点击 MPIO…​ 按钮 2

      iSCSI 设备 mpio mod
    5. Device Details 窗口显示到每个目标门户的路径。仅必须选择负载平衡策略故障切换 策略。

      mpio 仅设置故障切换模式
    6. 查看 PowerShell 中的 多路径 配置:

      mpclaim -s -d MPIO_DISK_ID

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

      注意

      存在一个 Active/Optimized 路径,它是拥有 LUN 的 iSCSI 网关节点的路径,其他 iSCSI 网关节点有一个 Active/未优化路径。

      mpclaim 输出 mod
  3. (可选)调整设置。考虑使用以下 registry 设置:

    • Windows 磁盘超时

      HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Disk

      TimeOutValue = 65

    • Microsoft iSCSI Initiator Driver

      HKEY_LOCAL_MACHINE\\SYSTEM\CurrentControlSet\Control\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}\<Instance_Number>\Parameters

      LinkDownTime = 25
      SRBTimeoutDelta = 15

7.5.4. 为 VMware ESXi 配置 iSCSI 启动器

先决条件

  • VMware ESXi 6.5 和 6.7u3b 使用虚拟机兼容性 6.5 或 6.7 与 VMFS 6
  • 访问 VMware 主机客户端
  • 对 VMware ESXi 主机的 root 访问权限,以执行 esxcli 命令

流程

  1. 禁用 HardwareAcceleratedMove( XCOPY):

    > esxcli system settings advanced set --int-value 0 --option /DataMover/HardwareAcceleratedMove
  2. 启用 iSCSI 软件。在 导航器 窗格中,单击 Storage 1 。选择 适配器选项卡 2 。点击 配置 iSCSI 3 :

    ESX Web 客户端存储主 mod
  3. 验证名称与 别名部分中的启动器名称 1

    ESX Web 客户端配置 iscsi main mod step2
  4. 如果使用 gwcli 在初始设置期间创建客户端时使用的启动器名称与使用 VMware ESX 主机的启动器名称不同,请使用以下 esxcli 命令。

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

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

      语法

      > esxcli iscsi adapter set -A ADAPTOR_NAME -n INITIATOR_NAME

      示例

      > esxcli iscsi adapter set -A vmhba64 -n iqn.1994-05.com.redhat:rh7-client

  5. 配置 CHAP。展开 CHAP 身份验证 部分 1 。选择"不使用 CHAP,除非目标需要" 2 。输入初始设置中使用的 CHAP NameSecret 3 凭证。验证 Mutual CHAP 验证部分 4 是否选择了"请勿使用 CHAP"。

    ESX Web 客户端 chap mod step3
    警告

    由于 VMware Host 客户端中的一个错误,最初不会使用 CHAP 设置。在 Ceph iSCSI 网关节点上,内核日志包括以下错误来指示此错误:

    > kernel: CHAP user or password not set for Initiator ACL
    > kernel: Security negotiation failed.
    > kernel: iSCSI Login negotiation failed.

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

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

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

    ESX Web 客户端配置 iscsi main mod step5
    注意

    LUN 是自动配置的,使用 ALUA SATP 和 MRU PSP。不要使用其他 SATP 和 PSP。您可以通过 esxcli 命令验证:

    语法

    esxcli storage nmp path list -d eui.DEVICE_ID

    使用适当的设备标识符替换 DEVICE_ID

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

    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)

    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}

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

      启动器名称 = 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.6001405f8d087846e7b4f0e3acd44b

      active 的 Group State 值表示这是到 iSCSI 网关的 Active-Optimized 路径。The gwcli 命令列出 活动 为 iSCSI 网关所有者。如果 主动 路径进入 状态,则其余路径具有 未优化 的组 状态值,并且是故障转移路径。

  9. 匹配其各自 iSCSI 网关的所有路径:

    示例

    > esxcli iscsi session connection list
    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

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

7.6. 管理 iSCSI 服务

ceph-iscsi 软件包将安装配置管理逻辑,以及 rbd-target-gwrbd-target-api systemd 服务。

rbd-target-api 服务在启动时恢复 Linux iSCSI 目标状态,并从诸如 gwcli 和红帽 Ceph 存储控制面板的工具响应 ceph-iscsi REST API 调用。rbd-target-gw 服务使用 Prometheus 插件提供指标数据。

rbd-target-api 服务假定这是 Linux 内核目标层的唯一用户。使用 rbd-target-api 时,不要使用 targetcli 软件包安装的 target 服务。Ansible 在 Ceph iSCSI 网关安装期间自动禁用 targetcli 目标服务。

流程

  1. 启动服务:

    # systemctl start rbd-target-api
    # systemctl start rbd-target-gw
  2. 重启服务:

    # systemctl restart rbd-target-api
    # systemctl restart rbd-target-gw
  3. 重新载入服务:

    # systemctl reload rbd-target-api
    # systemctl reload rbd-target-gw

    重新加载 请求会强制 rbd-target-api 重新读取配置,并将它应用到当前运行的环境。这通常不需要,因为更改是从 Ansible 并行部署到所有 iSCSI 网关节点。

  4. 停止服务:

    # systemctl stop rbd-target-api
    # systemctl stop rbd-target-gw

    停止 请求关闭网关的门户接口,丢弃与客户端的连接,并从内核中擦除当前的 Linux iSCSI 目标配置。这会将 iSCSI 网关返回到干净的状态。当客户端断开连接时,活跃 I/O 通过客户端多路径重新调度到其他 iSCSI 网关。

7.7. 添加更多 iSCSI 网关

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

7.7.1. 先决条件

  • 正在运行的 Red Hat Ceph Storage 4 集群
  • 备用节点或现有 OSD 节点
  • root 权限

7.7.2. 使用 Ansible 添加更多 iSCSI 网关

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

先决条件

  • 红帽企业 Linux 7.7 或更高版本.
  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 安装 iSCSI 网关软件.
  • 在 Ansible 管理节点上具有 admin 用户访问权限.
  • 在新节点上具有 root 用户访问权限.

流程

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

    Red Hat Enterprise Linux 7

    [root@iscsigw ~]# subscription-manager repos --enable=rhel-7-server-rhceph-4-tools-rpms

    Red Hat Enterprise Linux 8

    [root@iscsigw ~]# subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-rpms

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

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

    示例

    [iscsigws]
    ...
    ceph-igw-3
    ceph-igw-4

    注意

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

  4. 进入 ceph-ansible 目录:

    [admin@ansible ~]$ cd /usr/share/ceph-ansible
  5. 在 Ansible 管理节点上,运行适当的 Ansible playbook:

    • 裸机部署:

      [admin@ansible ceph-ansible]$ ansible-playbook site.yml -i hosts
    • 容器部署:

      [admin@ansible ceph-ansible]$ ansible-playbook site-container.yml -i hosts
    重要

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

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

其它资源

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

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

先决条件

  • 红帽企业 Linux 7.7 或更高版本.
  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 安装 iSCSI 网关软件.
  • 具有 root 用户对新节点或 OSD 节点的访问权限.

流程

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

    Red Hat Enterprise Linux 7

    [root@iscsigw ~]# subscription-manager repos --enable=rhel-7-server-rhceph-4-tools-rpms

    Red Hat Enterprise Linux 8

    [root@iscsigw ~]# subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-rpms

  4. 安装 ceph-iscsitcmu-runner 软件包:

    Red Hat Enterprise Linux 7

    [root@iscsigw ~]# yum install ceph-iscsi tcmu-runner

    Red Hat Enterprise Linux 8

    [root@iscsigw ~]# dnf install ceph-iscsi tcmu-runner

    1. 如果需要,安装 openssl 软件包:

      Red Hat Enterprise Linux 7

      [root@iscsigw ~]# yum install openssl

      Red Hat Enterprise Linux 8

      [root@iscsigw ~]# dnf install openssl

  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
  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
  9. 启动 iSCSI 网关命令行界面:

    [root@iscsigw ~]# gwcli
  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

    示例

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

    重要

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

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

其它资源

7.8. 验证启动器是否已连接到 iSCSI 目标

安装 iSCSI 网关并配置 iSCSI 目标和启动器后,验证启动器是否已正确连接到 iSCSI 目标。

先决条件

  • 安装 Ceph iSCSI 网关软件。
  • 配置 iSCSI 目标。
  • 配置 iSCSI 启动器.

流程

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

    [root@iscsigw ~]# gwcli
  2. 验证启动器是否已连接 iSCSI 目标:

    /> 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)]

    如果已连接,则启动器状态为 LOGGED-IN

  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]

    在创建磁盘时,会根据网关映射 LUN 数量最低,将磁盘分配为 iSCSI 网关作为其 Owner。如果这个数字是均衡的,则根据循环分配来分配网关。目前,LUN 的平衡不是动态的,用户无法选择。

    当启动器登录到目标并且 多路径 层处于优化状态时,启动器的操作系统 多路径 实用程序会将到 Owner 网关的路径报告为处于 ALUA Active-Optimized(AO)状态。多路径 工具将其他路径报告为处于 ALUA Active-non-Optimized(ANO)状态。

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

7.9. 使用 Ansible 升级 Ceph iSCSI 网关

可以使用专为滚动升级设计的 Ansible playbook 升级红帽 Ceph 存储 iSCSI 网关。

先决条件

  • 正在运行的 Ceph iSCSI 网关。
  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 对存储集群中所有节点的管理员级别访问权限。
注意

您可以以管理用户或 root 身份运行升级过程。如果要以 root 身份运行它,请确保已设置 ssh 以用于 Ansible。

流程

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

    [admin@ansible ceph-ansible]$ ansible-playbook rolling_update.yml
  3. 运行适当的 playbook 来完成升级:

    裸机部署

    [admin@ansible ceph-ansible]$ ansible-playbook site.yml --limit iscsigws -i hosts

    容器部署

    [admin@ansible ceph-ansible]$ ansible-playbook site-container.yml --limit iscsigws -i hosts

其它资源

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

可以通过一次升级一个裸机 iSCSI 网关,以滚动方式升级红帽 Ceph 存储 iSCSI 网关。

警告

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

先决条件

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

流程

  1. 更新 iSCSI 网关软件包:

    [root@iscsigw ~]# yum update ceph-iscsi
  2. 停止 iSCSI 网关守护进程:

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

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

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

        [root@iscsigw ~]# yum install targetcli
      2. 检查现有的目标对象:

        [root@iscsigw ~]# targetcli ls

        示例

        o- / ............................................................. [...]
        o- backstores .................................................... [...]
        | o- user:rbd ..................................... [Storage Objects: 0]
        o- iscsi .................................................. [Targets: 0]

        如果 后端存储 和存储对象 为空,则 iSCSI 目标已完全关闭,您可以跳过到第 4 步。

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

        [root@iscsigw ~]# targetcli clearconfig confirm=True
        警告

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

  4. 更新 tcmu-runner 软件包:

    [root@iscsigw ~]# yum update tcmu-runner
  5. 停止 tcmu-runner 服务:

    [root@iscsigw ~]# systemctl stop tcmu-runner
  6. 按照以下顺序重启 iSCSI 网关服务:

    [root@iscsigw ~]# systemctl start tcmu-runner
    [root@iscsigw ~]# systemctl start rbd-target-gw
    [root@iscsigw ~]# systemctl start rbd-target-api

7.11. 监控 iSCSI 网关

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

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

注意

The gwtop 工具在容器化环境中不可用。这意味着 Performance Co-Pilot(PCP)软件包也不适用于容器化环境。

以下步骤在 iSCSI 网关节点上完成。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 安装 Ceph iSCSI 网关软件。
  • 对 Ceph iSCSI 网关节点的根级别访问。

流程

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

    [root@iscsigw ~]# yum install ceph-iscsi-tools
  2. 安装性能 co-pilot 软件包:

    [root@iscsigw ~]# yum install pcp
  3. 安装 LIO PMDA 软件包:

    [root@iscsigw ~]# yum install pcp-pmda-lio
  4. 启用并启动性能 co-pilot 服务:

    [root@iscsigw ~]# systemctl enable pmcd
    [root@iscsigw ~]# systemctl start pmcd
  5. 注册 pcp-pmda-lio 代理:

    [root@iscsigw ~]# cd /var/lib/pcp/pmdas/lio
    [root@iscsigw ~]# ./Install

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

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

  6. 使用 gwtop 实用程序监控 iSCSI 网关。对于用户支持的存储(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

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

    警告

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

其它资源

  • 有关如何使用红帽 Ceph 存储仪表板监控 iSCSI 网关的详细信息,请参阅红帽 Ceph 存储仪表板指南 中的 iSCSI 功能 部分。
  • 有关 Performance Co-Pilot(PCP)应用程序的详情,请参阅 Red Hat Enterprise Linux 8 监控和管理系统状态和性能指南中的 Performance Co-Pilot 监控性能 章节。

7.12. 删除 iSCSI 配置

要删除 iSCSI 配置,请使用 gwcli 实用程序删除主机和磁盘,以及 Ansible 清除-iscsi-gateways.yml playbook 来删除 iSCSI 目标配置。

警告

使用 purge-iscsi-gateways.yml playbook 是针对 iSCSI 网关环境的破坏性操作。

+ 警告:如果 RBD 镜像具有快照或克隆,并且通过 Ceph iSCSI 网关导出,尝试使用 purge-iscsi-gateways.yml 会失败。

先决条件

  • 断开所有 iSCSI 启动器:

    • Red Hat Enterprise Linux 启动程序:

      语法

      iscsiadm -m node -T TARGET_NAME --logout

      使用配置的 iSCSI 目标名称替换 TARGET_NAME,例如:

      示例

      # 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.

    • Windows 启动器:

      详情请查看 Microsoft 文档

    • VMware ESXi 启动器:

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

流程

  1. 运行 iSCSI 网关命令行工具:

    [root@iscsigw ~]# gwcli
  2. 删除主机:

    语法

    /> cd /iscsi-target/iqn.2003-01.com.redhat.iscsi-gw:$TARGET_NAME/hosts
    /> /iscsi-target...TARGET_NAME/hosts> delete CLIENT_NAME

    使用配置的 iSCSI 目标名称替换 TARGET_NAME,并将 CLIENT_NAME 替换为 iSCSI initiator 名称,例如:

    示例

    /> cd /iscsi-target/iqn.2003-01.com.redhat.iscsi-gw:ceph-igw/hosts
    /> /iscsi-target...eph-igw/hosts> delete iqn.1994-05.com.redhat:rh7-client

  3. 删除磁盘:

    语法

    /> cd /disks/
    /disks> delete POOL_NAME.IMAGE_NAME

    使用池名称替换 POOL_NAME,将 IMAGE_NAME 替换为镜像的名称,例如:

    示例

    /> cd /disks/
    /disks> delete rbd.disk_1

  4. 运行 iSCSI 网关清除 Ansible playbook:

    [root@ansible ~]# cd /usr/share/ceph-ansible/
    [root@ansible ceph-ansible]# ansible-playbook purge-iscsi-gateways.yml
  5. 在提示时输入清除类型:

    lio
    在此模式下,在定义的所有 iSCSI 网关上清除 Linux iSCSI 目标配置。创建的磁盘在 Ceph 存储集群中保持不变。
    all
    选择 所有 内容时,Linux iSCSI 目标配置会与 iSCSI 网关环境中定义 的所有 RBD 镜像一起移除,其他不相关的 RBD 镜像不会被删除。务必选择正确的模式,因为此操作会删除数据。

    示例

    [root@rh7-iscsi-client ceph-ansible]# ansible-playbook purge-iscsi-gateways.yml
    Which configuration elements should be purged? (all, lio or abort) [abort]: all
    
    
    PLAY [Confirm removal of the iSCSI gateway configuration] *********************
    
    
    GATHERING FACTS ***************************************************************
    ok: [localhost]
    
    
    TASK: [Exit playbook if user aborted the purge] *******************************
    skipping: [localhost]
    
    
    TASK: [set_fact ] *************************************************************
    ok: [localhost]
    
    
    PLAY [Removing the gateway configuration] *************************************
    
    
    GATHERING FACTS ***************************************************************
    ok: [ceph-igw-1]
    ok: [ceph-igw-2]
    
    
    TASK: [igw_purge | purging the gateway configuration] *************************
    changed: [ceph-igw-1]
    changed: [ceph-igw-2]
    
    
    TASK: [igw_purge | deleting configured rbd devices] ***************************
    changed: [ceph-igw-1]
    changed: [ceph-igw-2]
    
    
    PLAY RECAP ********************************************************************
    ceph-igw-1                 : ok=3    changed=2    unreachable=0    failed=0
    ceph-igw-2                 : ok=3    changed=2    unreachable=0    failed=0
    localhost                  : ok=2    changed=0    unreachable=0    failed=0

7.13. 其它资源

  • 有关使用红帽 Ceph 存储仪表板管理 iSCSI 网关的详情,请参阅《红帽 Ceph 存储 4 控制面板指南》 中的 iSCSI 功能 部分。

附录 A. Ceph 块设备配置参考

作为存储管理员,您可以通过可用的各种选项,微调 Ceph 块设备的行为。您可以使用此参考来查看默认 Ceph 块设备选项和 Ceph 块设备缓存选项等内容。

A.1. 先决条件

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

A.2. 块设备默认选项

可以通过创建镜像来覆盖默认设置。Ceph 将创建格式为 2 的映像,而不分条。

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

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

1:分层支持.分层允许您使用克隆。

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

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

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

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

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

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

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

类型
整数
默认

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

重要

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

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

A.3. 块设备常规选项

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

A.4. 块设备缓存选项

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

Ceph 块设备支持回写缓存。若要启用回写缓存,可将 rbd_cache = true 设置为 Ceph 配置文件的 [client] 部分。默认情况下,librbd 不执行任何缓存。写入和读取直接进入存储集群,只有数据处于所有副本的磁盘中时写入才会返回。启用缓存时,写入会立即返回,除非存在超过 rbd_cache_max_dirty 未清空字节。在这种情况下,写入会触发 write-back 并拦截,直到清空了充足的字节为止。

Ceph 块设备支持直写缓存。您可以设置缓存的大小,您可以设置从回写缓存切换到直写缓存的目标和限制。若要启用 write-through 模式,可将 rbd_cache_max_dirty 设置为 0。这意味着,只有在数据处于所有副本的磁盘上时写入才会返回,但读取可能来自缓存。缓存位于客户端上的内存中,每个 Ceph 块设备映像都有自己的内存。由于缓存对客户端而言是本地的,如果其他人访问该镜像,则没有一致性。在 Ceph 块设备上运行其他文件系统(如 GFS 或 OCFS)将无法用于启用缓存。

默认情况下,Ceph 块设备的 Ceph 配置设置必须在 Ceph 配置文件的 [client] 部分中设置,默认为 /etc/ceph/ceph.conf

设置包括:

rbd_cache
描述
为 RADOS 块设备(RBD)启用缓存。
类型
布尔值
必填
默认
true
rbd_cache_size
描述
以字节为单位的 RBD 缓存大小。
类型
64 位 Integer
必填
默认
32 MiB
rbd_cache_max_dirty
描述
以字节为单位的 限制,达到时缓存将触发回写。如果为 0,则使用直写缓存。
类型
64 位 Integer
必填
约束
必须小于 rbd 缓存大小
默认
24 MiB
rbd_cache_target_dirty
描述
缓存开始将数据写入数据存储前的 脏目标。不要阻止写入到缓存。
类型
64 位 Integer
必填
约束
必须小于 rbd cache max dirty
默认
16 MiB
rbd_cache_max_dirty_age
描述
在开始回写前,脏数据在缓存中的秒数。
类型
浮点值
必填
默认
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_cache_writethrough_until_flush
描述
以直写模式开始,并在收到第一个 flush 请求后切换到回写模式。如果 rbd 上运行的虚拟机太旧而无法发送清空,如 Linux 中的 virtio 驱动程序 2.6.32 之前,启用此设置比较保守,但安全设置。
类型
布尔值
必填
默认
true

A.5. 块设备父级和子读选项

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

A.6. 块设备读取预置选项

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

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

A.7. 块设备黑名单选项

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

A.8. 块设备日志选项

rbd_journal_order
描述
转换到计算日志对象最大大小的位数。该值介于 1264 之间。
类型
32 位未签名的整数
默认
24
rbd_journal_splay_width
描述
活动日志对象的数量。
类型
32 位未签名的整数
默认
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
描述
为日志对象指定池。
类型
字符串
默认
""

A.9. 块设备配置覆盖选项

全局级别和池级别的块设备配置覆盖选项。块设备配置的 QoS 设置仅适用于 librbd,不能用于 krbd

全球级别

可用密钥

rbd_qos_bps_burst
描述
所需的 IO 字节突发限制。
类型
整数
默认
0
rbd_qos_bps_limit
描述
每秒 IO 字节数所需的限制。
类型
整数
默认
0
rbd_qos_iops_burst
描述
IO 操作所需的突发限制。
类型
整数
默认
0
rbd_qos_iops_limit
描述
每秒所需的 IO 操作限制。
类型
整数
默认
0
rbd_qos_read_bps_burst
描述
所需的读字节突发限制。
类型
整数
默认
0
rbd_qos_read_bps_limit
描述
所需的每秒读取字节数限制。
类型
整数
默认
0
rbd_qos_read_iops_burst
描述
所需的读操作突发限制。
类型
整数
默认
0
rbd_qos_read_iops_limit
描述
每秒读取操作所需的限制。
类型
整数
默认
0
rbd_qos_write_bps_burst
描述
写入字节所需的突发限制。
类型
整数
默认
0
rbd_qos_write_bps_limit
描述
所需的每秒写入字节数限制。
类型
整数
默认
0
rbd_qos_write_iops_burst
描述
写入操作所需的突发限制。
类型
整数
默认
0
rbd_qos_write_iops_limit
描述
每秒写入操作的预期突发限制。
类型
整数
默认
0

以上键可用于以下目的:

RBD 配置全局设置 CONFIG_ENTITY KEY VALUE
描述
设置全局级配置覆盖。
RBD 配置全局 get CONFIG_ENTITY KEY
描述
获取全局配置覆盖。
RBD 配置全局列表 CONFIG_ENTITY
描述
列出全局级别配置覆盖。
RBD 配置全局删除 CONFIG_ENTITY KEY
描述
删除全局级配置覆盖。

池级别

RBD 配置池设置 POOL_NAME KEY VALUE
描述
设置池级配置覆盖。
RBD 配置池获取 POOL_NAME KEY
描述
获取池级配置覆盖。
RBD 配置池列表 POOL_NAME
描述
列出池级配置覆盖。
RBD 配置池删除 POOL_NAME KEY
描述
删除池级配置覆盖。
注意

CONFIG_ENTITY 是全局、客户端或客户端 ID。KEY 是 config 键。VALUE 是配置值。POOL_NAME 是池的名称。

附录 B. iSCSI 网关变量

iSCSI 网关常规变量

seed_monitor
用途
每一 iSCSI 网关需要访问 Ceph 存储集群,以进行 RADOS 和 RBD 调用。这意味着 iSCSI 网关必须定义适当的 /etc/ceph/ 目录。seed_monitor 主机用于填充 iSCSI 网关的 /etc/ceph/ 目录。
gateway_keyring
用途
定义自定义密钥环名称。
perform_system_checks
用途
这是一个布尔值,用于检查每个 iSCSI 网关上的多路径和 LVM 配置设置。至少第一次运行时必须设置为 true,以确保正确配置 multipathd 守护进程和 LVM。

iSCSI 网关 RBD-TARGET-API 变量

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 网关节点有权访问。

附录 C. 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 #
###########
# Whether or not to generate secure certificate to iSCSI gateway nodes
#generate_crt: False

#iscsi_conf_overrides: {}
#iscsi_pool_name: rbd
#iscsi_pool_size: "{{ osd_pool_default_size }}"

#copy_admin_key: True

##################
# 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/en-us/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: "{{ ansible_memtotal_mb }}m"
#ceph_tcmu_runner_docker_cpu_limit: 1

# RBD_TARGET_GW resource limitation
#ceph_rbd_target_gw_docker_memory_limit: "{{ ansible_memtotal_mb }}m"
#ceph_rbd_target_gw_docker_cpu_limit: 1

# RBD_TARGET_API resource limitation
#ceph_rbd_target_api_docker_memory_limit: "{{ ansible_memtotal_mb }}m"
#ceph_rbd_target_api_docker_cpu_limit: 1