块设备指南
管理、创建、配置和使用 Red Hat Ceph Storage 块设备
摘要
第 1 章 概述 复制链接链接已复制到粘贴板!
块是字节序列,例如 512 字节数据块。基于块的存储接口是使用旋转介质存储数据的最常见的方式,例如:
- 硬盘、
- CDs,
- 软盘,
- 甚至传统的 9-track 磁带。
大量块设备使虚拟块设备成为与 Red Hat Ceph Storage 等大量数据存储系统交互的理想候选者。
Ceph 块设备(也称为可靠的自主分布式对象存储(RADOS)块设备(RBD)是精简配置、可调整大小,并在 Ceph 存储集群中的多个对象存储设备(OSD)上存储数据条带。Ceph 块设备利用 RADOS 功能,例如:
- 创建快照,
- 复制,
- 和一致性。
Ceph 块设备使用 librbd 库与 OSD 交互。
Ceph 块设备为内核虚拟机(KVM) (如快速仿真器(QEMU))和基于云的计算系统(如 OpenStack 和 CloudStack)提供高性能,它们依赖于 libvirt 和 QEMU 实用程序与 Ceph 块设备集成。您可以使用同一集群同时运行 Ceph 对象网关和 Ceph 块设备。
要使用 Ceph 块设备,必须有权访问正在运行的 Ceph 存储集群。有关安装 Red Hat Ceph Storage 的详情,请查看 Red Hat Enterprise Linux 或 Ubuntu 安装指南。
第 2 章 块设备命令 复制链接链接已复制到粘贴板!
rbd 命令允许您创建、列出、内省和删除块设备镜像。您还可以使用它克隆镜像、创建快照、将镜像回滚到快照,查看快照等。
2.1. 先决条件 复制链接链接已复制到粘贴板!
在使用 Ceph 块设备和 rbd 命令之前,您必须满足两个先决条件:
- 您必须有权访问正在运行的 Ceph Storage 集群。详情请查看 Red Hat Ceph Storage 3 安装指南(Red Hat Enterprise Linux 或 Ubuntu 安装指南)。
- 您必须安装 Ceph 块设备客户端。详情请查看 Red Hat Ceph Storage 3 安装指南(Red Hat Enterprise Linux 或 Ubuntu 安装指南)。
手动安装 Ceph 块设备 章节还提供有关在客户端节点上挂载和使用 Ceph 块设备的信息。仅在为 Ceph Storage 集群中的块设备创建镜像后在客户端节点上执行这些步骤。详情请查看 第 2.4 节 “创建块设备镜像”。
2.2. 显示帮助 复制链接链接已复制到粘贴板!
使用 rbd help 命令显示特定 rbd 命令及其子命令的帮助信息:
rbd help <command> <subcommand>
[root@rbd-client ~]# rbd help <command> <subcommand>
示例
显示 snap list 命令的帮助信息:
rbd help snap list
[root@rbd-client ~]# rbd help snap list
-h 选项仍然显示所有可用命令的帮助信息。
2.3. 创建块设备池 复制链接链接已复制到粘贴板!
在使用块设备客户端之前,请确保 rbd 的池存在,并且已启用并初始化。要创建 rbd 池,请执行以下操作:
ceph osd pool create {pool-name} {pg-num} {pgp-num}
ceph osd pool application enable {pool-name} rbd
rbd pool init -p {pool-name}
[root@rbd-client ~]# ceph osd pool create {pool-name} {pg-num} {pgp-num}
[root@rbd-client ~]# ceph osd pool application enable {pool-name} rbd
[root@rbd-client ~]# rbd pool init -p {pool-name}
您必须先创建一个池,然后才能将它指定为来源。如需了解更多详细信息,请参阅 Red Hat Ceph Storage 3 的存储策略指南中的池 章节。 https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/3/html-single/storage_strategies_guide/#pools-1
2.4. 创建块设备镜像 复制链接链接已复制到粘贴板!
在添加块设备到节点之前,在 Ceph 存储集群中为其创建镜像。要创建块设备镜像,请执行以下命令:
rbd create <image-name> --size <megabytes> --pool <pool-name>
[root@rbd-client ~]# rbd create <image-name> --size <megabytes> --pool <pool-name>
例如,要创建一个名为 data 的 1GB 镜像,该镜像将信息存储在名为 stack 的池中,请运行:
rbd create data --size 1024 --pool stack
[root@rbd-client ~]# rbd create data --size 1024 --pool stack
- 注意
-
在创建镜像之前,确保存在
rbd的池。如需了解更多详细信息,请参阅创建块设备池。
2.5. 列出块设备镜像 复制链接链接已复制到粘贴板!
若要列出 rbd 池中的块设备,可执行下列命令(rbd 是默认的池名称):
rbd ls
[root@rbd-client ~]# rbd ls
要列出特定池中的块设备,请执行以下操作,但将 {poolname} 替换为池的名称:
rbd ls {poolname}
[root@rbd-client ~]# rbd ls {poolname}
例如:
rbd ls swimmingpool
[root@rbd-client ~]# rbd ls swimmingpool
2.6. 检索镜像信息 复制链接链接已复制到粘贴板!
要从特定镜像检索信息,请执行以下操作,但将 {image-name} 替换为镜像的名称:
rbd --image {image-name} info
[root@rbd-client ~]# rbd --image {image-name} info
例如:
rbd --image foo info
[root@rbd-client ~]# rbd --image foo info
要从池中的镜像检索信息,请执行以下操作,但将 {image-name} 替换为镜像名称,并将 {pool-name} 替换为池的名称:
rbd --image {image-name} -p {pool-name} info
[root@rbd-client ~]# rbd --image {image-name} -p {pool-name} info
例如:
rbd --image bar -p swimmingpool info
[root@rbd-client ~]# rbd --image bar -p swimmingpool info
2.7. 调整块设备镜像大小 复制链接链接已复制到粘贴板!
Ceph 块设备镜像已精简调配。在开始将数据保存到其中之前,它们不会实际使用任何物理存储。但是,它们具有您通过 --size 选项设置的最大容量。
增加或减少 Ceph 块设备镜像的最大大小:
rbd resize --image <image-name> --size <size>
[root@rbd-client ~]# rbd resize --image <image-name> --size <size>
2.8. 删除块设备镜像 复制链接链接已复制到粘贴板!
要删除块设备,请执行以下操作,但将 {image-name} 替换为您要删除的镜像的名称:
rbd rm {image-name}
[root@rbd-client ~]# rbd rm {image-name}
例如:
rbd rm foo
[root@rbd-client ~]# rbd rm foo
要从池中删除块设备,请执行以下操作,但将 {image-name} 替换为要删除的镜像名称,并将 {pool-name} 替换为池的名称:
rbd rm {image-name} -p {pool-name}
[root@rbd-client ~]# rbd rm {image-name} -p {pool-name}
例如:
rbd rm bar -p swimmingpool
[root@rbd-client ~]# rbd rm bar -p swimmingpool
2.9. 将块设备镜像移动到垃圾箱中 复制链接链接已复制到粘贴板!
RADOS 块设备 (RBD) 镜像可以使用 rbd trash 命令移到回收站中。此命令提供的选项比 rbd rm 命令更多。
镜像移到回收站后,可以稍后将其从回收站中删除。这有助于避免意外删除。
执行以下操作将镜像移到回收站中:
rbd trash move {image-spec}
[root@rbd-client ~]# rbd trash move {image-spec}
镜像位于回收站中后,会为它分配一个唯一镜像 ID。如果您需要使用任何垃圾选项,则需要此镜像 ID 来指定镜像。执行 rbd trash list,以列出回收站中镜像的 ID 列表。此命令还会返回镜像的预删除名称。
此外,还有一个可选的 --image-id 参数,可用于 rbd info 和 rbd snap 命令。将 --image-id 与 rbd info 命令搭配使用,查看垃圾箱中的镜像属性,并使用 rbd snap 从回收站中删除镜像的快照。
从垃圾箱中删除镜像
要从回收站中删除镜像,请执行以下操作:
rbd trash remove [{pool-name}/] {image-id}
[root@rbd-client ~]# rbd trash remove [{pool-name}/] {image-id}
从回收站中删除镜像后,它将无法被恢复。
delay Trash Removal
使用 --delay 选项设置镜像从回收站中删除前的时间。执行以下命令,但将 {time} 替换为在镜像删除前要等待的秒数(默认为 0):
rbd trash move [--delay {time}] {image-spec}
[root@rbd-client ~]# rbd trash move [--delay {time}] {image-spec}
启用 --delay 选项后,除非强制,否则无法从指定时间段中的回收站中删除镜像。
从垃圾箱中恢复镜像
只要镜像尚未从回收站中删除,就可以使用 rbd trash restore 命令恢复镜像。
执行 rbd trash restore 命令以恢复镜像:
rbd trash restore [{pool-name}/] {image-id}
[root@rbd-client ~]# rbd trash restore [{pool-name}/] {image-id}
2.10. 启用和禁用镜像功能 复制链接链接已复制到粘贴板!
您可以在现有镜像上启用或禁用镜像功能,如 fast-diff、exclusive-lock、object-map 或 journaling。
启用功能:
rbd feature enable <pool-name>/<image-name> <feature-name>
[root@rbd-client ~]# rbd feature enable <pool-name>/<image-name> <feature-name>
禁用一个功能:
rbd feature disable <pool-name>/<image-name> <feature-name>
[root@rbd-client ~]# rbd feature disable <pool-name>/<image-name> <feature-name>
例子
在
data池中的image1镜像上启用exclusive-lock功能:rbd feature enable data/image1 exclusive-lock
[root@rbd-client ~]# rbd feature enable data/image1 exclusive-lockCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
data池中禁用image2镜像的fast-diff功能:rbd feature disable data/image2 fast-diff
[root@rbd-client ~]# rbd feature disable data/image2 fast-diffCopy to Clipboard Copied! Toggle word wrap Toggle overflow
启用 fast-diff 和 object-map 功能后,重建对象映射:
rbd object-map rebuild <pool-name>/<image-name>
[root@rbd-client ~]# rbd object-map rebuild <pool-name>/<image-name>
deep flatten 功能只能在现有的镜像上禁用,而不能启用。要使用 deep flatten 功能,需要在创建镜像时启用它。
2.11. 使用镜像元数据 复制链接链接已复制到粘贴板!
Ceph 支持以键值对的形式添加自定义镜像元数据添。这些键值对没有严格的格式限制。
此外,通过使用元数据,您可以为特定镜像设置 RBD 配置参数。详情请参阅 覆盖部分镜像 的默认配置。
使用 rbd image-meta 命令处理元数据。
设置镜像元数据
设置新的元数据键值对:
rbd image-meta set <pool-name>/<image-name> <key> <value>
[root@rbd-client ~]# rbd image-meta set <pool-name>/<image-name> <key> <value>
示例
将
last_update键设置为data池中dataset镜像的2016-06-06值:rbd image-meta set data/dataset last_update 2016-06-06
[root@rbd-client ~]# rbd image-meta set data/dataset last_update 2016-06-06Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除镜像元数据
删除元数据键值对:
rbd image-meta remove <pool-name>/<image-name> <key>
[root@rbd-client ~]# rbd image-meta remove <pool-name>/<image-name> <key>
示例
从
data池中的dataset镜像中删除last_update键值对:rbd image-meta remove data/dataset last_update
[root@rbd-client ~]# rbd image-meta remove data/dataset last_updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow
获取键的值
查看一个键的值:
rbd image-meta get <pool-name>/<image-name> <key>
[root@rbd-client ~]# rbd image-meta get <pool-name>/<image-name> <key>
示例
查看
last_update键的值:rbd image-meta get data/dataset last_update
[root@rbd-client ~]# rbd image-meta get data/dataset last_updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow
列出镜像元数据
显示镜像中的所有元数据:
rbd image-meta list <pool-name>/<image-name>
[root@rbd-client ~]# rbd image-meta list <pool-name>/<image-name>
示例
列出
data池中dataset镜像上设置的元数据:rbd data/dataset image-meta list
[root@rbd-client ~]# rbd data/dataset image-meta listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
覆盖 Particular 镜像的默认配置
要覆盖特定镜像的 Ceph 配置文件中设置的 RBD 镜像配置设置,请将 conf_ 前缀的配置参数设置为镜像元数据:
rbd image-meta set <pool-name>/<image-name> conf_<parameter> <value>
[root@rbd-client ~]# rbd image-meta set <pool-name>/<image-name> conf_<parameter> <value>
示例
为
data池中dataset镜像禁用 RBD 缓存:rbd image-meta set data/dataset conf_rbd_cache false
[root@rbd-client ~]# rbd image-meta set data/dataset conf_rbd_cache falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如需可能 的配置选项的列表,请参阅块设备配置参考。
第 3 章 快照 复制链接链接已复制到粘贴板!
快照是镜像在特定时间点上状态的只读副本。Ceph 块设备的其中一个高级功能是您可以创建镜像的快照来保留镜像状态的历史记录。Ceph 还支持快照分层,允许您快速轻松地克隆镜像(如虚拟机镜像)。Ceph 支持使用 rbd 命令和许多更高级别的接口进行块设备快照,包括 QEMU、libvirt、OpenStack 和 CloudStack。
要使用 RBD 快照,您必须有一个正在运行的 Ceph 集群。
如果在镜像中 I/O 仍在进行时进行快照,则快照可能没有获得镜像的准确或最新的数据,且快照可能需要克隆到新镜像中。因此,建议在生成镜像快照前停止 I/O。如果镜像包含文件系统,则执行快照之前文件系统必须处于一致状态。您可以使用 fsfreeze 命令停止 I/O。详情请查看 fsfreeze (8) 手册页。对于虚拟机,qemu-guest-agent 可用于在创建快照时自动冻结文件系统。
3.1. Cephx 备注 复制链接链接已复制到粘贴板!
启用 cephx (默认为 )后,您必须指定用户名或 ID,以及包含用户对应密钥的密钥环的路径。您还可以添加 CEPH_ARGS 环境变量以避免重新输入以下参数:
rbd --id {user-ID} --keyring=/path/to/secret [commands]
rbd --name {username} --keyring=/path/to/secret [commands]
[root@rbd-client ~]# rbd --id {user-ID} --keyring=/path/to/secret [commands]
[root@rbd-client ~]# rbd --name {username} --keyring=/path/to/secret [commands]
例如:
rbd --id admin --keyring=/etc/ceph/ceph.keyring [commands] rbd --name client.admin --keyring=/etc/ceph/ceph.keyring [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 环境变量,以便您不需要每次输入它们。
3.2. 快照基础 复制链接链接已复制到粘贴板!
以下流程演示了如何在命令行中使用 rbd 命令创建、列出和删除快照。
3.2.1. 创建快照 复制链接链接已复制到粘贴板!
要使用 rbd 创建快照,请指定 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 {pool-name} snap create --snap {snap-name} {image-name}
[root@rbd-client ~]# rbd snap create {pool-name}/{image-name}@{snap-name}
例如:
rbd --pool rbd snap create --snap snapname foo rbd snap create rbd/foo@snapname
[root@rbd-client ~]# rbd --pool rbd snap create --snap snapname foo
[root@rbd-client ~]# rbd snap create rbd/foo@snapname
3.2.2. 列出快照 复制链接链接已复制到粘贴板!
要列出镜像的快照,请指定池名称和镜像名称:
rbd --pool {pool-name} snap ls {image-name}
rbd snap ls {pool-name}/{image-name}
[root@rbd-client ~]# rbd --pool {pool-name} snap ls {image-name}
[root@rbd-client ~]# rbd snap ls {pool-name}/{image-name}
例如:
rbd --pool rbd snap ls foo rbd snap ls rbd/foo
[root@rbd-client ~]# rbd --pool rbd snap ls foo
[root@rbd-client ~]# rbd snap ls rbd/foo
3.2.3. 回滚快照 复制链接链接已复制到粘贴板!
要使用 rbd 回滚到快照,请指定 snap rollback 选项、池名称、镜像名称和 snap 名称:
rbd --pool {pool-name} snap rollback --snap {snap-name} {image-name}
rbd snap rollback {pool-name}/{image-name}@{snap-name}
rbd --pool {pool-name} snap rollback --snap {snap-name} {image-name}
rbd snap rollback {pool-name}/{image-name}@{snap-name}
例如:
rbd --pool rbd snap rollback --snap snapname foo rbd snap rollback rbd/foo@snapname
rbd --pool rbd snap rollback --snap snapname foo
rbd snap rollback rbd/foo@snapname
将镜像回滚到快照意味着使用快照中的数据覆盖镜像的当前版本。执行回滚所需的时间会随着镜像大小的增加而增加。从快照克隆快于将镜像回滚到照要,这是返回到预先存在状态的首选方法。
3.2.4. 删除快照 复制链接链接已复制到粘贴板!
要使用 rbd 删除快照,请指定 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 <pool-name> snap rm --snap <snap-name> <image-name>
[root@rbd-client ~]# rbd snap rm <pool-name-/<image-name>@<snap-name>
例如:
rbd --pool rbd snap rm --snap snapname foo rbd snap rm rbd/foo@snapname
[root@rbd-client ~]# rbd --pool rbd snap rm --snap snapname foo
[root@rbd-client ~]# rbd snap rm rbd/foo@snapname
如果镜像具有任何克隆,克隆的镜像会保留对父镜像快照的引用。要删除父镜像快照,您必须首先扁平化子镜像。详情请参阅 扁平化克隆的镜像。
Ceph OSD 守护进程异步删除数据,因此删除快照不会立即释放磁盘空间。
3.2.5. 清除快照 复制链接链接已复制到粘贴板!
要使用 rbd 删除镜像的所有快照,请指定 snap purge 选项和镜像名称:
rbd --pool {pool-name} snap purge {image-name}
rbd snap purge {pool-name}/{image-name}
[root@rbd-client ~]# rbd --pool {pool-name} snap purge {image-name}
[root@rbd-client ~]# rbd snap purge {pool-name}/{image-name}
例如:
rbd --pool rbd snap purge foo rbd snap purge rbd/foo
[root@rbd-client ~]# rbd --pool rbd snap purge foo
[root@rbd-client ~]# rbd snap purge rbd/foo
3.2.6. 重命名快照 复制链接链接已复制到粘贴板!
重新命名快照:
rbd snap rename <pool-name>/<image-name>@<original-snapshot-name> <pool-name>/<image-name>@<new-snapshot-name>
[root@rbd-client ~]# rbd snap rename <pool-name>/<image-name>@<original-snapshot-name> <pool-name>/<image-name>@<new-snapshot-name>
示例
将 data 池中 dataset 镜像的 snap1 快照重命名为 snap2 :
rbd snap rename data/dataset@snap1 data/dataset@snap2
[root@rbd-client ~]# rbd snap rename data/dataset@snap1 data/dataset@snap2
执行 rbd help snap rename 命令,以显示重命名快照的更多详细信息。
3.3. 分层 复制链接链接已复制到粘贴板!
Ceph 支持创建许多块设备快照的写时复制 (COW) 或读时复制 (COR) 克隆。快照分层使得 Ceph 块设备客户端能够非常快速地创建镜像。例如,您可以使用写入它的 Linux 虚拟机创建块设备镜像;然后,快照,保护快照,并创建尽可能多的克隆。快照是只读的,因此克隆快照可以简化语义-使快速创建克隆成为可能。
术语 parent 和 child 表示 Ceph 块设备快照(父),以及从快照克隆的对应镜像(子级)。这些术语对于以下命令行用法非常重要。
每个克隆的镜像(子级)存储对其父镜像的引用,这使得克隆的镜像能够打开父快照并读取它。当克隆扁平化时,当快照中的信息完全复制到克隆时,会删除此引用。有关 扁平化 的详情,请参考 第 3.3.6 节 “扁平化克隆的镜像”。
快照克隆的行为与任何其他 Ceph 块设备镜像完全相同。您可以读取、写入、克隆和调整克隆的镜像大小。克隆的镜像没有特殊限制。但是,快照的克隆会指向快照,因此在克隆快照前,必须会对其进行保护。
快照的克隆可以是写时复制 (COW) 或读时复制 (COR) 克隆。在必须显式启用读取时复制 (COR) 时,始终为克隆启用写时复制 (COW)。当数据写入到克隆中的未分配对象时,写时复制 (COW) 将数据从父项复制到克隆。当父进程从克隆中未分配的对象读取时,从父进程复制数据到克隆。如果克隆中尚不存在对象,则仅从父项读取数据。RADOS 块设备将大型镜像分成多个对象(默认为 4 MB),所有写时复制(COW)和写时复制(COR)操作发生在完整对象(即向克隆写入 1 字节)操作,如果之前的 COW/COR 操作中不存在目标对象,则会导致从父对象读取 4 MB 对象并写入克隆。
是否启用读取时复制 (COR),任何通过从克隆读取底层对象无法满足的读取都将重新路由到父对象。由于父数量实际上没有限制(这意味着您可以克隆克隆),因此这个重新路由将继续,直到找到对象或您到达基础父镜像。如果启用了读取时复制 (COR),克隆中任何未直接满足的读取会导致从父项读取完整的对象并将该数据写入克隆,以便克隆本身可以满足相同的扩展读取,而无需从父级读取。
这基本上是一个按需、按对象扁平化的操作。当克隆位于来自它的父级(在另一个地理位置的不同池中)的高延迟连接中时,这特别有用。读时复制 (COR) 可降低读分化延迟。前几个读取具有高延迟,因为它将导致从父项读取额外的数据(例如,您从克隆中读取 1 字节,但现在 4 MB 需要从父项读取并写入克隆),但将来的所有读取都将从克隆本身提供。
要从快照创建写时复制(COR)克隆,您必须通过在 ceph.conf 文件的 [global] 或 [client] 部分下添加 rbd_clone_copy_on_read = true 来显式启用此功能。
3.3.1. 分层入门 复制链接链接已复制到粘贴板!
Ceph 块设备分层是一个简单的过程。您必须有一个镜像。您必须创建镜像的快照。您必须保护快照。执行这些步骤后,您可以开始克隆快照。
克隆的镜像具有对父快照的引用,并包含池 ID、镜像 ID 和快照 ID。包含池 ID 意味着您可以将快照从一个池克隆到另一个池中的镜像。
-
镜像模板: 块设备分层的常见用例是创建一个 master 镜像和作为克隆的模板的快照。例如,用户可以为 RHEL7 发行版创建镜像,并为其创建快照。用户可以定期更新镜像并创建新快照(如
yum update、yum upgrade,后跟rbd snap create)。随着镜像竞争,用户可以克隆任何一个快照。 - 扩展模板: 更高级的用例包括扩展模板镜像,其提供比基础镜像更多的信息。例如,用户可以克隆镜像(如虚拟机模板),并安装其他软件(如数据库、内容管理系统、分析系统等),然后对扩展的镜像进行快照,就像基础镜像一样更新。
- 模板池: 一种使用块设备分层的方法是创建一个池,其中包含用作模板的主镜像,以及这些模板的快照。然后,您可以为用户扩展只读权限,以便他们可以克隆快照,而无需在池中写入或执行。
- 镜像迁移/恢复: 一种使用块设备分层的方法是将数据从一个池中迁移或恢复到另一个池中。
3.3.2. 保护快照 复制链接链接已复制到粘贴板!
克隆访问父快照。如果用户意外删除父快照,则所有克隆都会中断。为防止数据丢失,您必须在 克隆快照 前保护快照。要做到这一点,请运行以下命令:
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 {pool-name} snap protect --image {image-name} --snap {snapshot-name}
[root@rbd-client ~]# rbd snap protect {pool-name}/{image-name}@{snapshot-name}
例如:
rbd --pool rbd snap protect --image my-image --snap my-snapshot rbd snap protect rbd/my-image@my-snapshot
[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
您无法删除受保护的快照。
3.3.3. 克隆快照 复制链接链接已复制到粘贴板!
要克隆快照,您需要指定父池、镜像和快照;以及子池和镜像名称。您必须保护快照,然后才能克隆快照。要做到这一点,请运行以下命令:
rbd --pool {pool-name} --image {parent-image} --snap {snap-name} --dest-pool {pool-name} --dest {child-image}
rbd clone {pool-name}/{parent-image}@{snap-name} {pool-name}/{child-image-name}
[root@rbd-client ~]# rbd --pool {pool-name} --image {parent-image} --snap {snap-name} --dest-pool {pool-name} --dest {child-image}
[root@rbd-client ~]# rbd clone {pool-name}/{parent-image}@{snap-name} {pool-name}/{child-image-name}
例如:
rbd clone rbd/my-image@my-snapshot rbd/new-image
[root@rbd-client ~]# rbd clone rbd/my-image@my-snapshot rbd/new-image
您可以将一个池的快照克隆到另一个池中的镜像。例如,您可以将只读镜像和快照维护为一个池中的模板,并在另一个池中维护可写克隆。
3.3.4. 取消保护快照 复制链接链接已复制到粘贴板!
您必须先取消保护快照,然后才能删除快照。此外,您不得删除从克隆引用的快照。您必须扁平化快照的每个克隆,然后才能删除快照。要做到这一点,请运行以下命令:
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 {pool-name} snap unprotect --image {image-name} --snap {snapshot-name}
[root@rbd-client ~]# rbd snap unprotect {pool-name}/{image-name}@{snapshot-name}
例如:
rbd --pool rbd snap unprotect --image my-image --snap my-snapshot rbd snap unprotect rbd/my-image@my-snapshot
[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
3.3.5. 列出快照的 Children 复制链接链接已复制到粘贴板!
要列出快照的子项,请执行以下操作:
rbd --pool {pool-name} children --image {image-name} --snap {snap-name}
rbd children {pool-name}/{image-name}@{snapshot-name}
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
rbd --pool rbd children --image my-image --snap my-snapshot
rbd children rbd/my-image@my-snapshot
3.3.6. 扁平化克隆的镜像 复制链接链接已复制到粘贴板!
克隆的镜像保留对父快照的引用。当您从子克隆中删除引用到父快照时,您有效地通过将信息从快照复制到克隆来"扁平化"镜像。克隆所需的时间随着快照的大小而增加。
要删除与子镜像关联的父镜像快照,您必须首先扁平化子镜像:
rbd --pool <pool-name> flatten --image <image-name> rbd flatten <pool-name>/<image-name>
[root@rbd-client ~]# rbd --pool <pool-name> flatten --image <image-name>
[root@rbd-client ~]# rbd flatten <pool-name>/<image-name>
例如:
rbd --pool rbd flatten --image my-image rbd flatten rbd/my-image
[root@rbd-client ~]# rbd --pool rbd flatten --image my-image
[root@rbd-client ~]# rbd flatten rbd/my-image
由于扁平化的镜像包含快照的所有信息,因此扁平化的镜像将占用比分层克隆更多的存储空间。
如果镜像上启用 深度扁平化(deep flatten)功能,则默认情况下镜像克隆与其父级解除关联。
第 4 章 块设备镜像 复制链接链接已复制到粘贴板!
RADOS 块设备(RBD)镜像是在两个或多个 Ceph 集群间异步复制 Ceph 块设备镜像的过程。镜像可确保镜像的所有更改的时间点一致副本,包括读取和写入、块设备调整大小、快照、克隆和扁平化。
镜像使用强制专用锁定和 RBD 日志功能,按照镜像发生的顺序记录对镜像的所有修改。这样可确保镜像的崩溃一致性镜像可用。在将镜像镜像到对等集群前,您必须启用日志。详情请查看 第 4.1 节 “启用日志”。
由于它是存储在主池和次要池中与获取镜像的块设备关联的镜像,因此 主池和次要池的 CRUSH 层次结构应具有相同的存储容量和性能特征。另外,主站点和次站点之间的网络连接应该有足够的带宽,以确保镜像在没有太多延迟的情况下进行。
支持镜像块设备镜像的主要和次要池的 CRUSH 层次结构必须具有相同的容量和性能特性,并且必须具有足够的带宽才能确保镜像无延迟。例如,如果您对主集群中的镜像有 X MiB/s 平均写入吞吐量,则网络必须支持到二级站点的网络连接中的 N114 X 吞吐量,再加上 Y% 安全因素来镜像 N 镜像。
镜像主要用于从灾难中恢复。根据您使用的镜像类型,请参阅通过 单向镜像从灾难中恢复,或者通过双向镜像从灾难中恢复。https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/3/html-single/block_device_guide/#recovering-from-a-disaster-with-one-way-mirroring-block
rbd-mirror 守护进程
rbd-mirror 守护进程负责将镜像从一个 Ceph 集群同步到另一个集群。
根据复制类型,rbd-mirror 在单个集群或参与镜像的所有集群中运行:
单向复制(One-way Replication)
-
当数据从主集群镜像到充当备份的二级集群时,
rbd-mirror仅在次要集群中运行。RBD 镜像可能有多个次要站点。
-
当数据从主集群镜像到充当备份的二级集群时,
双向复制(Two-way Replication)
-
双向复制在主集群中添加一个
rbd-mirror守护进程,使得镜像可以在集群上降级并提升到次要集群中。然后可以对次要群集上的镜像进行更改,然后按照相反方向(从次要到主要)进行复制。两个集群都必须运行rbd-mirror,才能在任一集群上提升和降级镜像。目前,仅在两个站点间支持双向复制。
-
双向复制在主集群中添加一个
rbd-mirror 软件包提供 rbd-mirror。
在双向复制中,rbd-mirror 的每个实例必须能够同时连接到其他 Ceph 集群。此外,两个数据中心站点之间网络必须具有足够的带宽才能处理镜像。
仅为每个 Ceph 集群运行单个 rbd-mirror 守护进程。
镜像模式
镜像基于对等集群内的每个池配置。Ceph 支持两种模式,具体取决于池中的镜像是什么:
镜像状态
镜像是否可以修改取决于其状态:
- 可以修改处于主要状态的镜像
- 处于非主要状态的镜像无法修改
镜像在镜像上首次启用镜像时自动提升为主版本。升级可能发生:
- 通过在池模式中启用镜像(请参阅 第 4.2 节 “池配置”)隐式
- 通过启用特定镜像的镜像(请参阅 第 4.3 节 “镜像配置”)明确启用
可以降级主镜像并提升非主镜像。详情请查看 第 4.3 节 “镜像配置”。
4.1. 启用日志 复制链接链接已复制到粘贴板!
您可以启用 RBD 日志功能:
- 创建镜像时
- 在已经存在的镜像上动态
日志取决于必须启用的 exclusive-lock 功能。请查看以下步骤。
要在创建镜像时启用日志,请使用 --image-feature 选项:
rbd create <image-name> --size <megabytes> --pool <pool-name> --image-feature <feature>
rbd create <image-name> --size <megabytes> --pool <pool-name> --image-feature <feature>
例如:
rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journaling
# rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journaling
要在之前创建的镜像上启用日志,请使用 rbd feature enable 命令:
rbd feature enable <pool-name>/<image-name> <feature-name>
rbd feature enable <pool-name>/<image-name> <feature-name>
例如:
rbd feature enable data/image1 exclusive-lock rbd feature enable data/image1 journaling
# rbd feature enable data/image1 exclusive-lock
# rbd feature enable data/image1 journaling
要默认在所有新镜像上启用日志,请在 Ceph 配置文件中添加以下设置:
rbd default features = 125
rbd default features = 125
4.2. 池配置 复制链接链接已复制到粘贴板!
本章演示了如何执行以下任务:
在两个对等集群中执行以下命令。
在池中启用镜像
在池上启用镜像:
rbd mirror pool enable <pool-name> <mode>
rbd mirror pool enable <pool-name> <mode>
例子
启用名为 data 的整个池的镜像:
rbd mirror pool enable data pool
# rbd mirror pool enable data pool
在名为 data 的池上启用镜像模式镜像:
rbd mirror pool enable data image
# rbd mirror pool enable data image
禁用池中的镜像
在池上禁用镜像:
rbd mirror pool disable <pool-name>
rbd mirror pool disable <pool-name>
示例
禁用名为 data 的池的镜像:
rbd mirror pool disable data
# rbd mirror pool disable data
在禁用镜像前,删除对等集群。详情请查看 第 4.2 节 “池配置”。
当您禁用对池的镜像时,您还会在池中在镜像模式中单独启用镜像的镜像禁用它。详情请参阅 镜像配置。
添加 Cluster Peer
要让 rbd-mirror 守护进程发现其对等集群,您必须将 peer 注册到池:
rbd --cluster <cluster-name> mirror pool peer add <pool-name> <peer-client-name>@<peer-cluster-name> -n <client-name>
rbd --cluster <cluster-name> mirror pool peer add <pool-name> <peer-client-name>@<peer-cluster-name> -n <client-name>
示例
要将 site-a 集群添加为 site-b 集群的对等点,请从 site-b 集群中的客户端节点运行以下命令:
rbd --cluster site-b mirror pool peer add data client.site-a@site-a -n client.site-b
# rbd --cluster site-b mirror pool peer add data client.site-a@site-a -n client.site-b
查看有关 Peers 的信息
查看对等点的信息:
rbd mirror pool info <pool-name>
rbd mirror pool info <pool-name>
示例
rbd mirror pool info data Mode: pool Peers: UUID NAME CLIENT 7e90b4ce-e36d-4f07-8cbc-42050896825d site-a client.site-a
# rbd mirror pool info data
Mode: pool
Peers:
UUID NAME CLIENT
7e90b4ce-e36d-4f07-8cbc-42050896825d site-a client.site-a
删除 Cluster Peer
删除镜像对等集群:
rbd mirror pool peer remove <pool-name> <peer-uuid>
rbd mirror pool peer remove <pool-name> <peer-uuid>
指定池名称和同级通用唯一标识符 (UUID)。若要查看对等 UUID,可使用 rbd mirror pool info 命令。
示例
rbd mirror pool peer remove data 7e90b4ce-e36d-4f07-8cbc-42050896825d
# rbd mirror pool peer remove data 7e90b4ce-e36d-4f07-8cbc-42050896825d
获取池的镜像状态
获取镜像池概述:
rbd mirror pool status <pool-name>
rbd mirror pool status <pool-name>
示例
获取 数据池 的状态:
rbd mirror pool status data health: OK images: 1 total
# rbd mirror pool status data
health: OK
images: 1 total
要输出池中每个镜像的状态详情,请使用 --verbose 选项。
4.3. 镜像配置 复制链接链接已复制到粘贴板!
本章演示了如何执行以下任务:
仅在单个集群中执行以下命令。
启用镜像镜像
启用特定镜像的镜像:
- 在两个对等集群中以镜像模式启用整个池的镜像。详情请查看 第 4.2 节 “池配置”。
然后,为池中的特定镜像显式启用镜像:
rbd mirror image enable <pool-name>/<image-name>
rbd mirror image enable <pool-name>/<image-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
示例
为 data 池中的 image2 镜像启用镜像功能:
rbd mirror image enable data/image2
# rbd mirror image enable data/image2
禁用镜像镜像
禁用特定镜像的镜像:
rbd mirror image disable <pool-name>/<image-name>
rbd mirror image disable <pool-name>/<image-name>
示例
禁用 data 池中 image2 镜像的镜像:
rbd mirror image disable data/image2
# rbd mirror image disable data/image2
镜像提升和降级
将镜像降级为非主要镜像:
rbd mirror image demote <pool-name>/<image-name>
rbd mirror image demote <pool-name>/<image-name>
示例
降级 data 池中的 image2 镜像:
rbd mirror image demote data/image2
# rbd mirror image demote data/image2
将镜像提升为主要步骤:
rbd mirror image promote <pool-name>/<image-name>
rbd mirror image promote <pool-name>/<image-name>
示例
提升 data 池中的 image2 镜像:
rbd mirror image promote data/image2
# rbd mirror image promote data/image2
根据您使用的镜像类型,请参阅通过 单向镜像从灾难中恢复,或者通过双向镜像从灾难中恢复。https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/3/html-single/block_device_guide/#recovering-from-a-disaster-with-one-way-mirroring-block
使用 --force 选项强制提升非主镜像:
rbd mirror image promote --force data/image2
# rbd mirror image promote --force data/image2
当降级无法传播到对等 Ceph 集群时,请使用强制提升,例如因为集群失败或通信中断。详情请查看 Non-Orderly Shutdown 后故障转移。
不要强制提升仍在同步的非主镜像,因为镜像在提升后无效。
镜像重新同步
请求主镜像重新同步:
rbd mirror image resync <pool-name>/<image-name>
rbd mirror image resync <pool-name>/<image-name>
示例
请求 data 池中 image2 镜像的重新同步:
rbd mirror image resync data/image2
# rbd mirror image resync data/image2
如果两个对等集群之间状态不一致,rbd-mirror 守护进程不会尝试镜像导致不一致的镜像。有关修复此问题的详情,请参考从灾难中恢复的部分。根据您使用的镜像类型,请参阅通过 单向镜像从灾难中恢复,或者通过双向镜像从灾难中恢复。https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/3/html-single/block_device_guide/#recovering-from-a-disaster-with-one-way-mirroring-block
获取单个镜像的镜像状态
获取已镜像镜像的状态:
rbd mirror image status <pool-name>/<image-name>
rbd mirror image status <pool-name>/<image-name>
示例
获取 data 池中 image2 镜像的状态:
4.4. 配置一次性镜像 复制链接链接已复制到粘贴板!
单向镜像意味着一个集群中的主镜像会在次要集群中复制。在辅助集群中,复制的镜像不是主镜像;即块设备客户端无法写入镜像。
单向镜像支持多个次要站点。要在多个次要站点上配置单向镜像,请在每个次要集群中重复以下步骤。
单向镜像适合维护镜像的崩溃一致性副本。单向镜像可能并不适用于所有情况,如使用次要镜像与 OpenStack 自动故障转移和故障恢复,因为在使用单向镜像时集群无法故障恢复。在这些情况下,使用双向镜像。详情请查看 第 4.5 节 “配置两个镜像功能”。
以下流程假设:
-
您有两个集群,您想要将镜像从主集群复制到二级集群。就这个过程而言,我们将把主镜像作为
site-a集群和您要复制镜像的集群作为site-b集群来区分两个集群。有关安装 Ceph 存储集群的详情,请参考 Red Hat Enterprise Linux 安装指南 或 Ubuntu 安装指南。 -
site-b集群附加了一个客户端节点,其中rbd-mirror守护进程将运行。此守护进程将连接到site-a集群,将镜像同步到site-b集群。有关安装 Ceph 客户端的详情,请参考 Red Hat Enterprise Linux 安装指南 或 Ubuntu 安装指南 -
两个集群中都创建具有相同名称的池。在以下示例中,池命名为
data。详情请参阅 存储策略指南中的 池 章节 或 Red Hat Ceph Storage 3。 -
该池包含您要镜像的镜像,并在它们上启用日志。在以下示例中,镜像名为
image1和image2。详情请参阅 启用日志。
配置块设备镜像的方法有两种:
配置池镜像
-
确保
数据池中的所有镜像都启用了专用锁定和日志。详情请查看 第 4.1 节 “启用日志”。 在
site-b集群的客户端节点上,安装rbd-mirror软件包。软件包由 Red Hat Ceph Storage 3 Tools 存储库提供。Red Hat Enterprise Linux
yum install rbd-mirror
# yum install rbd-mirrorCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ubuntu
sudo apt-get install rbd-mirror
$ sudo apt-get install rbd-mirrorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-b集群的客户端节点上,通过在适当的文件中添加CLUSTER选项来指定集群名称。在 Red Hat Enterprise Linux 上,更新/etc/sysconfig/ceph文件,并在 Ubuntu 中相应地更新/etc/default/ceph文件:CLUSTER=site-b
CLUSTER=site-bCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在这两个集群中,创建具有访问
数据池权限的用户,并将其密钥环输出到 <cluster-name>.client.<user-name>.keyring文件。在
site-a集群中的 monitor 主机上,创建client.site-a用户,并将密钥环输出到site-a.client.site-a.keyring文件:ceph auth get-or-create client.site-a mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-a.client.site-a.keyring
# ceph auth get-or-create client.site-a mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-a.client.site-a.keyringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-b集群中的 monitor 主机上,创建client.site-b用户,并将密钥环输出到site-b.client.site-b.keyring文件:ceph auth get-or-create client.site-b mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-b.client.site-b.keyring
# ceph auth get-or-create client.site-b mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-b.client.site-b.keyringCopy to Clipboard Copied! Toggle word wrap Toggle overflow
将 Ceph 配置文件和新创建的 RBD 密钥环文件从
site-a监控节点复制到site-b监控和客户端节点:scp /etc/ceph/ceph.conf <user>@<site-b_mon-host-name>:/etc/ceph/site-a.conf scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-b_mon-host-name>:/etc/ceph/ scp /etc/ceph/ceph.conf <user>@<site-b_client-host-name>:/etc/ceph/site-a.conf scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-b_client-host-name>:/etc/ceph/
# scp /etc/ceph/ceph.conf <user>@<site-b_mon-host-name>:/etc/ceph/site-a.conf # scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-b_mon-host-name>:/etc/ceph/ # scp /etc/ceph/ceph.conf <user>@<site-b_client-host-name>:/etc/ceph/site-a.conf # scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-b_client-host-name>:/etc/ceph/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将 Ceph 配置文件从
site-a监控节点传输到site-b监视器和客户端节点的scp命令,将文件重命名为site-a.conf。密钥环文件名保持不变。在
site-b集群客户端节点上创建一个名为site-b.conf的符号链接,指向ceph.conf:cd /etc/ceph ln -s ceph.conf site-b.conf
# cd /etc/ceph # ln -s ceph.conf site-b.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-b客户端节点上启用并启动rbd-mirror守护进程:systemctl enable ceph-rbd-mirror.target systemctl enable ceph-rbd-mirror@<client-id> systemctl start ceph-rbd-mirror@<client-id>
systemctl enable ceph-rbd-mirror.target systemctl enable ceph-rbd-mirror@<client-id> systemctl start ceph-rbd-mirror@<client-id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<client-id> 更改为rbd-mirror守护进程要使用的 Ceph Storage 集群用户。用户必须具有对集群的适当cephx访问权限。如需更多信息,请参阅 Red Hat Ceph Storage 3 管理指南中的用户管理一 章。根据使用
site-b的前导示例,运行以下命令:systemctl enable ceph-rbd-mirror.target systemctl enable ceph-rbd-mirror@site-b systemctl start ceph-rbd-mirror@site-b
# systemctl enable ceph-rbd-mirror.target # systemctl enable ceph-rbd-mirror@site-b # systemctl start ceph-rbd-mirror@site-bCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-a集群的监控节点上运行以下命令来启用位于site-a集群上的数据池镜像:rbd mirror pool enable data pool
# rbd mirror pool enable data poolCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保成功启用了镜像:
rbd mirror pool info data Mode: pool Peers: none
# rbd mirror pool info data Mode: pool Peers: noneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从
site-b集群中的客户端节点运行以下命令来将site-a集群添加为site-b集群的对等点:rbd --cluster site-b mirror pool peer add data client.site-a@site-a -n client.site-b
# rbd --cluster site-b mirror pool peer add data client.site-a@site-a -n client.site-bCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保已成功添加 peer:
rbd mirror pool info data Mode: pool Peers: UUID NAME CLIENT 7e90b4ce-e36d-4f07-8cbc-42050896825d site-a client.site-a
# rbd mirror pool info data Mode: pool Peers: UUID NAME CLIENT 7e90b4ce-e36d-4f07-8cbc-42050896825d site-a client.site-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 一段时间后,检查
image1和image2镜像的状态。如果它们处于up+replaying状态,则镜像可以正常工作。从site-b集群中的监控节点运行以下命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置镜像镜像
-
确保
数据池中的所选镜像启用了专用锁定和日志。详情请查看 第 4.1 节 “启用日志”。 - 按照 配置池镜像 步骤中的步骤 2 - 7。
在
site-a集群中的监控节点中,启用数据池的镜像镜像:rbd mirror pool enable data image
# rbd mirror pool enable data imageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保成功启用了镜像:
rbd mirror pool info data Mode: image Peers: none
# rbd mirror pool info data Mode: image Peers: noneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-b集群上的客户端节点中,将site-a集群添加为对等集群:rbd --cluster site-b mirror pool peer add data client.site-a@site-a -n client.site-b
# rbd --cluster site-b mirror pool peer add data client.site-a@site-a -n client.site-bCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保已成功添加 peer:
rbd mirror pool info data Mode: image Peers: UUID NAME CLIENT 9c1da891-b9f4-4644-adee-6268fe398bf1 site-a client.site-a
# rbd mirror pool info data Mode: image Peers: UUID NAME CLIENT 9c1da891-b9f4-4644-adee-6268fe398bf1 site-a client.site-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-a集群的监控节点中,明确启用image1和image2镜像的镜像镜像:rbd mirror image enable data/image1 Mirroring enabled rbd mirror image enable data/image2 Mirroring enabled
# rbd mirror image enable data/image1 Mirroring enabled # rbd mirror image enable data/image2 Mirroring enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 一段时间后,检查
image1和image2镜像的状态。如果它们处于up+replaying状态,则镜像可以正常工作。从site-b集群中的监控节点运行以下命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. 配置两个镜像功能 复制链接链接已复制到粘贴板!
双向镜像允许您在两个集群之间以任一方向复制镜像。它不允许您从任一集群中写入同一镜像,并更改传播。镜像从集群提升或降级,以更改从中写入的位置,以及它同步的位置。
以下流程假设:
-
您有两个集群,您想要以任一方向在它们间复制镜像。在以下示例中,集群被称为
site-a和site-b集群。有关安装 Ceph 存储集群的详情,请参考 Red Hat Enterprise Linux 安装指南 或 Ubuntu 安装指南。 -
两个集群都附加了运行
rbd-mirror守护进程的客户端节点。site-b集群上的守护进程将连接到site-a集群,将镜像同步到site-b,而site-a集群上的守护进程将连接到site-b集群,将镜像同步到site-a。有关安装 Ceph 客户端的详情,请参考 Ubuntu 的 Red Hat Enterprise Linux 或安装指南。 -
两个集群中都创建具有相同名称的池。在以下示例中,池命名为
data。详情请参阅 存储策略指南中的 池 章节 或 Red Hat Ceph Storage 3。 -
该池包含您要镜像的镜像,并在它们上启用日志。在以下示例中,镜像名为
image1和image2。详情请参阅 启用日志。
配置块设备镜像的方法有两种:
- 池镜像 :要镜像池中的所有镜像,请遵循下面立即 配置池镜像。
- 镜像镜像 : 要在池中镜像选择镜像,请遵循 配置镜像镜像(mirror )。
配置池镜像
-
确保
数据池中的所有镜像都启用了专用锁定和日志。详情请查看 第 4.1 节 “启用日志”。 - 按照配置单向镜像 中的等同的 配置池部分中的第 2 - 7 步设置镜像 ( mirror)的方法
在
site-a集群的客户端节点上,安装rbd-mirror软件包。软件包由 Red Hat Ceph Storage 3 Tools 存储库提供。Red Hat Enterprise Linux
yum install rbd-mirror
# yum install rbd-mirrorCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ubuntu
sudo apt-get install rbd-mirror
$ sudo apt-get install rbd-mirrorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-a集群的客户端节点上,通过在适当的文件中添加CLUSTER选项来指定集群名称。在 Red Hat Enterprise Linux 上,更新/etc/sysconfig/ceph文件,并在 Ubuntu 中相应地更新/etc/default/ceph文件:CLUSTER=site-a
CLUSTER=site-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
site-bCeph 配置文件和 RBD 密钥环文件从site-b监控器复制到site-a监控和客户端节点:scp /etc/ceph/ceph.conf <user>@<site-a_mon-host-name>:/etc/ceph/site-b.conf scp /etc/ceph/site-b.client.site-b.keyring root@<site-a_mon-host-name>:/etc/ceph/ scp /etc/ceph/ceph.conf user@<site-a_client-host-name>:/etc/ceph/site-b.conf scp /etc/ceph/site-b.client.site-b.keyring user@<site-a_client-host-name>:/etc/ceph/
# scp /etc/ceph/ceph.conf <user>@<site-a_mon-host-name>:/etc/ceph/site-b.conf # scp /etc/ceph/site-b.client.site-b.keyring root@<site-a_mon-host-name>:/etc/ceph/ # scp /etc/ceph/ceph.conf user@<site-a_client-host-name>:/etc/ceph/site-b.conf # scp /etc/ceph/site-b.client.site-b.keyring user@<site-a_client-host-name>:/etc/ceph/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将 Ceph 配置文件从
site-b监控节点传输到site-a监控和客户端节点的scp命令,将文件重命名为site-b.conf。密钥环文件名保持不变。将
site-aRBD 密钥环文件从site-a监控节点复制到site-a客户端节点:scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-a_client-host-name>:/etc/ceph/
# scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-a_client-host-name>:/etc/ceph/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-a集群客户端节点上创建一个名为site-a.conf的符号链接,指向ceph.conf:cd /etc/ceph ln -s ceph.conf site-a.conf
# cd /etc/ceph # ln -s ceph.conf site-a.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-a客户端节点上启用并启动rbd-mirror守护进程:systemctl enable ceph-rbd-mirror.target systemctl enable ceph-rbd-mirror@<client-id> systemctl start ceph-rbd-mirror@<client-id>
systemctl enable ceph-rbd-mirror.target systemctl enable ceph-rbd-mirror@<client-id> systemctl start ceph-rbd-mirror@<client-id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<client-id> 是rbd-mirror守护进程将使用的 Ceph Storage 集群用户。用户必须具有对集群的适当cephx访问权限。如需更多信息,请参阅 Red Hat Ceph Storage 3 管理指南中的用户管理一 章。根据使用
site-a的前导示例,运行以下命令:systemctl enable ceph-rbd-mirror.target systemctl enable ceph-rbd-mirror@site-a systemctl start ceph-rbd-mirror@site-a
# systemctl enable ceph-rbd-mirror.target # systemctl enable ceph-rbd-mirror@site-a # systemctl start ceph-rbd-mirror@site-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-b集群的监控节点上运行以下命令来启用位于site-b集群上的数据池镜像:rbd mirror pool enable data pool
# rbd mirror pool enable data poolCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保成功启用了镜像:
rbd mirror pool info data Mode: pool Peers: none
# rbd mirror pool info data Mode: pool Peers: noneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从
site-a集群中的客户端节点运行以下命令来将site-b集群添加为site-a集群的对等点:rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-a
# rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保已成功添加 peer:
rbd mirror pool info data Mode: pool Peers: UUID NAME CLIENT dc97bd3f-869f-48a5-9f21-ff31aafba733 site-b client.site-b
# rbd mirror pool info data Mode: pool Peers: UUID NAME CLIENT dc97bd3f-869f-48a5-9f21-ff31aafba733 site-b client.site-bCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从
site-a集群上的客户端节点检查镜像状态。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 镜像应处于
up+stopped状态。在这里,up表示rbd-mirror守护进程正在运行,stopped意味着镜像不是从另一集群复制的目标。这是因为镜像是这个集群上的主要镜像。注意在以前的版本中,当设置单向镜像时,将镜像配置为复制到
site-b。这可以通过在site-b客户端节点上安装rbd-mirror来实现,以便它可以从site-a升级到site-b。此时,site-a集群已准备好镜像到,但镜像不处于需要它的状态。如果site-a上的镜像被降级且site-b上的镜像被提升,则以其他方向进行镜像。有关如何提升和降级镜像的详情,请参考 镜像配置。
配置镜像镜像
如果尚未设置镜像,则设置一个镜像。
- 按照配置 一次性镜像 中的 配置池镜像 一节中的第 2 -7 步
- 按照配置 单向镜像指南中的 配置镜像镜像一节中的 第 3 -5 步
- 按照配置两个镜像 中的 配置池镜像一节中的 第 3 - 7 步操作。本节位于上面。
从
site-a集群中的客户端节点运行以下命令来将site-b集群添加为site-a集群的对等点:rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-a
# rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保已成功添加 peer:
rbd mirror pool info data Mode: pool Peers: UUID NAME CLIENT dc97bd3f-869f-48a5-9f21-ff31aafba733 site-b client.site-b
# rbd mirror pool info data Mode: pool Peers: UUID NAME CLIENT dc97bd3f-869f-48a5-9f21-ff31aafba733 site-b client.site-bCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从
site-a集群上的客户端节点检查镜像状态。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 镜像应处于
up+stopped状态。在这里,up表示rbd-mirror守护进程正在运行,stopped意味着镜像不是从另一集群复制的目标。这是因为镜像是这个集群上的主要镜像。注意在以前的版本中,当设置单向镜像时,将镜像配置为复制到
site-b。这可以通过在site-b客户端节点上安装rbd-mirror来实现,以便它可以从site-a升级到site-b。此时,site-a集群已准备好镜像到,但镜像不处于需要它的状态。如果site-a上的镜像被降级且site-b上的镜像被提升,则以其他方向进行镜像。有关如何提升和降级镜像的详情,请参考 镜像配置。
4.6. 延迟复制 复制链接链接已复制到粘贴板!
无论您使用的是单向复制还是双向复制,您都可以延迟 RADOS 块设备 (RBD) 镜像镜像之间的复制。如果您要在复制到次要镜像之前恢复对主镜像的更改,您可能需要实施延迟复制。
要实现延迟复制,目标集群中的 rbd-mirror 守护进程应该设置 rbd mirror replay delay = <minimum delay in seconds> 配置设置。此设置可以在 rbd-mirror 守护进程使用的 ceph.conf 文件中全局应用,也可以在单个镜像基础上应用。
要使用特定镜像的延迟复制,在主镜像上运行以下 rbd CLI 命令:
rbd image-meta set <image-spec> conf_rbd_mirroring_replay_delay <minimum delay in seconds>
rbd image-meta set <image-spec> conf_rbd_mirroring_replay_delay <minimum delay in seconds>
例如,要在池 vms 中的镜像 vm-1 上设置 10 分钟最小复制延迟:
rbd image-meta set vms/vm-1 conf_rbd_mirroring_replay_delay 600
rbd image-meta set vms/vm-1 conf_rbd_mirroring_replay_delay 600
4.7. 使用单向镜像从灾难中恢复 复制链接链接已复制到粘贴板!
要使用单向镜像功能,可以从灾难中恢复,请使用以下步骤:它们演示了如何在主集群终止后切换到次要集群,以及如何故障恢复。关闭可以按照一定顺序进行,也可以不按照一定顺序进行。
在以下示例中,主集群称为 site-a 集群,辅助集群称为 site-b 集群。此外,集群同时有一个含有两个镜像、image1 和 image2 的数据池。
单向镜像支持多个次要站点。如果使用额外的次集群,请选择一个二级集群来切换到它。在故障恢复期间从同一集群同步。
先决条件
- 至少两个正在运行的集群。
- 使用镜像镜像配置的池 镜像或镜像镜像。
顺序关闭后故障转移
- 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。请参阅 Red Hat OpenStack Platform 13 存储指南中的 块存储和 卷 章节。
在
site-a集群中的监控节点中运行以下命令来降级位于site-a集群中的主镜像:rbd mirror image demote data/image1 rbd mirror image demote data/image2
# rbd mirror image demote data/image1 # rbd mirror image demote data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-b集群中的监控节点中运行以下命令来提升位于site-b集群中的非主镜像:rbd mirror image promote data/image1 rbd mirror image promote data/image2
# rbd mirror image promote data/image1 # rbd mirror image promote data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 经过一段时间后,检查
site-b集群中监控节点中的镜像状态。它们应当显示up+stopped状态,描述应该显示主状态:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Non-Orderly Shutdown 后故障转移
- 验证主集群是否已停机。
- 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。请参阅 Red Hat OpenStack Platform 10 存储指南中的 块存储和卷 章节。
从
site-b集群中的监控节点提升非主镜像。使用--force选项,因为降级无法传播到site-a集群:rbd mirror image promote --force data/image1 rbd mirror image promote --force data/image2
# rbd mirror image promote --force data/image1 # rbd mirror image promote --force data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
site-b集群中监控节点的镜像状态。它们应当显示up+stopping_replay状态,描述应显示force promoted:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
准备故障恢复
当以前的主集群恢复时,无法将其恢复。
如果两个集群最初只配置为单向镜像,则必须配置主集群以进行镜像,以便按照相反方向复制镜像。
在
site-a集群的客户端节点上,安装rbd-mirror软件包。软件包由 Red Hat Ceph Storage 3 Tools 存储库提供。Red Hat Enterprise Linux
yum install rbd-mirror
# yum install rbd-mirrorCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ubuntu
sudo apt-get install rbd-mirror
$ sudo apt-get install rbd-mirrorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-a集群的客户端节点上,通过在适当的文件中添加CLUSTER选项来指定集群名称。在 Red Hat Enterprise Linux 上,更新/etc/sysconfig/ceph文件,并在 Ubuntu 中相应地更新/etc/default/ceph文件:CLUSTER=site-b
CLUSTER=site-bCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
site-bCeph 配置文件和 RBD 密钥环文件从site-b监控器复制到site-a监控和客户端节点:scp /etc/ceph/ceph.conf <user>@<site-a_mon-host-name>:/etc/ceph/site-b.conf scp /etc/ceph/site-b.client.site-b.keyring root@<site-a_mon-host-name>:/etc/ceph/ scp /etc/ceph/ceph.conf user@<site-a_client-host-name>:/etc/ceph/site-b.conf scp /etc/ceph/site-b.client.site-b.keyring user@<site-a_client-host-name>:/etc/ceph/
# scp /etc/ceph/ceph.conf <user>@<site-a_mon-host-name>:/etc/ceph/site-b.conf # scp /etc/ceph/site-b.client.site-b.keyring root@<site-a_mon-host-name>:/etc/ceph/ # scp /etc/ceph/ceph.conf user@<site-a_client-host-name>:/etc/ceph/site-b.conf # scp /etc/ceph/site-b.client.site-b.keyring user@<site-a_client-host-name>:/etc/ceph/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将 Ceph 配置文件从
site-b监控节点传输到site-a监控和客户端节点的scp命令,将文件重命名为site-a.conf。密钥环文件名保持不变。将
site-aRBD 密钥环文件从site-a监控节点复制到site-a客户端节点:scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-a_client-host-name>:/etc/ceph/
# scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-a_client-host-name>:/etc/ceph/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-a客户端节点上启用并启动rbd-mirror守护进程:systemctl enable ceph-rbd-mirror.target systemctl enable ceph-rbd-mirror@<client-id> systemctl start ceph-rbd-mirror@<client-id>
systemctl enable ceph-rbd-mirror.target systemctl enable ceph-rbd-mirror@<client-id> systemctl start ceph-rbd-mirror@<client-id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<client-id> 更改为rbd-mirror守护进程要使用的 Ceph Storage 集群用户。用户必须具有对集群的适当cephx访问权限。如需更多信息,请参阅 Red Hat Ceph Storage 3 管理指南中的用户管理一 章。根据使用
site-a的前导示例,命令将是:systemctl enable ceph-rbd-mirror.target systemctl enable ceph-rbd-mirror@site-a systemctl start ceph-rbd-mirror@site-a
# systemctl enable ceph-rbd-mirror.target # systemctl enable ceph-rbd-mirror@site-a # systemctl start ceph-rbd-mirror@site-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-a集群的客户端节点中,将site-b集群添加为对等集群:rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-a
# rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用多个次要集群,则必须添加选择故障转移到的二级集群,并从中恢复。
在
site-a集群中的一个监控节点中,验证site-b集群是否已成功添加为对等集群:rbd mirror pool info -p data Mode: image Peers: UUID NAME CLIENT d2ae0594-a43b-4c67-a167-a36c646e8643 site-b client.site-b
# rbd mirror pool info -p data Mode: image Peers: UUID NAME CLIENT d2ae0594-a43b-4c67-a167-a36c646e8643 site-b client.site-bCopy to Clipboard Copied! Toggle word wrap Toggle overflow
failback
当以前的主集群恢复时,无法将其恢复。
在
site-a集群中的监控节点中确定镜像是否仍然是主镜像:rbd info data/image1 rbd info data/image2
# rbd info data/image1 # rbd info data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在命令的输出中,查找
mirroring primary: true或mirroring primary: false以确定状态。从
site-a集群中的监控节点运行以下命令来降级列为主镜像:rbd mirror image demote data/image1
# rbd mirror image demote data/image1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果未按顺序关闭,则仅重新同步镜像。在
site-a集群的监控节点上运行以下命令,以重新同步从site-b到site-a的镜像:rbd mirror image resync data/image1 Flagged image for resync from primary rbd mirror image resync data/image2 Flagged image for resync from primary
# rbd mirror image resync data/image1 Flagged image for resync from primary # rbd mirror image resync data/image2 Flagged image for resync from primaryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 一段时间后,通过验证镜像是否处于
up+replaying状态确保完成镜像重新同步。通过在site-a集群中的监控节点上运行以下命令来检查其状态:rbd mirror image status data/image1 rbd mirror image status data/image2
# rbd mirror image status data/image1 # rbd mirror image status data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在
site-b集群的监控节点中运行以下命令来降级site-b集群中的镜像:rbd mirror image demote data/image1 rbd mirror image demote data/image2
# rbd mirror image demote data/image1 # rbd mirror image demote data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果有多个次要集群,则只需要从提升它的二级集群完成。
在
site-a集群的监控节点上运行以下命令来提升位于site-a集群上的以前主镜像:rbd mirror image promote data/image1 rbd mirror image promote data/image2
# rbd mirror image promote data/image1 # rbd mirror image promote data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
site-a集群中监控节点的镜像状态。它们应当显示up+stopped状态,描述应该为local image is primary:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除双向镜像
在上面的 准备故障恢复 部分中,将双向镜像功能配置为启用从 site-b 集群到 site-a 集群的同步。在故障恢复完成后,可以禁用这些功能。
从
site-a集群中删除site-b集群作为对等集群:rbd mirror pool peer remove data client.remote@remote --cluster local rbd --cluster site-a mirror pool peer remove data client.site-b@site-b -n client.site-a
$ rbd mirror pool peer remove data client.remote@remote --cluster local # rbd --cluster site-a mirror pool peer remove data client.site-b@site-b -n client.site-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-a客户端中停止并禁用rbd-mirror守护进程:systemctl stop ceph-rbd-mirror@<client-id> systemctl disable ceph-rbd-mirror@<client-id> systemctl disable ceph-rbd-mirror.target
systemctl stop ceph-rbd-mirror@<client-id> systemctl disable ceph-rbd-mirror@<client-id> systemctl disable ceph-rbd-mirror.targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
systemctl stop ceph-rbd-mirror@site-a systemctl disable ceph-rbd-mirror@site-a systemctl disable ceph-rbd-mirror.target
# systemctl stop ceph-rbd-mirror@site-a # systemctl disable ceph-rbd-mirror@site-a # systemctl disable ceph-rbd-mirror.targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.8. 使用双向镜像从灾难中恢复 复制链接链接已复制到粘贴板!
要使用双向镜像功能,可以从灾难中恢复,请使用以下步骤:它们演示了如何在主集群终止后切换到次要集群中的镜像数据,以及如何故障恢复。关闭可以按照一定顺序进行,也可以不按照一定顺序进行。
在以下示例中,主集群称为 site-a 集群,辅助集群称为 site-b 集群。此外,集群同时有一个含有两个镜像、image1 和 image2 的数据池。
先决条件
- 至少两个正在运行的集群。
- 使用镜像镜像配置的池 镜像或镜像镜像。
顺序关闭后故障转移
- 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。请参阅 Red Hat OpenStack Platform 10 存储指南中的 块存储和卷 章节。
在
site-a集群中的监控节点中运行以下命令来降级位于site-a集群中的主镜像:rbd mirror image demote data/image1 rbd mirror image demote data/image2
# rbd mirror image demote data/image1 # rbd mirror image demote data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-b集群中的监控节点中运行以下命令来提升位于site-b集群中的非主镜像:rbd mirror image promote data/image1 rbd mirror image promote data/image2
# rbd mirror image promote data/image1 # rbd mirror image promote data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 经过一段时间后,检查
site-b集群中监控节点中的镜像状态。它们应当显示up+stopped状态,并列为主要状态:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 恢复对镜像的访问。此步骤取决于哪些客户端使用该镜像。
Non-Orderly Shutdown 后故障转移
- 验证主集群是否已停机。
- 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。请参阅 Red Hat OpenStack Platform 10 存储指南中的 块存储和卷 章节。
从
site-b集群中的监控节点提升非主镜像。使用--force选项,因为降级无法传播到site-a集群:rbd mirror image promote --force data/image1 rbd mirror image promote --force data/image2
# rbd mirror image promote --force data/image1 # rbd mirror image promote --force data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
site-b集群中监控节点的镜像状态。它们应当显示up+stopping_replay状态,描述应显示force promoted:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
failback
当以前的主集群恢复时,无法将其恢复。
再次检查
site-b集群中监控节点的镜像状态。它们应该显示up-stopped状态,描述应该会指出local image is primary:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-a集群中的监控节点中确定镜像是否仍然是主镜像:rbd info data/image1 rbd info data/image2
# rbd info data/image1 # rbd info data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在命令的输出中,查找
mirroring primary: true或mirroring primary: false以确定状态。从
site-a集群中的监控节点运行以下命令来降级列为主镜像:rbd mirror image demote data/image1
# rbd mirror image demote data/image1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果未按顺序关闭,则仅重新同步镜像。在
site-a集群的监控节点上运行以下命令,以重新同步从site-b到site-a的镜像:rbd mirror image resync data/image1 Flagged image for resync from primary rbd mirror image resync data/image2 Flagged image for resync from primary
# rbd mirror image resync data/image1 Flagged image for resync from primary # rbd mirror image resync data/image2 Flagged image for resync from primaryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 一段时间后,通过验证镜像是否处于
up+replaying状态确保完成镜像重新同步。通过在site-a集群中的监控节点上运行以下命令来检查其状态:rbd mirror image status data/image1 rbd mirror image status data/image2
# rbd mirror image status data/image1 # rbd mirror image status data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
site-b集群的监控节点中运行以下命令来降级site-b集群中的镜像:rbd mirror image demote data/image1 rbd mirror image demote data/image2
# rbd mirror image demote data/image1 # rbd mirror image demote data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果有多个次要集群,则只需要从提升它的二级集群完成。
在
site-a集群的监控节点上运行以下命令来提升位于site-a集群上的以前主镜像:rbd mirror image promote data/image1 rbd mirror image promote data/image2
# rbd mirror image promote data/image1 # rbd mirror image promote data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
site-a集群中监控节点的镜像状态。它们应当显示up+stopped状态,描述应该为local image is primary:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.9. 使用镜像更新实例 复制链接链接已复制到粘贴板!
当使用带有异步更新的 Ceph 块设备镜像更新集群时,请按照更新的安装说明操作。然后,重新启动 Ceph 块设备实例。
在重启实例时不需要按照一定顺序进行。红帽建议重启实例,使其指向主镜像池,然后实例指向镜像池。
第 5 章 Librbd (Python) 复制链接链接已复制到粘贴板!
rbd python 模块提供对 RBD 镜像的类文件访问。要使用此内置工具,必须导入 rbd 和 rados 模块。
创建并写入镜像
连接到 RADOS 并打开 IO 上下文:
cluster = rados.Rados(conffile='my_ceph.conf') cluster.connect() ioctx = cluster.open_ioctx('mypool')cluster = rados.Rados(conffile='my_ceph.conf') cluster.connect() ioctx = cluster.open_ioctx('mypool')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 实例化一个
:class:rbd.RBD对象,用于创建镜像:rbd_inst = rbd.RBD() size = 4 * 1024**3 # 4 GiB rbd_inst.create(ioctx, 'myimage', size)
rbd_inst = rbd.RBD() size = 4 * 1024**3 # 4 GiB rbd_inst.create(ioctx, 'myimage', size)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在镜像上执行 I/O,请实例化一个
:class:rbd.Image对象:image = rbd.Image(ioctx, 'myimage') data = 'foo' * 200 image.write(data, 0)
image = rbd.Image(ioctx, 'myimage') data = 'foo' * 200 image.write(data, 0)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会将"foo"写入镜像的前 600 字节。请注意,数据不能是
:type:unicode-librbd不知道如何处理比:c:type:char更宽的字符。关闭镜像、IO 上下文和与 RADOS 的连接:
image.close() ioctx.close() cluster.shutdown()
image.close() ioctx.close() cluster.shutdown()Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为了安全起见,每个调用都必须位于单独的
:finally中 :Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这可能会有问题,Rados、Ioctx 和 Image 类可以用作自动关闭或关闭的上下文管理器。使用它们作为上下文管理器时,上述示例如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 6 章 内核模块操作 复制链接链接已复制到粘贴板!
要使用内核模块操作,您必须有一个正在运行的 Ceph 集群。
Linux 发行版上的客户端从 Red Hat Enterprise Linux (RHEL)以外被允许,但不受支持。如果使用这些客户端时,集群中发现的问题(例如 MDS),红帽会解决这些问题,但如果发现原因位于客户端端,则该问题必须由内核供应商解决。
6.1. 获取镜像列表 复制链接链接已复制到粘贴板!
要挂载块设备镜像,首先返回镜像列表。
要做到这一点,请执行以下操作:
rbd list
[root@rbd-client ~]# rbd list
6.2. 映射块设备 复制链接链接已复制到粘贴板!
使用 rbd 将镜像名称映射到内核模块。您必须指定镜像名称、池名称和用户名。RBD 将加载 RBD 内核模块(如果尚未加载)。
要做到这一点,请执行以下操作:
rbd map {image-name} --pool {pool-name} --id {user-name}
[root@rbd-client ~]# rbd map {image-name} --pool {pool-name} --id {user-name}
例如:
rbd map --pool rbd myimage --id admin
[root@rbd-client ~]# rbd map --pool rbd myimage --id admin
如果使用 cephx 身份验证,还必须指定一个 secret。它可以来自密钥环或包含机密的文件。
要做到这一点,请执行以下操作:
rbd map --pool rbd myimage --id admin --keyring /path/to/keyring rbd map --pool rbd myimage --id admin --keyfile /path/to/file
[root@rbd-client ~]# rbd map --pool rbd myimage --id admin --keyring /path/to/keyring
[root@rbd-client ~]# rbd map --pool rbd myimage --id admin --keyfile /path/to/file
6.3. 显示映射的块设备 复制链接链接已复制到粘贴板!
要使用 rbd 命令显示映射到内核模块的块设备镜像,请指定 showmapped 选项。
要做到这一点,请执行以下操作:
rbd showmapped
[root@rbd-client ~]# rbd showmapped
6.4. 取消映射块设备 复制链接链接已复制到粘贴板!
要使用 rbd 命令取消映射块设备镜像,请指定 unmap 选项和设备名称(与块设备镜像名称相同)。
要做到这一点,请执行以下操作:
rbd unmap /dev/rbd/{poolname}/{imagename}
[root@rbd-client ~]# rbd unmap /dev/rbd/{poolname}/{imagename}
例如:
rbd unmap /dev/rbd/rbd/foo
[root@rbd-client ~]# rbd unmap /dev/rbd/rbd/foo
第 7 章 块设备配置参考 复制链接链接已复制到粘贴板!
7.1. 常规设置 复制链接链接已复制到粘贴板!
- rbd_op_threads
- 描述
- 块设备操作线程数量。
- 类型
- 整数
- 默认
-
1
不要更改 rbd_op_threads 的默认值,因为将其设置为大于 1 的数字可能会导致数据损坏。
- rbd_op_thread_timeout
- 描述
- 块设备操作线程的超时时间(以秒为单位)。
- 类型
- 整数
- 默认
-
60
- rbd_non_blocking_aio
- 描述
-
如果为
true,Ceph 将处理来自 worker 线程的块设备异步 I/O 操作,以防止阻止。 - 类型
- 布尔值
- 默认
-
true
- rbd_concurrent_management_ops
- 描述
- 处理中并发管理操作的最大数量(例如,删除或调整镜像大小)。
- 类型
- 整数
- 默认
-
10
- rbd_request_timed_out_seconds
- 描述
- 维护请求超时前的秒数。
- 类型
- 整数
- 默认
-
30
- rbd_clone_copy_on_read
- 描述
-
当设置为
true时,会启用读时复制克隆。 - 类型
- 布尔值
- 默认
-
false
- rbd_enable_alloc_hint
- 描述
-
如果为
true,则启用分配提示,块设备将向 OSD 后端发出提示,以指示预期的大小对象。 - 类型
- 布尔值
- 默认
-
true
- rbd_skip_partial_discard
- 描述
-
如果为
true,则块设备在尝试丢弃对象内的范围时将跳过零范围。 - 类型
- 布尔值
- 默认
-
false
- rbd_tracing
- 描述
-
将这个选项设置为
true以启用 Linux Trace Toolkit Next Generation User Space Tracer (LTTng-UST) 追踪点。详情请参阅 使用 RBD Replay 功能跟踪 RADOS 块设备(RBD) 工作负载。 - 类型
- 布尔值
- 默认
-
false
- rbd_validate_pool
- 描述
-
将此选项设置为
true,以验证空池以实现 RBD 兼容性。 - 类型
- 布尔值
- 默认
-
true
- rbd_validate_names
- 描述
-
将此选项设置为
true以验证镜像规格。 - 类型
- 布尔值
- 默认
-
true
7.2. 默认设置 复制链接链接已复制到粘贴板!
可以通过创建镜像来覆盖默认设置。Ceph 将创建格式为 2 的镜像,没有条带化。
- rbd_default_format
- 描述
-
如果没有指定其他格式,则使用默认格式 (
2)格式1是新镜像的原始格式,兼容所有版本的librbd和内核模块,但不支持克隆等较新的功能。从版本 3.11 开始,rbd和内核模块支持格式2(条带除外)。格式2添加了对克隆的支持,且更易于扩展,以在未来允许更多功能。 - 类型
- 整数
- 默认
-
2
- rbd_default_order
- 描述
- 如果没有指定其他顺序,默认的顺序。
- 类型
- 整数
- 默认
-
22
- rbd_default_stripe_count
- 描述
- 如果未指定任何其他条带数,默认的条带数。更改默认值需要条带 v2 功能。
- 类型
- 64-bit Unsigned 整数
- 默认
-
0
- rbd_default_stripe_unit
- 描述
-
如果未指定其他条带单元,默认条带单元。将单元从
0(即对象大小)改为其他值需要条带 v2 功能。 - 类型
- 64-bit Unsigned 整数
- 默认
-
0
- rbd_default_features
- 描述
创建块设备镜像时启用的默认功能。此设置仅适用于格式 2 镜像。设置为:
1: Layering support.分层允许您使用克隆。
2: Striping v2 support.条带化可在多个对象之间分散数据。条带有助于并行处理连续读/写工作负载。
4: Exclusive locking support.启用后,它要求客户端在进行写入前获得对象锁定。
8: Object map support.块设备是精简配置的 - 这代表仅存储实际存在的数据。对象映射支持有助于跟踪实际存在的对象(将数据存储在驱动器上)。启用对象映射支持可加快克隆或导入和导出稀疏填充镜像的 I/O 操作。
16: Fast-diff support.Fast-diff 支持取决于对象映射支持和专用锁定支持。它向对象映射中添加了另一个属性,这可以更快地生成镜像快照和快照的实际数据使用量之间的差别。
32: Deep-flatten support.深度扁平使
rbd flatten除了镜像本身外还作用于镜像的所有快照。如果没有它,镜像的快照仍会依赖于父级,因此在快照被删除之前,父级将无法删除。深度扁平化使得父级独立于克隆,即使它们有快照。64: Journaling support.日志记录会按照镜像发生的顺序记录对镜像的所有修改。这样可确保远程镜像的 crash-consistent 镜像在本地可用
启用的功能是数字设置的总和。
- 类型
- 整数
- 默认
61- 启用了分层、专用锁定、对象映射、fast-diff 和 deep-flatten重要当前的默认设置不兼容 RBD 内核驱动程序或较旧的 RBD 客户端。
- rbd_default_map_options
- 描述
-
大多数选项主要用于调试和基准测试。详情请参阅
map Options下的man rbd。 - 类型
- 字符串
- 默认
-
""
7.3. 缓存设置 复制链接链接已复制到粘贴板!
Ceph 块设备的用户空间实施(即 librbd)无法利用 Linux 页面缓存,因此它包含自己的内存缓存,称为 RBD 缓存。RBD 缓存的行为与行为良好的硬盘缓存一样。当操作系统发送障碍或清空请求时,所有脏数据都会写入 OSD。这意味着,使用回写缓存的安全性与使用带有正确发送清除的虚拟机(即 Linux 内核 >= 2.6.32)的良好物理硬盘一样安全。缓存使用最早使用 (LRU) 算法,在回写模式中,它可以联合相邻的请求来获得更好的吞吐量。
Ceph 支持 RBD 的回写缓存。若要启用它,请将 rbd cache = true 添加到 ceph.conf 文件的 [client] 部分。默认情况下,librbd 不执行任何缓存。写入和读取直接进入存储集群,只有数据处于所有副本的磁盘中时写入才会返回。启用缓存后,写入会立即返回,除非存在超过 rbd cache max dirty unflushed 字节。在这种情况下,写入会触发回写和块,直到清空了足够字节。
Ceph 支持 RBD 的直写缓存。您可以设置缓存的大小,您可以设置从回写缓存切换到通过缓存进行写入的目标和限制。要启用直写模式,请将 rbd cache max dirty 设置为 0。这意味着,只有在数据处于所有副本的磁盘上时写入才会返回,但读取可能来自缓存。缓存位于客户端上的内存中,每个 RBD 镜像都有自己的内存中。由于缓存对客户端而言是本地的,如果其他人访问该镜像,则没有一致性。在 RBD 上运行 GFS 或 OCFS 不适用于启用缓存。
RBD 的 ceph.conf 文件设置应在配置文件的 [client] 部分中设置。设置包括:
- RBD 缓存
- 描述
- 为 RADOS 块设备 (RBD) 启用缓存。
- 类型
- 布尔值
- 必需
- 否
- 默认
-
true
- RBD 缓存大小
- 描述
- 以字节为单位的 RBD 缓存大小。
- 类型
- 64 位整数
- 必填
- 否
- 默认
-
32 MiB
- RBD 缓存最大脏
- 描述
-
以字节为单位的
脏限制,达到时缓存将触发回写。如果为0,则使用直写缓存。 - 类型
- 64 位整数
- 必填
- 否
- 约束
-
必须小于
rbd 缓存大小。 - 默认
-
24 MiB
- RBD 缓存目标脏
- 描述
-
缓存开始将数据写入数据存储前的
脏目标。不要阻止写入到缓存。 - 类型
- 64 位整数
- 必填
- 否
- 约束
-
必须小于
rbd cache max dirty。 - 默认
-
16 MiB
- RBD 缓存最大脏年龄
- 描述
- 在开始回写前,脏数据在缓存中的秒数。
- 类型
- 浮点值
- 必填
- 否
- 默认
-
1.0
- rbd_cache_max_dirty_object
- 描述
-
对象的脏限制 - 设为
0,用于从rbd_cache_size自动计算。 - 类型
- 整数
- 默认
-
0
- rbd_cache_block_writes_upfront
- 描述
-
如果为
true,它将在aio_write调用完成前阻止写入缓存。如果为false,它将在调用aio_completion之前阻止。 - 类型
- 布尔值
- 默认
-
false
- RBD 缓存写入,直到清除
- 描述
- 以直写模式开始,并在收到第一个 flush 请求后切换到回写模式。如果 rbd 上运行的虚拟机太旧而无法发送清空,如 Linux 中的 virtio 驱动程序 2.6.32 之前,启用此设置比较保守,但安全设置。
- 类型
- 布尔值
- 必需
- 否
- 默认
-
true
7.4. 父/Child Reads 设置 复制链接链接已复制到粘贴板!
- rbd_balance_snap_reads
- 描述
- Ceph 通常从Primary OSD 读取对象。由于读取不可变,您可以启用此功能来平衡 Primary OSD 和副本之间的 snap 读取。
- 类型
- 布尔值
- 默认
-
false
- rbd_localize_snap_reads
- 描述
-
虽然
rbd_balance_snap_reads将随机化副本以读取快照,如果启用了rbd_localize_snap_reads,则块设备将查找 CRUSH map 来查找最接近(本地)OSD 以读取快照。 - 类型
- 布尔值
- 默认
-
false
- rbd_balance_parent_reads
- 描述
- Ceph 通常从Primary OSD 读取对象。由于读取不可变,您可以启用此功能来平衡 Primary OSD 和副本之间的父读取。
- 类型
- 布尔值
- 默认
-
false
- rbd_localize_parent_reads
- 描述
-
虽然
rbd_balance_parent_reads将随机化副本以读取父项,如果您启用了rbd_localize_parent_reads,块设备将查找 CRUSH map 来查找最接近(本地)OSD 以读取父项。 - 类型
- 布尔值
- 默认
-
true
7.5. read-ahead 设置 复制链接链接已复制到粘贴板!
RBD 支持 read-ahead/prefetching 来优化小顺序读取。在虚拟机的情况下,这通常由客户机操作系统处理,但启动加载器可能不会产生高效的读取问题。如果禁用缓存,则会自动禁用 read-ahead。
- RBD readahead 触发器请求
- 描述
- 触发 read-ahead 所需的连续读取请求数。
- 类型
- 整数
- 必需
- 否
- 默认
-
10
- RBD readahead max bytes
- 描述
- read-ahead 请求的最大大小.如果为零,则禁用 read-ahead。
- 类型
- 64 位整数
- 必填
- 否
- 默认
-
512 KiB
- RBD readahead 在字节后禁用
- 描述
- 从 RBD 镜像读取了这一字节后,对该镜像禁用 read-ahead,直到关闭为止。这允许客户机操作系统在启动后接管读头。如果为零,则启用 read-ahead。
- 类型
- 64 位整数
- 必填
- 否
- 默认
-
50 MiB
7.6. 将设置列入黑名单 复制链接链接已复制到粘贴板!
- rbd_blacklist_on_break_lock
- 描述
- 是否将锁定中断的客户端列入黑名单.
- 类型
- 布尔值
- 默认
-
true
- rbd_blacklist_expire_seconds
- 描述
- OSD 默认列入黑名单的秒数 - 设置为 0。
- 类型
- 整数
- 默认
-
0
7.7. 日志设置 复制链接链接已复制到粘贴板!
- rbd_journal_order
- 描述
-
转换到计算日志对象最大大小的位数。该值介于
12到64之间。 - 类型
- 32-bit Unsigned 整数
- 默认
-
24
- rbd_journal_splay_width
- 描述
- 活动日志对象的数量。
- 类型
- 32-bit Unsigned 整数
- 默认
-
4
- rbd_journal_commit_age
- 描述
- 提交时间间隔(以秒为单位)。
- 类型
- 双精确浮动点数
- 默认
-
5
- rbd_journal_object_flush_interval
- 描述
- 每个日志对象每个待处理提交的最大数量。
- 类型
- 整数
- 默认
-
0
- rbd_journal_object_flush_bytes
- 描述
- 每个日志对象最多待处理字节数。
- 类型
- 整数
- 默认
-
0
- rbd_journal_object_flush_age
- 描述
- 等待提交的最大时间间隔(以秒为单位)。
- 类型
- 双精确浮动点数
- 默认
-
0
- rbd_journal_pool
- 描述
- 为日志对象指定池。
- 类型
- 字符串
- 默认
-
""
第 8 章 使用 iSCSI 网关 复制链接链接已复制到粘贴板!
iSCSI 网关将 Red Hat Ceph Storage 与 iSCSI 标准集成,以提供高可用性(HA) iSCSI 目标,将 RADOS 块设备(RBD)镜像导出为 SCSI 磁盘。iSCSI 协议允许客户端(启动器)通过 TCP/IP 网络向 SCSI 存储设备(目标)发送 SCSI 命令。这允许异构客户端(如 Microsoft Windows)访问 Red Hat Ceph Storage 集群。
每个 iSCSI 网关运行 Linux IO 目标内核子系统(LIO)来提供 iSCSI 协议支持。LIO 利用用户空间透传(TCMU)与 Ceph 的 librbd 库交互,将 RBD 镜像公开给 iSCSI 客户端。利用 Ceph 的 iSCSI 网关,您可以有效地运行完全集成的块存储基础架构,其具备传统存储区域网络 (SAN) 的所有功能和好处。
图 8.1. Ceph iSCSI 网关 HA 设计
8.1. iSCSI 目标的要求 复制链接链接已复制到粘贴板!
Red Hat Ceph Storage 高可用性 (HA) iSCSI 网关解决方案对用于检测故障 OSD 的网关节点、内存容量和定时器设置数量的要求。
所需节点数
至少安装两个 iSCSI 网关节点。要提高弹性和 I/O 处理,可以最多安装四个 iSCSI 网关节点。
内存要求
RBD 镜像的内存占用量可能会增大到较大的大小。iSCSI 网关节点上映射的每个 RBD 镜像使用大约 90 MB 内存。确保 iSCSI 网关节点有足够的内存来支持每个映射的 RBD 镜像。
检测关闭 OSD
Ceph 监控器或 OSD 没有特定的 iSCSI 网关选项,但务必要降低检测故障 OSD 的默认计时器,以减少启动器超时的可能性。按照 较低计时器设置来检测下线 OSD 中的说明,以减少启动器超时的可能性。
其它资源
8.2. 降低检测下线 OSD 的计时器设置 复制链接链接已复制到粘贴板!
有时,需要降低检测下线 OSD 的定时器设置。例如,在将 Red Hat Ceph Storage 用作 iSCSI 网关时,您可以通过降低检测下线 OSD 的计时器设置来降低启动器超时的可能性。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
流程
将 Ansible 配置为使用新的计时器设置。
在
group_vars/all.yml文件中添加ceph_conf_overrides部分,或者编辑任何现有的ceph_conf_overrides部分,使其包含以osd开头的行:ceph_conf_overrides: osd: osd_client_watch_timeout: 15 osd_heartbeat_grace: 20 osd_heartbeat_interval: 5ceph_conf_overrides: osd: osd_client_watch_timeout: 15 osd_heartbeat_grace: 20 osd_heartbeat_interval: 5Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当
site.ymlAnsible playbook 针对 OSD 节点运行时,上述设置将添加到其ceph.conf配置文件中。使用 Ansible 更新
ceph.conf文件,并在所有 OSD 节点上重新启动 OSD 守护进程。在 Ansible admin 节点上运行以下命令:ansible-playbook --limit osds site.yml
[user@admin ceph-ansible]$ ansible-playbook --limit osds site.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证定时器设置与
ceph_conf_overrides中设置的相同:在一个或多个 OSD 上,使用
ceph daemon命令查看设置:ceph daemon osd.OSD_ID config get osd_client_watch_timeout ceph daemon osd.OSD_ID config get osd_heartbeat_grace ceph daemon osd.OSD_ID config get osd_heartbeat_interval
# 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_intervalCopy to Clipboard Copied! Toggle word wrap Toggle overflow Example:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果无法立即重启 OSD 守护进程,请从 Ceph 监控节点或直接在所有 OSD 节点上进行在线更新。在您能够重新启动 OSD 守护进程后,如上所述,使用 Ansible 将新的计时器设置添加到
ceph.conf中,以便在重启后保留设置。从 monitor 节点在线更新 OSD 计时器设置:
ceph tell osd.OSD_ID injectargs '--osd_client_watch_timeout 15' ceph tell osd.OSD_ID injectargs '--osd_heartbeat_grace 20' ceph tell osd.OSD_ID injectargs '--osd_heartbeat_interval 5'
# ceph tell osd.OSD_ID injectargs '--osd_client_watch_timeout 15' # ceph tell osd.OSD_ID injectargs '--osd_heartbeat_grace 20' # ceph tell osd.OSD_ID injectargs '--osd_heartbeat_interval 5'Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example:
ceph tell osd.0 injectargs '--osd_client_watch_timeout 15' ceph tell osd.0 injectargs '--osd_heartbeat_grace 20' ceph tell osd.0 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'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 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
# 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 5Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example:
ceph daemon osd.0 config set osd_client_watch_timeout 15 ceph daemon osd.0 config set osd_heartbeat_grace 20 ceph daemon osd.0 config set osd_heartbeat_interval 5
[root@osd1 ~]# ceph daemon osd.0 config set osd_client_watch_timeout 15 [root@osd1 ~]# ceph daemon osd.0 config set osd_heartbeat_grace 20 [root@osd1 ~]# ceph daemon osd.0 config set osd_heartbeat_interval 5Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其它资源
- 有关将 Red Hat Ceph Storage 用作 iSCSI 网关的更多信息,请参阅 块设备指南中的 Ceph iSCSI 网关简介。
8.3. 配置 iSCSI 目标 复制链接链接已复制到粘贴板!
通常,对 Ceph 存储集群的块级访问仅限于 QEMU 和 librbd,这是在 OpenStack 环境中采用的关键推动因素。Ceph 存储群集的块级别访问现在可以利用 iSCSI 标准来提供数据存储。
先决条件
- Red Hat Enterprise Linux 7.5 或更高版本。
- 正在运行的 Red Hat Ceph Storage 集群,版本 3.1 或更高版本。
- iSCSI 网关节点,它们可以与 OSD 节点或专用节点上在一起。
- iSCSI 网关节点上的有效的 Red Hat Enterprise Linux 7 和 Red Hat Ceph Storage 3.3 权利/订阅。
- 为 iSCSI 前端流量和 Ceph 后端流量分隔网络子网。
可以使用 Ansible 或命令行界面部署 Ceph iSCSI 网关。
8.3.1. 使用 Ansible 配置 iSCSI 目标 复制链接链接已复制到粘贴板!
要求:
- Red Hat Enterprise Linux 7.5 或更高版本。
- 正在运行的 Red Hat Ceph Storage 3 或更高版本。
安装:
在 iSCSI 网关节点上,启用 Red Hat Ceph Storage 3 Tools 存储库。详情请参阅 Red Hat Enterprise Linux 安装指南中的启用 Red Hat Ceph Storage 存储库 一节。
安装
ceph-iscsi-config软件包:yum install ceph-iscsi-config
# yum install ceph-iscsi-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在 Ansible 管理节点上,以
root用户身份执行以下步骤:- 启用 Red Hat Ceph Storage 3 Tools 存储库。详情请参阅 Red Hat Enterprise Linux 安装指南中的启用 Red Hat Ceph Storage 存储库 一节。
安装
ceph-ansible软件包:yum install ceph-ansible
# yum install ceph-ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/ansible/hosts文件中为 gateway 组添加一个条目:[iscsigws] ceph-igw-1 ceph-igw-2
[iscsigws] ceph-igw-1 ceph-igw-2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果与 OSD 节点共存 iSCSI 网关,请将 OSD 节点添加到
[iscsigws]部分中。
配置:
ceph-ansible 软件包将文件放在 /usr/share/ceph-ansible/group_vars/ 目录中,名为 iscsigws.yml.sample。
创建
iscsigws.yml.sample文件的副本,并将其命名为iscsigws.yml。重要新文件名(
iscsigws.yml)和新部分标题([iscsigws])仅适用于 Red Hat Ceph Storage 3.1 或更高版本。从以前的 Red Hat Ceph Storage 升级到 3.1 将仍然使用旧的文件名(iscsi-gws.yml)和旧部分标题([iscsi-gws])。-
打开
iscsigws.yml文件进行编辑。 取消注释
gateway_ip_list选项,并使用 IPv4 或 IPv6 地址相应地更新值。例如,添加两个网关,其 IPv4 地址为 10.172.19.21 和 10.172.19.22,配置
gateway_ip_list,如下所示:gateway_ip_list: 10.172.19.21,10.172.19.22
gateway_ip_list: 10.172.19.21,10.172.19.22Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要为
gateway_ip_list选项提供 IP 地址是必需的。您不能混合使用 IPv4 和 IPv6 地址。取消注释
rbd_devices变量并相应地更新值,例如:rbd_devices: - { pool: 'rbd', image: 'ansible1', size: '30G', host: 'ceph-1', state: 'present' } - { pool: 'rbd', image: 'ansible2', size: '15G', host: 'ceph-1', state: 'present' } - { pool: 'rbd', image: 'ansible3', size: '30G', host: 'ceph-1', state: 'present' } - { pool: 'rbd', image: 'ansible4', size: '50G', host: 'ceph-1', state: 'present' }rbd_devices: - { pool: 'rbd', image: 'ansible1', size: '30G', host: 'ceph-1', state: 'present' } - { pool: 'rbd', image: 'ansible2', size: '15G', host: 'ceph-1', state: 'present' } - { pool: 'rbd', image: 'ansible3', size: '30G', host: 'ceph-1', state: 'present' } - { pool: 'rbd', image: 'ansible4', size: '50G', host: 'ceph-1', state: 'present' }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 取消注释
client_connections变量并相应地更新值,例如:启用 CHAP 身份验证的示例
client_connections: - { client: 'iqn.1994-05.com.redhat:rh7-iscsi-client', image_list: 'rbd.ansible1,rbd.ansible2', chap: 'rh7-iscsi-client/redhat', status: 'present' } - { client: 'iqn.1991-05.com.microsoft:w2k12r2', image_list: 'rbd.ansible4', chap: 'w2k12r2/microsoft_w2k12', status: 'absent' }client_connections: - { client: 'iqn.1994-05.com.redhat:rh7-iscsi-client', image_list: 'rbd.ansible1,rbd.ansible2', chap: 'rh7-iscsi-client/redhat', status: 'present' } - { client: 'iqn.1991-05.com.microsoft:w2k12r2', image_list: 'rbd.ansible4', chap: 'w2k12r2/microsoft_w2k12', status: 'absent' }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 禁用 CHAP 身份验证的示例
client_connections: - { client: 'iqn.1991-05.com.microsoft:w2k12r2', image_list: 'rbd.ansible4', chap: '', status: 'present' } - { client: 'iqn.1991-05.com.microsoft:w2k16r2', image_list: 'rbd.ansible2', chap: '', status: 'present' }client_connections: - { client: 'iqn.1991-05.com.microsoft:w2k12r2', image_list: 'rbd.ansible4', chap: '', status: 'present' } - { client: 'iqn.1991-05.com.microsoft:w2k16r2', image_list: 'rbd.ansible2', chap: '', status: 'present' }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要仅在 Red Hat Ceph Storage 3.1 或更高版本上支持 CHAP。红帽不支持混合客户端,有些启用了 CHAP 并禁用了一些 CHAP。所有标记为
present的客户端都必须启用 CHAP,或者必须禁用 CHAP。检查以下 Ansible 变量和描述,并根据需要更新。
Expand 表 8.1. iSCSI 网关常规变量 变量 meaning/Purpose seed_monitorEach gateway needs access to the ceph cluster for rados and rbd calls. This means the iSCSI gateway must have an appropriate
/etc/ceph/directory defined. Theseed_monitorhost is used to populate the iSCSI gateway’s/etc/ceph/directory.cluster_nameDefine a custom storage cluster name.
gateway_keyringDefine a custom keyring name.
deploy_settingsIf set to
true, then deploy the settings when the playbook is ran.perform_system_checksThis is a boolean value that checks for multipath and lvm configuration settings on each gateway. It must be set to true for at least the first run to ensure multipathd and lvm are configured properly.
gateway_iqnThis is the iSCSI IQN that all the gateways will expose to clients. This means each client will see the gateway group as a single subsystem.
gateway_ip_listThe comma separated ip list defines the IPv4 or IPv6 addresses that will be used on the front end network for iSCSI traffic. This IP will be bound to the active target portal group on each node, and is the access point for iSCSI traffic. Each IP should correspond to an IP available on the hosts defined in the
iscsigws.ymlhost group in/etc/ansible/hosts.rbd_devicesThis section defines the RBD images that will be controlled and managed within the iSCSI gateway configuration. Parameters like
poolandimageare self explanatory. Here are the other parameters:
size= This defines the size of the RBD. You may increase the size later, by simply changing this value, but shrinking the size of an RBD is not supported and is ignored.
host= This is the iSCSI gateway host name that will be responsible for the rbd allocation/resize. Every definedrbd_deviceentry must have a host assigned.
state= This is typical Ansible syntax for whether the resource should be defined or removed. A request with a state of absent will first be checked to ensure the rbd is not mapped to any client. If the RBD is unallocated, it will be removed from the iSCSI gateway and deleted from the configuration.client_connectionsThis section defines the iSCSI client connection details together with the LUN (RBD image) masking. Currently only CHAP is supported as an authentication mechanism. Each connection defines an
image_listwhich is a comma separated list of the formpool.rbd_image[,pool.rbd_image,…]. RBD images can be added and removed from this list, to change the client masking. Note, that there are no checks done to limit RBD sharing across client connections.Expand 表 8.2. iSCSI 网关 RBD-TARGET-API 变量 变量 meaning/Purpose api_user
API 的用户名。默认值为
admin。api_password
使用 API 的密码。默认值为
admin。api_port
使用 API 的 TCP 端口号。默认值为
5000。api_secure
值可以是
true或false。默认值为false。loop_delay
控制轮询 iSCSI 管理对象所需的睡眠间隔(以秒为单位)。默认值为
1。trusted_ip_list
有权访问 API 的 IPv4 或 IPv6 地址列表。默认情况下,只有 iSCSI 网关节点有权访问。
重要对于
rbd_devices,池名称或镜像名称中没有句点(.)。警告网关配置更改一次仅受一个网关的支持。尝试通过多个网关同时运行更改可能会导致配置不稳定和不一致。
警告在运行
ansible-playbook命令时,Ansible 将安装ceph-iscsi-cli软件包,然后根据group_vars/iscsigws.yml文件中的设置更新/etc/ceph/iscsi-gateway.cfg文件。如果您之前使用 命令行安装过程 安装了ceph-iscsi-cli软件包,则iscsi-gateway.cfg文件中的现有设置必须复制到group_vars/iscsigws.yml文件中。请参阅 附录 A,
iscsigws.yml文件示例 查看完整的iscsigws.yml.sample文件。
部署:
在 Ansible 管理节点上,以 root 用户身份执行以下步骤。
执行 Ansible playbook:
cd /usr/share/ceph-ansible ansible-playbook site.yml
# cd /usr/share/ceph-ansible # ansible-playbook site.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Ansible playbook 将处理 RPM 依赖项、RBD 创建和 Linux iSCSI 目标配置。
警告在独立 iSCSI 网关节点上,验证是否启用了正确的 Red Hat Ceph Storage 3.3 软件存储库。如果它们不可用,则会安装错误的软件包。
运行以下命令验证配置:
gwcli ls
# gwcli lsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要不要使用
targetcli实用程序来更改配置,这会导致以下问题: ALUA 配置错误和路径故障转移问题。可能会导致数据损坏,跨 iSCSI 网关进行不匹配的配置,并且 WWN 信息不匹配,从而导致客户端路径问题。
服务管理:
ceph-iscsi-config 软件包将安装配置管理逻辑和名为 rbd-target-gw 的 Systemd 服务。启用 Systemd 服务后,rbd-target-gw 将在引导时启动,并将恢复 Linux iSCSI 目标状态。使用 Ansible playbook 部署 iSCSI 网关会禁用目标服务。
systemctl start rbd-target-gw
# systemctl start rbd-target-gw
以下是与 rbd-target-gw Systemd 服务交互的结果。
systemctl <start|stop|restart|reload> rbd-target-gw
# systemctl <start|stop|restart|reload> rbd-target-gw
reload-
重新加载请求将强制
rbd-target-gw重新读取配置并将其应用到当前运行的环境。这通常不需要,因为更改是从 Ansible 并行部署到所有 iSCSI 网关节点。 stop- 停止请求将关闭网关的门户接口,丢弃与客户端的连接,并从内核中擦除当前的 Linux iSCSI 目标配置。这会将 iSCSI 网关返回到干净的状态。当客户端断开连接时,活跃 I/O 通过客户端多路径重新调度到其他 iSCSI 网关。
管理:
在 /usr/share/ceph-ansible/group_vars/iscsigws.yml 文件中,Ansible playbook 支持很多操作工作流。
红帽不支持管理 Ceph iSCSI 网关工具导出的 RBD 镜像,如 gwcli 和 ceph-ansible。此外,使用 rbd 命令重命名或删除 Ceph iSCSI 网关导出的 RBD 镜像可能会导致存储集群不稳定。
在从 iSCSI 网关配置移除 RBD 镜像之前,请遵循从操作系统中删除存储设备的标准步骤。
有关使用 Red Hat Enterprise Linux 7 的客户端和服务器,有关删除设备的详情,请参阅 Red Hat Enterprise Linux 7 存储管理指南。
| 我希望… | 通过… 更新 iscsigws.yml 文件 |
|---|---|
| 添加更多 RBD 镜像 |
使用新镜像在 |
| 重新定义现有 RBD 镜像的大小 |
更新 |
| 添加客户端 |
在 |
| 向客户端添加另一个 RBD |
将相关的 RBD |
| 从客户端中删除 RBD |
从客户端 |
| 从系统中删除 RBD |
将 RBD 条目 state 变量更改为 |
| 更改客户端 CHAP 凭证 |
更新 |
| 删除客户端 |
更新相关的 |
进行更改后,重新运行 Ansible playbook,以在 iSCSI 网关节点之间应用更改。
ansible-playbook site.yml
# ansible-playbook site.yml
删除配置:
在清除 iSCSI 网关配置前断开所有 iSCSI 启动器。对适当的操作系统按照以下步骤操作:
Red Hat Enterprise Linux 启动程序:
语法
iscsiadm -m node -T $TARGET_NAME --logout
iscsiadm -m node -T $TARGET_NAME --logoutCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
$TARGET_NAME替换为配置的 iSCSI 目标名称。示例
iscsiadm -m node -T iqn.2003-01.com.redhat.iscsi-gw:ceph-igw --logout Logging out of session [sid: 1, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.21,3260] Logging out of session [sid: 2, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.22,3260] Logout of [sid: 1, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.21,3260] successful. Logout of [sid: 2, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.22,3260] successful.
# iscsiadm -m node -T iqn.2003-01.com.redhat.iscsi-gw:ceph-igw --logout Logging out of session [sid: 1, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.21,3260] Logging out of session [sid: 2, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.22,3260] Logout of [sid: 1, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.21,3260] successful. Logout of [sid: 2, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.22,3260] successful.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Windows 启动器:
详情请查看 Microsoft 文档。
VMware ESXi 启动器:
如需了解更多详细信息,请参阅 VMware 文档。
在 Ansible 管理节点上,以 Ansbile 用户身份更改为
/usr/share/ceph-ansible/目录:cd /usr/share/ceph-ansible/
[user@admin ~]$ cd /usr/share/ceph-ansible/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 Ansible playbook 以删除 iSCSI 网关配置:
ansible-playbook purge-cluster.yml --limit iscsigws
[user@admin ceph-ansible]$ ansible-playbook purge-cluster.yml --limit iscsigwsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ceph monitor 或客户端节点上,以
root用户身份删除 iSCSI 网关配置对象(gateway.conf):rados rm -p pool gateway.conf
[root@mon ~]# rados rm -p pool gateway.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选。
如果不再需要导出的 Ceph RADOS 块设备(RBD),则移除 RBD 镜像。以 root 用户身份在 Ceph 监控或客户端
节点上运行以下命令:语法
rbd rm $IMAGE_NAME
rbd rm $IMAGE_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
$IMAGE_NAME替换为 RBD 镜像的名称。示例
rbd rm rbd01
[root@mon ~]# rbd rm rbd01Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3.2. 使用命令行界面配置 iSCSI 目标 复制链接链接已复制到粘贴板!
Ceph iSCSI 网关是 iSCSI 目标节点,也是 Ceph 客户端节点。Ceph iSCSI 网关可以是单机节点,也可以并置在 Ceph 对象存储磁盘(OSD)节点上。完成以下步骤,将安装并配置 Ceph iSCSI 网关以进行基本操作。
要求:
- Red Hat Enterprise Linux 7.5 或更高版本
- 正在运行的 Red Hat Ceph Storage 3.3 集群或更新版本
必须安装以下软件包:
-
targetcli-2.1.fb47-0.1.20170815.git5bf3517.el7cpor newer package -
python-rtslib-2.1.fb64-0.1.20170815.gitec364f3.el7cpor newer package -
tcmu-runner-1.4.0-0.2.el7cpor newer package openssl-1.0.2k-8.el7或更新版本的软件包重要如果这些软件包的早期版本存在,则必须在安装更新的版本前首先删除它们。这些较新的版本必须从 Red Hat Ceph Storage 存储库安装。
-
在使用 gwcli 工具之前,在存储集群中的所有 Ceph 监控节点上执行以下步骤:
以
root用户身份重启ceph-mon服务:systemctl restart ceph-mon@$MONITOR_HOST_NAME
# systemctl restart ceph-mon@$MONITOR_HOST_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
systemctl restart ceph-mon@monitor1
# systemctl restart ceph-mon@monitor1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在 Ceph iSCSI 网关节点上以 root 用户身份执行以下步骤,然后继续 安装 部分:
-
如果 Ceph iSCSI 网关不在 OSD 节点上并置,则将位于
/etc/ceph/中的 Ceph 配置文件从存储集群中正在运行的 Ceph 节点复制到 iSCSI 网关节点。Ceph 配置文件必须存在于/etc/ceph/下的 iSCSI 网关节点上。 - 安装和配置 Ceph 命令行界面。详情请参阅 Red Hat Ceph Storage 3 安装指南中的安装 Ceph 命令行界面 一章。
启用 Ceph 工具存储库:
subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-rpms
# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果需要,在防火墙上打开 TCP 端口 3260 和 5000。
新建或使用现有的 RADOS 块设备 (RBD)。
- 详情请查看 第 2.1 节 “先决条件”。
如果您已使用 Ansible 安装 Ceph iSCSI 网关,请不要使用此流程。
在运行 ansible-playbook 命令时,Ansible 将安装 ceph-iscsi-cli 软件包,然后根据 group_vars/iscsigws.yml 文件中的设置更新 /etc/ceph/iscsi-gateway.cfg 文件。请参阅 要求: 了解更多信息。
安装:
以 root 用户身份在所有 iSCSI 网关节点上执行以下步骤,除非另有说明。
安装
ceph-iscsi-cli软件包:yum install ceph-iscsi-cli
# yum install ceph-iscsi-cliCopy to Clipboard Copied! Toggle word wrap Toggle overflow 安装
tcmu-runner软件包:yum install tcmu-runner
# yum install tcmu-runnerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果需要,安装
openssl软件包:yum install openssl
# yum install opensslCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在主 iSCSI 网关节点上,创建一个目录来存放 SSL 密钥:
mkdir ~/ssl-keys cd ~/ssl-keys
# mkdir ~/ssl-keys # cd ~/ssl-keysCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在主 iSCSI 网关节点上,创建证书和密钥文件:
openssl req -newkey rsa:2048 -nodes -keyout iscsi-gateway.key -x509 -days 365 -out iscsi-gateway.crt
# openssl req -newkey rsa:2048 -nodes -keyout iscsi-gateway.key -x509 -days 365 -out iscsi-gateway.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意系统将提示您输入环境信息。
在主 iSCSI 网关节点上,创建一个 PEM 文件:
cat iscsi-gateway.crt iscsi-gateway.key > iscsi-gateway.pem
# cat iscsi-gateway.crt iscsi-gateway.key > iscsi-gateway.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在主 iSCSI 网关节点上,创建一个公钥:
openssl x509 -inform pem -in iscsi-gateway.pem -pubkey -noout > iscsi-gateway-pub.key
# openssl x509 -inform pem -in iscsi-gateway.pem -pubkey -noout > iscsi-gateway-pub.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
从主 iSCSI 网关节点,将
iscsi-gateway.crt、iscsi-gateway.pem、iscsi-gateway-pub.key和iscsi-gateway.key文件复制到其他 iSCSI 网关节点上的/etc/ceph/目录中。
在
/etc/ceph/目录中创建一个名为iscsi-gateway.cfg的文件:touch /etc/ceph/iscsi-gateway.cfg
# touch /etc/ceph/iscsi-gateway.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
iscsi-gateway.cfg文件并添加以下几行:语法
[config] cluster_name = <ceph_cluster_name> gateway_keyring = <ceph_client_keyring> api_secure = true trusted_ip_list = <ip_addr>,<ip_addr>
[config] cluster_name = <ceph_cluster_name> gateway_keyring = <ceph_client_keyring> api_secure = true trusted_ip_list = <ip_addr>,<ip_addr>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[config] cluster_name = ceph gateway_keyring = ceph.client.admin.keyring api_secure = true trusted_ip_list = 192.168.0.10,192.168.0.11
[config] cluster_name = ceph gateway_keyring = ceph.client.admin.keyring api_secure = true trusted_ip_list = 192.168.0.10,192.168.0.11Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关这些选项的详情,请参阅 要求: 中的表 8.1 和 8.2。
重要在所有 iSCSI 网关节点上,
iscsi-gateway.cfg文件都必须相同。-
将
iscsi-gateway.cfg文件复制到所有 iSCSI 网关节点。
启用并启动 API 服务:
systemctl enable rbd-target-api systemctl start rbd-target-api
# systemctl enable rbd-target-api # systemctl start rbd-target-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
配置:
启动 iSCSI 网关命令行界面:
gwcli
# gwcliCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 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:<target_name> > goto gateways > create <iscsi_gw_name> <IP_addr_of_gw> > create <iscsi_gw_name> <IP_addr_of_gw>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
>/iscsi-target create iqn.2003-01.com.redhat.iscsi-gw:ceph-igw > goto gateways > create ceph-gw-1 10.172.19.21 > create ceph-gw-2 10.172.19.22
>/iscsi-target create iqn.2003-01.com.redhat.iscsi-gw:ceph-igw > goto gateways > create ceph-gw-1 10.172.19.21 > create ceph-gw-2 10.172.19.22Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要您不能混合使用 IPv4 和 IPv6 地址。
添加 RADOS 块设备(RBD):
语法
> cd /disks >/disks/ create <pool_name> image=<image_name> size=<image_size>m|g|t max_data_area_mb=<buffer_size>
> cd /disks >/disks/ create <pool_name> image=<image_name> size=<image_size>m|g|t max_data_area_mb=<buffer_size>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
> cd /disks >/disks/ create rbd image=disk_1 size=50g max_data_area_mb=32
> cd /disks >/disks/ create rbd image=disk_1 size=50g max_data_area_mb=32Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要池名称或镜像名称中不能有任何句点(.)。
警告max_data_area_mb选项控制每个镜像可用于在 iSCSI 目标和 Ceph 集群之间传递 SCSI 命令数据的内存量(以兆字节为单位)。如果这个值太小,则可能会导致过量队列完全重试,这会影响性能。如果值太大,则可能会导致一个磁盘使用过多系统内存,这可能会导致其他子系统的分配失败。默认值为 8。可以使用
gwcli reconfigure子命令更改此值。该镜像不得被 iSCSI 启动器使用,才能使此命令生效。除非在本文档中指定,或者红帽支持指示您这样做,否则不要使用gwcli reconfigure子命令来调整其他选项。语法
>/disks/ reconfigure max_data_area_mb <new_buffer_size>
>/disks/ reconfigure max_data_area_mb <new_buffer_size>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
>/disks/ reconfigure max_data_area_mb 64
>/disks/ reconfigure max_data_area_mb 64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建客户端:
语法
> goto hosts > create iqn.1994-05.com.redhat:<client_name> > auth chap=<user_name>/<password>
> goto hosts > create iqn.1994-05.com.redhat:<client_name> > auth chap=<user_name>/<password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
> goto hosts > create iqn.1994-05.com.redhat:rh7-client > auth chap=iscsiuser1/temp12345678
> goto hosts > create iqn.1994-05.com.redhat:rh7-client > auth chap=iscsiuser1/temp12345678Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要仅在 Red Hat Ceph Storage 3.1 或更高版本上支持 CHAP。红帽不支持混合客户端,有些启用了 CHAP 并禁用了一些 CHAP。所有客户端都必须启用 CHAP,或者禁用 CHAP。默认的行为是仅通过其启动器名称验证启动器。
如果启动器无法登录到目标,那么一些启动器可能是错误配置的 CHAP 身份验证。
示例
o- hosts ................................ [Hosts: 2: Auth: MISCONFIG]
o- hosts ................................ [Hosts: 2: Auth: MISCONFIG]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在主机级别执行以下命令
重置所有CHAP 身份验证:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 向客户端添加磁盘:
语法
>/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:<client_name> > disk add <pool_name>.<image_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
>/iscsi-target..eph-igw/hosts> cd iqn.1994-05.com.redhat:rh7-client > disk add rbd.disk_1
>/iscsi-target..eph-igw/hosts> cd iqn.1994-05.com.redhat:rh7-client > disk add rbd.disk_1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要确认 API 正确使用 SSL,请查看
https的/var/log/rbd-target-api.log文件,例如:Aug 01 17:27:42 test-node.example.com python[1879]: * Running on https://0.0.0.0:5000/
Aug 01 17:27:42 test-node.example.com python[1879]: * Running on https://0.0.0.0:5000/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 下一步是配置 iSCSI 启动器。有关配置 iSCSI 启动器的更多信息,请参阅 第 8.4 节 “配置 iSCSI 启动器”。
验证
验证 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)]
/> goto gateways /iscsi-target...-igw/gateways> ls o- gateways ............................ [Up: 2/2, Portals: 2] o- ceph-gw-1 ........................ [ 10.172.19.21 (UP)] o- ceph-gw-2 ........................ [ 10.172.19.22 (UP)]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果状态是
UNKNOWN,请检查网络问题和任何错误。如果使用防火墙,请检查是否打开适当的 TCP 端口。检查 iSCSI 网关是否在trusted_ip_list选项中列出。验证rbd-target-api服务是否在 iSCSI 网关节点上运行。要验证启动器是否连接到 iSCSI 目标,您会看到 initiator
LOGGED-IN:示例
/> goto hosts /iscsi-target...csi-igw/hosts> ls o- hosts .............................. [Hosts: 1: Auth: None] o- iqn.1994-05.com.redhat:rh7-client [LOGGED-IN, Auth: None, Disks: 0(0.00Y)]
/> goto hosts /iscsi-target...csi-igw/hosts> ls o- hosts .............................. [Hosts: 1: Auth: None] o- iqn.1994-05.com.redhat:rh7-client [LOGGED-IN, Auth: None, Disks: 0(0.00Y)]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 LUN 是否跨 iSCSI 网关平衡:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在创建磁盘时,将根据启动器的多路径层将
磁盘分配iSCSI 网关作为其所有者。启动器的多路径层将报告为 ALUA Active-Optimized (AO)状态。其他路径将报告为处于 ALUA Active-non-Optimized (ANO)状态。如果 AO 路径失败,则使用其他 iSCSI 网关之一。故障转移网关的排序取决于启动器的多路径层,其中通常基于首先发现的路径。
目前,LUN 的平衡不是动态的。在创建磁盘时会选择自己的 iSCSI 网关,且无法更改。
8.3.3. 优化 iSCSI 目标的性能 复制链接链接已复制到粘贴板!
有许多设置控制 iSCSI 目标如何通过网络传输数据。这些设置可用于优化 iSCSI 网关的性能。
只有在由红帽支持团队指示或根据本文档中指定的要求时才更改这些设置。
gwcli reconfigure 子命令
gwcli reconfigure 子命令可控制用于优化 iSCSI 网关性能的设置。
影响 iSCSI 目标性能的设置
- max_data_area_mb
- cmdsn_depth
- immediate_data
- initial_r2t
- max_outstanding_r2t
- first_burst_length
- max_burst_length
- max_recv_data_segment_length
- max_xmit_data_segment_length
其它资源
-
有关
max_data_area_mb的信息,包括如何使用gwcli reconfigure来调整它的示例 ,请参见为 块设备指南 配置 iSCSI 目标 一节中,以及在容器中 配置 Ceph iSCSI 网关。
8.3.4. 添加更多 iSCSI 网关 复制链接链接已复制到粘贴板!
作为存储管理员,您可以使用 Ansible 或 gwcli 命令行工具将初始两个 iSCSI 网关扩展到四个 iSCSI 网关。添加更多 iSCSI 网关在使用负载平衡和故障转移选项时为您提供更大的灵活性,同时提供更多冗余。
8.3.4.1. 先决条件 复制链接链接已复制到粘贴板!
- 正在运行的 Red Hat Ceph Storage 3 集群。
- 安装 iSCSI 网关软件。
- 备用节点或现有 OSD 节点。
8.3.4.2. 使用 Ansible 添加更多 iSCSI 网关 复制链接链接已复制到粘贴板!
您可以使用 Ansible 自动化实用程序添加更多 iSCSI 网关。此流程将两个 iSCSI 网关的默认安装扩展到四个 iSCSI 网关。您可以在独立节点上配置 iSCSI 网关,也可以与现有 OSD 节点共存。
先决条件
- 正在运行的 Red Hat Ceph Storage 3 集群。
- 安装 iSCSI 网关软件。
-
在 Ansible 管理节点上具有
root用户访问权限. -
在新节点上具有
root用户访问权限.
流程
在新 iSCSI 网关节点上,启用 Red Hat Ceph Storage 3 Tools 存储库。
subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
[root@iscsigw ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如需了解更多详细信息 ,请参阅 Red Hat Enterprise Linux 安装指南中的启用 Red Hat Ceph Storage 存储库 一节。
安装
ceph-iscsi-config软件包:yum install ceph-iscsi-config
[root@iscsigw ~]# yum install ceph-iscsi-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 附加到网关组的
/etc/ansible/hosts文件中的列表:示例
[iscsigws] ... ceph-igw-3 ceph-igw-4
[iscsigws] ... ceph-igw-3 ceph-igw-4Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果与 OSD 节点共存 iSCSI 网关,请将 OSD 节点添加到
[iscsigws]部分中。打开
/usr/share/ceph-ansible/group_vars/iscsigws.yml文件进行编辑,并将带有 IPv4 地址的额外两个 iSCSI 网关附加到gateway_ip_list选项:示例
gateway_ip_list: 10.172.19.21,10.172.19.22,10.172.19.23,10.172.19.24
gateway_ip_list: 10.172.19.21,10.172.19.22,10.172.19.23,10.172.19.24Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要为
gateway_ip_list选项提供 IP 地址是必需的。您不能混合使用 IPv4 和 IPv6 地址。在 Ansible 管理节点上,以
root用户身份执行 Ansible playbook:cd /usr/share/ceph-ansible ansible-playbook site.yml
# cd /usr/share/ceph-ansible # ansible-playbook site.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 从 iSCSI 启动器,重新登录以使用新添加的 iSCSI 网关。
其它资源
- 有关使用 iSCSI 启动器的更多详细信息,请参阅配置 iSCSI 启动器。
8.3.4.3. 使用 gwcli 添加更多 iSCSI 网关 复制链接链接已复制到粘贴板!
您可以使用 gwcli 命令行工具添加更多 iSCSI 网关。此流程将两个 iSCSI 网关的默认扩展为四个 iSCSI 网关。
先决条件
- 正在运行的 Red Hat Ceph Storage 3 集群。
- 安装 iSCSI 网关软件。
-
具有
root用户对新节点或 OSD 节点的访问权限.
流程
-
如果 Ceph iSCSI 网关不在 OSD 节点上并置,则将位于
/etc/ceph/目录中的 Ceph 配置文件从存储集群中正在运行的 Ceph 节点复制到新的 iSCSI 网关节点。Ceph 配置文件必须存在于/etc/ceph/目录下的 iSCSI 网关节点上。 - 安装和配置 Ceph 命令行界面。详情请参阅 Red Hat Enterprise Linux 的 Red Hat Ceph Storage 3 安装指南中的安装 Ceph 命令行界面 一章。
在新 iSCSI 网关节点上,启用 Red Hat Ceph Storage 3 Tools 存储库。
subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
[root@iscsigw ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如需了解更多详细信息 ,请参阅 Red Hat Enterprise Linux 安装指南中的启用 Red Hat Ceph Storage 存储库 一节。
安装
ceph-iscsi-cli和tcmu-runner软件包:yum install ceph-iscsi-cli tcmu-runner
[root@iscsigw ~]# yum install ceph-iscsi-cli tcmu-runnerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果需要,安装
openssl软件包:yum install openssl
[root@iscsigw ~]# yum install opensslCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在其中一个现有 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
[config] ... trusted_ip_list = 10.172.19.21,10.172.19.22,10.172.19.23,10.172.19.24Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关这些选项的更多详细信息 ,请参阅使用 Ansible 表配置 iSCSI 目标。
将更新的
/etc/ceph/iscsi-gateway.cfg文件复制到所有 iSCSI 网关节点。重要在所有 iSCSI 网关节点上,
iscsi-gateway.cfg文件都必须相同。-
(可选)如果使用 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/目录中。 在新的 iSCSI 网关节点上启用并启动 API 服务:
systemctl enable rbd-target-api systemctl start rbd-target-api
[root@iscsigw ~]# systemctl enable rbd-target-api [root@iscsigw ~]# systemctl start rbd-target-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 iSCSI 网关命令行界面:
gwcli
[root@iscsigw ~]# gwcliCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 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:_TARGET_NAME_ > goto gateways > create ISCSI_GW_NAME IP_ADDR_OF_GW > create ISCSI_GW_NAME IP_ADDR_OF_GWCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
>/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
>/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.24Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要您不能混合使用 IPv4 和 IPv6 地址。
- 从 iSCSI 启动器,重新登录以使用新添加的 iSCSI 网关。
其它资源
- 有关使用 iSCSI 启动器的更多详细信息,请参阅配置 iSCSI 启动器。
8.4. 配置 iSCSI 启动器 复制链接链接已复制到粘贴板!
Red Hat Ceph Storage 支持三个操作系统中的 iSCSI 启动器来连接到 Ceph iSCSI 网关:
8.4.1. Red Hat Enterprise Linux 的 iSCSI 启动器 复制链接链接已复制到粘贴板!
先决条件:
-
必须安装软件包
iscsi-initiator-utils-6.2.0.873-35或更高版本 -
必须安装软件包
device-mapper-multipath-0.4.9-99或更新版本
安装软件:
安装 iSCSI 启动器和多路径工具:
yum install iscsi-initiator-utils yum install device-mapper-multipath
# yum install iscsi-initiator-utils # yum install device-mapper-multipathCopy to Clipboard Copied! Toggle word wrap Toggle overflow
设置启动器名称
编辑
/etc/iscsi/initiatorname.iscsi文件。注意启动器名称必须与 Ansible
client_connections选项中使用的启动器名称匹配,或者使用gwcli在初始设置中使用什么。
配置多路径 IO:
创建默认
/etc/multipath.conf文件并启用multipathd服务:mpathconf --enable --with_multipathd y
# mpathconf --enable --with_multipathd yCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将以下内容添加到
/etc/multipath.conf文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
multipathd服务:systemctl reload multipathd
# systemctl reload multipathdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
CHAP Setup 和 iSCSI Discovery/Login:
通过相应地更新
/etc/iscsi/iscsid.conf文件来提供 CHAP 用户名和密码。示例
node.session.auth.authmethod = CHAP node.session.auth.username = user node.session.auth.password = password
node.session.auth.authmethod = CHAP node.session.auth.username = user node.session.auth.password = passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果更新这些选项,则必须重新运行
iscsiadm discovery命令。发现目标门户:
iscsiadm -m discovery -t st -p 192.168.56.101 192.168.56.101:3260,1 iqn.2003-01.org.linux-iscsi.rheln1 192.168.56.102:3260,2 iqn.2003-01.org.linux-iscsi.rheln1
# iscsiadm -m discovery -t st -p 192.168.56.101 192.168.56.101:3260,1 iqn.2003-01.org.linux-iscsi.rheln1 192.168.56.102:3260,2 iqn.2003-01.org.linux-iscsi.rheln1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 登录到目标:
iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.rheln1 -l
# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.rheln1 -lCopy to Clipboard Copied! Toggle word wrap Toggle overflow
查看多路径 IO 配置:
多路径守护进程(multipath)将根据 multipath.conf 设置自动设置设备。运行 multipath 命令显示故障切换配置中的设备设置,每个路径都有一个优先级组,例如:
multipath -ll 输出 prio 值指示 ALUA 状态,其中 prio=50 表示它是在 ALUA Active-Optimized 状态下拥有 iSCSI 网关的路径,prio=10 表示它是一个 Active-non-Optmized 路径。status 字段指示正在使用的路径,其中 active 表示当前使用的路径,enabled 表示在 active 失败时的故障转移路径。要将设备名称(例如 multipath -ll 输出中的 sde )与 iSCSI 网关匹配,请运行以下命令:
iscsiadm -m session -P 3
# iscsiadm -m session -P 3
Persistent Portal 值是分配给 gwcli 中列出的 iSCSI 网关的 IP 地址或 gateway_ip_list 中列出的 iSCSI 网关的 IP 地址(如果使用 Ansible)。
8.4.2. Red Hat Virtualization 的 iSCSI 启动器 复制链接链接已复制到粘贴板!
先决条件:
- Red Hat Virtualization 4.1
- 在所有 Red Hat Virtualization 节点上配置了 MPIO 设备
-
必须安装软件包
iscsi-initiator-utils-6.2.0.873-35或更高版本 -
必须安装软件包
device-mapper-multipath-0.4.9-99或更新版本
配置多路径 IO:
更新
/etc/multipath/conf.d/DEVICE_NAME.conf文件,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
multipathd服务:systemctl reload multipathd
# systemctl reload multipathdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
添加 iSCSI 存储
- 单击 Storage 资源选项卡,以列出现有的存储域。
- 单击 New Domain 按钮打开 New Domain 窗口。
- 输入新存储域的名称。
- 使用 Data Center 下拉菜单选择数据中心。
- 使用下拉菜单选择 Domain Function 和 Storage Type。与所选域功能不兼容的存储域类型不可用。
- 在 Use Host 字段中选择一个活动主机。如果这不是数据中心中的第一个数据域,您必须选择数据中心的 SPM 主机。
当选择 iSCSI 作为存储类型时,新建域 窗口会自动显示已知带有未使用的 LUN 的目标。如果没有列出您要添加存储的目标,您可以使用目标发现来找到目标,否则继续下一步。
单击 Discover Targets 以启用目标发现选项。发现目标并登录后,新建域 窗口将自动显示环境未使用的目标。
注意环境外部的 LUN 也会显示。
您可以使用 发现目标 选项在多个目标或同一 LUN 的多个路径中添加 LUN。
- 在 Address 字段中输入 iSCSI 主机的完全限定域名或 IP 地址。
-
在 Port 字段中输入在浏览目标时,用于连接到主机的端口。默认值为
3260。 - 如果使用 Challenge Handshake Authentication Protocol (CHAP) 来保护存储,请选中 User Authentication 复选框。输入 CHAP 用户名 和 CHAP 密码。
- 单击 Discover 按钮。
从发现结果中选择要使用的目标,然后单击 登录 按钮。或者,单击 Login All 以登录所有发现的目标。
重要如果需要多个路径访问,请确保通过所有必要的路径发现并登录到目标。目前不支持修改存储域以添加其他路径。
- 单击所需目标旁边的 + 按钮。这将展开条目并显示与目标连接的所有未使用的 LUN。
- 选中您正在使用的每个 LUN 的复选框,以创建存储域。
另外,您还可以配置高级参数。
- 单击 Advanced Parameters。
- 在 Warning Low Space Indicator 字段中输入一个百分比值。如果存储域中的可用空间低于这个百分比,则会向用户显示警告消息并记录日志。
- 在 Critical Space Action Blocker 字段中输入一个 GB 值。如果存储域中可用的可用空间低于此值,则会向用户和记录错误消息显示,并且任何占用空间的新操作(即便是临时使用)都会被阻止。
- 选中 Wipe After Delete 复选框以启用 wipe after delete 选项。可以在创建域后编辑此选项,但是这样做不会在删除已存在的磁盘属性后更改擦除。
- 选中 Discard After Delete 复选框,以在删除后启用丢弃选项。可在创建域后编辑此选项。此选项仅适用于块存储域。
- 单击 确定 以创建存储域并关闭该窗口。
8.4.3. Microsoft Windows 的 iSCSI 启动器 复制链接链接已复制到粘贴板!
先决条件:
- Microsoft Windows Server 2016
iSCSI 启动器、发现和设置:
- 安装 iSCSI 启动器驱动程序和 MPIO 工具。
- 启动 MPIO 程序,单击 Discover Multi-Paths 选项卡,选中 iSCSI 设备的添加支持 框,然后单击 Add。这个更改需要重启。
在 iSCSI Initiator Properties 窗口中,在 Discovery 标签页
中添加一个目标门户。输入 Ceph iSCSI 网关的 IP 地址或 DNS 名称
和端口
:
在 Targets 选项卡中
,选择目标并点击 Connect
:
在 Connect To Target 窗口中,选择 Enable multi-path 选项
,然后点击 高级 按钮
:
在 Connect using 部分下,选择一个 目标门户 IP
。选择 Enable CHAP login on
,并从 Ceph iSCSI Ansible 客户端凭证部分输入 Name 和 Target secret 值
,然后点 OK
:
重要Windows Server 2016 不接受小于 12 字节的 CHAP secret。
- 对设置 iSCSI 网关时定义的每个目标门户重复步骤 5 和 6。
如果启动器名称与初始设置期间使用的启动器名称不同,请重命名启动器名称。在 iSCSI 启动器属性 窗口中,在 配置 选项卡
中,点击 更改 按钮
来重命名启动器名称。
多路径 IO 设置:
配置 MPIO 负载均衡策略,设置超时和重试选项在 mpclaim 命令中使用 PowerShell。iSCSI 启动器工具配置剩余的选项。
红帽建议将 PDORemovePeriod 选项从 PowerShell 增加到 120 秒。这个值可能需要根据应用程序进行调整。当所有路径都停机且 120 秒过期时,操作系统将启动失败的 IO 请求。
Set-MPIOSetting -NewPDORemovePeriod 120
Set-MPIOSetting -NewPDORemovePeriod 120
- 设置故障切换策略
mpclaim.exe -l -m 1
mpclaim.exe -l -m 1
- 验证故障转移策略
mpclaim -s -m MSDSM-wide Load Balance Policy: Fail Over Only
mpclaim -s -m
MSDSM-wide Load Balance Policy: Fail Over Only
使用 iSCSI 启动器工具,从 Targets 选项卡
点 Devices… 按钮
:
在 Devices 窗口中选择一个磁盘
并点 MPIO… 按钮
:
在 Device Details 窗口中显示到每个目标门户的路径。如果使用
ceph-ansible设置方法,iSCSI 网关将使用 ALUA 告知 iSCSI 启动器将哪些路径和 iSCSI 网关用作主路径。负载均衡策略 Fail Over Only 必须被选择- 从 PowerShell,查看多路径配置
mpclaim -s -d $MPIO_DISK_ID
mpclaim -s -d $MPIO_DISK_ID
+ 将 $MPIO_DISK_ID 替换为适当的磁盘标识符。
将有一个 Active/Optimized 路径,它是拥有 LUN 的 iSCSI 网关节点的路径,并为每个其他 iSCSI 网关节点有一个 Active/Unoptimized 路径。
tuning:
考虑使用以下 registry 设置:
Windows 磁盘超时
键
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Disk
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\DiskCopy to Clipboard Copied! Toggle word wrap Toggle overflow 值
TimeOutValue = 65
TimeOutValue = 65Copy to Clipboard Copied! Toggle word wrap Toggle overflow Microsoft iSCSI Initiator Driver
键
HKEY_LOCAL_MACHINE\\SYSTEM\CurrentControlSet\Control\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}\<Instance_Number>\ParametersHKEY_LOCAL_MACHINE\\SYSTEM\CurrentControlSet\Control\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}\<Instance_Number>\ParametersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 值
LinkDownTime = 25 SRBTimeoutDelta = 15
LinkDownTime = 25 SRBTimeoutDelta = 15Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.4.4. VMware ESX vSphere Web 客户端的 iSCSI 启动器 复制链接链接已复制到粘贴板!
先决条件:
- VMware ESX 6.5 或更高版本使用与 VMFS 6 的虚拟机兼容性 6.5
- 访问 vSphere Web 客户端
-
对 VMware ESX 主机的 root 访问权限,以执行
esxcli命令
iSCSI 发现和多路径设备设置:
禁用
HardwareAcceleratedMove(XCOPY):esxcli system settings advanced set --int-value 0 --option /DataMover/HardwareAcceleratedMove
# esxcli system settings advanced set --int-value 0 --option /DataMover/HardwareAcceleratedMoveCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用 iSCSI 软件。在 Navigator 窗格中点 Storage
。选择 适配器选项卡
。点 Confgure iSCSI
:
验证名称和别名中的启动器名称
。
注意如果启动器名称与初始设置期间使用
gwcli创建客户端时使用的启动器名称不同,或者如果 Ansibleclient_connections:客户端变量中使用的启动器名称不同,请按照以下步骤更改启动器名称。在 VMware ESX 主机中运行这些esxcli命令。获取 iSCSI 软件的适配器名称:
> esxcli iscsi adapter list > Adapter Driver State UID Description > ------- --------- ------ ------------- ---------------------- > vmhba64 iscsi_vmk online iscsi.vmhba64 iSCSI Software Adapter
> esxcli iscsi adapter list > Adapter Driver State UID Description > ------- --------- ------ ------------- ---------------------- > vmhba64 iscsi_vmk online iscsi.vmhba64 iSCSI Software AdapterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置 initiator 名称:
语法
> esxcli iscsi adapter set -A <adaptor_name> -n <initiator_name>
> esxcli iscsi adapter set -A <adaptor_name> -n <initiator_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
> esxcli iscsi adapter set -A vmhba64 -n iqn.1994-05.com.redhat:rh7-client
> esxcli iscsi adapter set -A vmhba64 -n iqn.1994-05.com.redhat:rh7-clientCopy to Clipboard Copied! Toggle word wrap Toggle overflow
配置 CHAP。展开 CHAP 身份验证 部分
。选择"不使用 CHAP,除非目标需要"
。输入初始设置中使用的 CHAP Name 和 Secret
凭证,无论是使用 gwcli auth命令还是 Ansibleclient_connections:凭证变量。验证 Mutual CHAP 验证部分
是否选择了 "Do not use CHAP"。
警告vSphere Web 客户端中有一个错误,最初不使用 CHAP 设置。在 Ceph iSCSI 网关节点上,在内核日志中,您会看到以下错误来指示此错误:
> kernel: CHAP user or password not set for Initiator ACL > kernel: Security negotiation failed. > kernel: iSCSI Login negotiation failed.
> kernel: CHAP user or password not set for Initiator ACL > kernel: Security negotiation failed. > kernel: iSCSI Login negotiation failed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要解决这个问题,请使用
esxcli命令配置 CHAP 设置。authname参数是 vSphere Web 客户端中的 Name :> esxcli iscsi adapter auth chap set --direction=uni --authname=myiscsiusername --secret=myiscsipassword --level=discouraged -A vmhba64
> esxcli iscsi adapter auth chap set --direction=uni --authname=myiscsiusername --secret=myiscsipassword --level=discouraged -A vmhba64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置 iSCSI 设置。扩展 高级设置
。将 RecoveryTimeout 值设置为 25
。
设置发现地址。在 Dynamic target 部分中
,点 Add dynamic target
。在 地址
下,为其中一个 Ceph iSCSI 网关添加 IP 地址。只需要添加一个 IP 地址。最后,单击 保存配置 按钮
。在主界面的 Devices 选项卡中,您将看到 RBD 镜像。
注意使用 ALUA SATP 和 MRU PSP 自动配置 LUN。不能使用其他 SATP 和 PSP。这可以通过
esxcli命令验证:esxcli storage nmp path list -d eui.$DEVICE_ID
esxcli storage nmp path list -d eui.$DEVICE_IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
$DEVICE_ID替换为适当的设备标识符。验证多路径是否已正确设置。
列出设备:
示例
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)
# esxcli storage nmp device list | grep iSCSI Device Display Name: LIO-ORG iSCSI Disk (naa.6001405f8d087846e7b4f0e9e3acd44b) Device Display Name: LIO-ORG iSCSI Disk (naa.6001405057360ba9b4c434daa3c6770c)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从上一步中获取 Ceph iSCSI 磁盘的多路径信息:
示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在示例输出中,每个路径都有一个带有以下部分的 iSCSI/SCSI 名称:
Initiator name =
iqn.2005-03.com.ceph:esx1ISID =00023d000002Target name =iqn.2003-01.com.redhat.iscsi-gw:iscsi-igwTarget port group =2Device id =naa.6001405f8d087846e7b4f0e9e3acd44bactive的Group State值表示这是到 iSCSI 网关的 Active-Optimized 路径。gwcli命令列出active作为 iSCSI 网关所有者。如果active路径进入dead状态,则其余路径将具有未优化的Group State值,它将是故障转移路径。
要匹配其对应 iSCSI 网关的所有路径,请运行以下命令:
esxcli iscsi session connection list
# esxcli iscsi session connection listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将路径名称与
ISID值匹配,RemoteAddress值是自有 iSCSI 网关的 IP 地址。
8.5. 使用 Ansible 升级 Ceph iSCSI 网关 复制链接链接已复制到粘贴板!
可以使用专为滚动升级设计的 Ansible playbook 升级 Red Hat Ceph Storage iSCSI 网关。
先决条件
- 正在运行的 Ceph iSCSI 网关。
- 一个正在运行的 Red Hat Ceph Storage 集群。
流程
-
验证 Ansible 清单文件(
/etc/ansible/hosts)中列出了正确的 iSCSI 网关节点。 运行滚动升级 playbook:
ansible-playbook rolling_update.yml
[admin@ansible ~]$ ansible-playbook rolling_update.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行站点 playbook 来完成升级:
ansible-playbook site.yml --limit iscsigws
[admin@ansible ~]$ ansible-playbook site.yml --limit iscsigwsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.6. 使用命令行界面升级 Ceph iSCSI 网关 复制链接链接已复制到粘贴板!
可以通过一次升级一个 iSCSI 网关,以滚动方式升级 Red Hat Ceph Storage iSCSI 网关。
在升级和重启 Ceph OSD 时,不要升级 iSCSI 网关。等待 OSD 升级完成并且存储集群处于 active+clean 状态。
先决条件
- 正在运行的 Ceph iSCSI 网关。
- 一个正在运行的 Red Hat Ceph Storage 集群。
-
对 iSCSI 网关节点具有
root访问权限.
流程
更新 iSCSI 网关软件包:
yum update ceph-iscsi-config ceph-iscsi-cli
[root@igw ~]# yum update ceph-iscsi-config ceph-iscsi-cliCopy to Clipboard Copied! Toggle word wrap Toggle overflow 停止 iSCSI 网关守护进程:
systemctl stop rbd-target-api systemctl stop rbd-target-gw
[root@igw ~]# systemctl stop rbd-target-api [root@igw ~]# systemctl stop rbd-target-gwCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 iSCSI 网关守护进程是否已完全停止:
systemctl status rbd-target-gw
[root@igw ~]# systemctl status rbd-target-gwCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果
rbd-target-gw服务成功停止,则跳转到第 4 步。 如果
rbd-target-gw服务无法停止,请执行以下步骤:如果
targetcli软件包没有安装,请安装targetcli软件包:yum install targetcli
[root@igw ~]# yum install targetcliCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查现有的目标对象:
targetlci ls
[root@igw ~]# targetlci lsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
o- / ............................................................. [...] o- backstores .................................................... [...] | o- user:rbd ..................................... [Storage Objects: 0] o- iscsi .................................................. [Targets: 0]
o- / ............................................................. [...] o- backstores .................................................... [...] | o- user:rbd ..................................... [Storage Objects: 0] o- iscsi .................................................. [Targets: 0]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
backstores和Storage Objects为空,则 iSCSI 目标已完全关闭,您可以跳过到第 4 步。如果您仍然有目标对象,请运行以下命令强制删除所有目标对象:
targetlci clearconfig confirm=True
[root@igw ~]# targetlci clearconfig confirm=TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告如果多个服务正在使用 iSCSI 目标,请以交互模式运行
targetcli以删除这些特定对象。
-
如果
更新
tcmu-runner软件包:yum update tcmu-runner
[root@igw ~]# yum update tcmu-runnerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 停止
tcmu-runner服务:systemctl stop tcmu-runner
[root@igw ~]# systemctl stop tcmu-runnerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 按照以下顺序重启所有 iSCSI 网关服务:
systemctl start tcmu-runner systemctl start rbd-target-gw systemctl start rbd-target-api
[root@igw ~]# systemctl start tcmu-runner [root@igw ~]# systemctl start rbd-target-gw [root@igw ~]# systemctl start rbd-target-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.7. 监控 iSCSI 网关 复制链接链接已复制到粘贴板!
红帽为 Ceph iSCSI 网关环境提供额外的工具,用于监控导出的 RADOS 块设备(RBD)镜像的性能。
gwtop 工具是一种类似于 top 的工具,显示 RBD 镜像的聚合性能指标,这些指标通过 iSCSI 导出到客户端。指标来源于性能指标域代理 (PMDA)。来自 Linux-IO 目标 (LIO) PMDA 的信息用于使用连接的客户端及其关联的 I/O 指标列出每个导出的 RBD 镜像。
要求:
- 正在运行的 Ceph iSCSI 网关
安装:
以 root 用户身份在 iSCSI 网关节点上执行以下步骤。
启用 Ceph 工具存储库:
subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-rpms
# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 安装
ceph-iscsi-tools软件包:yum install ceph-iscsi-tools
# yum install ceph-iscsi-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 安装性能 co-pilot 软件包:
yum install pcp
# yum install pcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意有关性能 co-pilot 的详情,请查看 Red Hat Enterprise Linux 性能调节指南。
安装 LIO PMDA 软件包:
yum install pcp-pmda-lio
# yum install pcp-pmda-lioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用并启动性能 co-pilot 服务:
systemctl enable pmcd systemctl start pmcd
# systemctl enable pmcd # systemctl start pmcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注册
pcp-pmda-lio代理:cd /var/lib/pcp/pmdas/lio ./Install
cd /var/lib/pcp/pmdas/lio ./InstallCopy to Clipboard Copied! Toggle word wrap Toggle overflow
默认情况下,gwtop 假定 iSCSI 网关配置对象存储在 rbd 池中名为 gateway.conf 的 RADOS 对象中。此配置定义收集性能统计数据时要联系的 iSCSI 网关。这可以通过使用 -g 或 -c 标志来覆盖。如需了解更多详细信息,请参阅 gwtop --help。
LIO 配置决定从性能联合传送到哪一类性能统计数据。当 gwtop 启动时,它会查看 LIO 配置,如果找到用户空间磁盘,则 gwtop 会自动选择 LIO 收集器。
gwtop Outputs 示例:
对于用户支持的存储 (TCMU) 设备:
在 Client 列中,(CON) 表示 iSCSI 启动器 (client) 当前已登录 iSCSI 网关。如果显示 -multi-,则多个客户端映射到单个 RBD 镜像。
不支持 SCSI 持久保留。如果使用集群感知文件系统或不依赖 SCSI 持久保留的集群软件,则支持将多个 iSCSI 启动器映射到 RBD 镜像。例如,支持使用 ATS 的 VMware vSphere 环境,但不支持使用 Microsoft 的集群服务器 (MSCS)。