在我们中间(cefovodov)是否有那些不喜欢“专业极端”的人?
这不太可能-否则我们不会对这个极其有趣和有趣的产品感到惊讶。
许多参与开发Ceph的人遇到的情况不是太频繁(但很少见),但有时却需要通过iSCSI或FC连接Ceph的情况。 怎么了 好吧,例如,将映像从Ceph上传到尚未虚拟化的Windows或Solaris服务器。 还是虚拟化的,但是通过管理程序,Ceph不知道该如何做,而且据我们所知,它们已经足够了。 例如? 好吧,例如,正在积极使用的HyperV或ESXi。 并且如果出现了将图像从Ceph提交到客户计算机的任务,这将变成一个非常令人兴奋的任务。
因此,鉴于:
- 已经在运行的Ceph集群
- 必须通过iSCSI提交的现有映像
- 池名mypool ,映像名myimage
我们开始了吗
首先,当我们谈论FC或iSCSI时,我们会得到诸如启动器和目标之类的实体。 目标实际上是服务器,发起者是客户端。 我们的任务是以最少的工作量将Ceph图像提交给发起者。 因此,我们必须部署目标。 但是在哪里,在哪台计算机上?
幸运的是,在Ceph集群中,我们至少有一个组件的IP地址是固定的,并且在其上配置了最重要的Ceph组件之一,并且该组件是监视器。 因此,在监视器上,我们设置了iSCSI目标(至少在测试中同时设置了启动器)。 我是在CentOS上完成的,但对于其他任何发行版,该解决方案也都适用-只需按照发行版中可接受的方式放置软件包即可。
# yum -y install iscsi-initiator-utils targetcli
安装的软件包的目的是什么?
- targetcli-用于Linux内核的Linux SCSI目标管理实用程序
- iscsi-initiator-utils-一个包含实用程序的程序包,用于再次控制内置于Linux内核中的iSCSI启动器
为了通过iSCSI向启动器提交映像,有两个用于开发事件的选项-使用目标的用户空间后端或将映像连接为操作系统可见的块设备并通过iSCSI导出。 我们将采用第二种方法-用户空间后端仍处于“实验”状态,尚未准备好进行生产使用。 此外,他还有很多陷阱,您可以谈论很多东西,(争论不休!)争论。
如果我们至少使用稳定的分布并具有较长的支持周期,那么我们就拥有一些古代版本的核心。 例如,在CentOS7上为3.10 *,在CentOS8上为4.19。 而且我们对至少5.3(但5.4)和更高版本的内核感兴趣。 怎么了 因为默认情况下,Ceph中的映像具有一组附加的选项,这些选项与较早的内核不兼容。 因此,我们将存储库与用于发布的新内核连接(例如,对于CentOS,它是elrepo),安装新内核并重新引导系统以使用新内核:
将图像作为块设备连接
# 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 delete清除启动程序库,则服务器可能没有加载或加载了很长时间。
还剩下什么?
在我们要提交目标的服务器上配置启动器。
如何确保目标的弹性?
您可以类似地在其他监视器上配置目标并安排多路径(vmware会理解这一点,甚至可以工作,Hyper-V无法理解-那里需要SCSI锁)。 由于来自内核的Ceph客户端不使用缓存,因此该功能非常有用。 或者另一个选择是创建一个由三个部分组成的群集资源-专用目标IP地址,rbdmap和scsi目标服务,并通过群集工具(谁说起搏器?)来管理该资源。
而不是后记
如您所知,这篇文章有点开玩笑-但我尝试“快速且带有示例”同时考虑几个颇受欢迎的主题-iSCSI目标,它不一定会导出Ceph映像-但例如,导出LVM卷,这是使用iSCSI启动器的基础知识(如何扫描目标,如何连接目标,断开连接,从数据库中删除目标记录),为systemd等编写自己的单元
我希望即使您没有完全重复整个实验,至少本文中的内容对您还是有用的。