通过 iSCSI 的 Ceph - 或站在吊床上滑雪

我们当中有不喜欢“职业极端”的人(tsefovodov)吗?

这不太可能——否则我们就不会在这个极其有趣的产品上翻来覆去。

许多参与 Ceph 运营的人都遇到过一种不太常见(或者甚至非常罕见)但有时有需求的情况 - 通过 iSCSI 或 FC 连接 Ceph。 为了什么? 举例来说,将 Ceph 中的映像提交到由于某种原因尚未虚拟化的 Windows 或 Solaris 服务器。 或者是虚拟化的,但使用无法执行 Ceph 的虚拟机管理程序 - 而且据我们所知,这样的虚拟机管理程序有很多。 例如? 嗯,例如,HyperV 或 ESXi,它们都被广泛使用。 如果任务是从 Ceph 向客户机器提供镜像,这将是一项非常令人兴奋的任务。

所以,给定:

  1. 已经运行的 Ceph 集群
  2. 必须通过 iSCSI 提供服务的现有映像
  3. 矿池名称 我的池,图像名称 我的形象

开始?

首先,当我们谈论 FC 或 iSCSI 时,我们有启动器和目标这样的实体。 Target实际上是一个服务器,initiator是一个客户端。 我们的任务是以最小的努力将 Ceph 镜像提交给发起者。 这意味着我们必须扩大目标。 但是在哪里、在什么计算机上?

幸运的是,在 Ceph 集群中,我们至少有一个组件的 IP 地址是固定的,并且配置了 Ceph 最重要的组件之一,该组件就是监视器。 因此,我们在监视器上安装一个 iSCSI 目标(同时安装一个启动器,至少用于测试)。 我在 CentOS 上执行此操作,但该解决方案也适用于任何其他发行版 - 您只需以您的发行版可接受的方式安装软件包即可。

# yum -y install iscsi-initiator-utils targetcli

安装的软件包的用途是什么?

  • 目标cli — Linux 内核中内置的用于管理 SCSI 目标的实用程序
  • iscsi-启动器-utils — 包含用于管理 Linux 内核中内置 iSCSI 启动器的实用程序的软件包

为了通过 iSCSI 向发起者提交映像,有两种事件开发选项 - 使用目标的用户空间后端或将映像连接为操作系统可见的块设备并通过 iSCSI 导出。 我们将采用第二种方式 - 用户空间后端仍处于“实验”状态,还没有准备好用于生产使用。 此外,它还存在一些陷阱,您可以对此进行很多讨论并争论(哦,恐怖!)。

如果我们使用一个稍微稳定且支持周期较长的发行版,那么我们拥有的内核就是一些古老的版本。 例如,在 CentOS7 中为 3.10.*,在 CentOS8 中为 4.19。 我们对至少 5.3(或者更确切地说 5.4)及更新版本的内核感兴趣。 为什么? 因为默认情况下,Ceph 映像启用了一组与旧内核不兼容的选项。 这意味着我们将存储库与我们的发行版的新内核连接起来(例如,对于 CentOS,这是 elrepo),安装新内核并重新启动系统以使用新内核:

  • 连接到为实验选择的显示器
  • 我们根据说明连接 elrepo 存储库 - elrepo.org/tiki/tiki-index.php
  • 安装内核: yum -y --enablerepo=elrepo-kernel install kernel-ml
  • 使用显示器重新启动服务器(我们有三个显示器,对吧?)

将图像作为块设备连接

# rbd map mypool/myimage
/dev/rbd0

剩下的就是配置目标。 在这个例子中,我将在所谓的中配置目标。 演示模式 - 无需身份验证,每个人都可以看到并访问。 在生产环境中,您可能需要配置身份验证 - 但这对于今天的娱乐练习来说有点超出范围。

创建一个名为 disk1 的后端,与文件 /dev/rbd/mypool/myimage 关联。 指定的文件是 udev 守护程序自动创建的到 /dev/rbd0 的符号链接。 我们使用符号链接,因为 rbd 设备的名称可能会根据 Ceph 映像连接到主机的顺序而改变。

创建后端:

# targetcli /backstores/block create disk1 /dev/rbd/mypool/myimage

创建 iSCSI 目标:

# targetcli /iscsi create iqn.2020-01.demo.ceph:mypool

我们将后端作为 LUN 连接到目标:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/luns create /backstores/block/disk1

让我们配置演示模式的目标:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute demo_mode_write_protect=0
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute generate_node_acls=1
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute cache_dynamic_acls=1

保存配置:

# targetcli saveconfig

检查目标是否存在:

# iscsiadm -m discovery -t st -p 127.0.0.1:3260
127.0.0.1:3260,1 iqn.2020-01.demo.ceph:mypool

我们连接目标:

# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] (multiple)
Login to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] successful.

如果一切正确,服务器上将出现一个新磁盘,它看起来像 SCSI 设备,但实际上是来自 Ceph 的映像,可通过 iSCSI 目标访问。 为了避免启动问题,最好从本地启动器中删除连接的磁盘和检测到的目标:

# iscsiadm -m node --logout
# iscsiadm -m discoverydb -o delete -t st -p 127.0.0.1:3260

剩下的就是保留配置,以便图像自动连接,连接后目标分层。 启动目标包括两个步骤 - 连接 RBD 和实际启动目标。

首先,让我们配置 RBD 映像与主机的自动连接。 这是通过将以下行添加到 /etc/ceph/rbdmap 文件来完成的:

# cat /etc/ceph/rbdmap
# RbdDevice Parameters
mypool/myimage id=admin
# systemctl enable rbdmap

恢复目标配置有点复杂 - 我们需要为 systemd 编写一个单元来恢复配置:

# cat /usr/lib/systemd/system/scsi-target.service
[Unit] Description=Start iSCSI target

After=network-online.target rbdmap.service
Before=remote-fs-pre.target
Wants=network-online.target remote-fs-pre.target

[Service] Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/targetcli restoreconfig

[Install] WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable scsi-target

最后的测试是再次重新启动我们的显示器(它现在是 iSCSI 目标)。 需要注意的是,如果我们没有使用命令清除启动器的数据库 iscsiadm -n discoverydb -o 删除... 您最终可能会得到一个无法加载或需要很长时间才能加载的服务器。

还剩下什么?

在我们要发送目标的服务器上配置启动器。

如何保证我们的目标的容错性?

您可以类似地在其他监视器上配置目标并设置多路径(vmware 会理解这一点,甚至可以工作,Hyper-V 不会理解 - 它需要 SCSI 锁)。 由于内核中的 Ceph 客户端不使用缓存,因此这是相当可行的。 或者另一种选择是创建由三个组件组成的集群资源 - 专用目标 IP 地址以及 rbdmap 和 scsi-target 服务,并通过集群工具管理此资源(谁说pacemaker?)

而不是尾声

很明显,这篇文章有点开玩笑 - 但在其中我试图“快速并通过示例”同时考虑几个相当流行的主题 - iSCSI 目标,它可能不一定会导出 Ceph 映像 - 但例如,导出 LVM 卷、使用 iSCSI 启动器的基础知识(如何扫描目标、如何连接到目标、断开连接、从数据库中删除目标条目)、为 systemd 编写自己的单元以及其他一些内容

我希望即使您没有完全重复整个实验,至少本文中的一些内容对您有用。

来源: habr.com

添加评论