重构 ISCSIDriver 以支持除 TCP 之外的其他 iSCSI 传输

https://blueprints.launchpad.net/nova/+spec/add-open-iscsi-transport-support

目前 openstack 中的 open-iscsi 不允许使用卸载 iSCSI 传输(cxgb4i, qla4xx, bnx2i 等)或其他软件 iSCSI 传输(如 iser)。此蓝图旨在添加对此的支持

问题描述

open-iscsi 具有硬件 iSCSI 传输支持。interface 参数指定用于该操作的硬件 iSCSI 接口。目前为 open-iscsi 提供硬件接口的任何硬件供应商都无法在 openstack 中使用它们,因为接口 (iface) 参数当前在 iSCSI 驱动程序中不受支持。

虽然这项工作由 Chelsio 进行,但目前的方法是使其足够通用,以支持所有受支持的 HBA(主机总线适配器)。

使用此类 iSCSI 硬件传输需要提供相应的接口文件(称为 iface),可以通过 iscsiadm 自动生成,但需要正确性检查,或者也可以根据要使用的 IP 地址、硬件地址和传输名称三元组动态生成。iface 格式本身是通用的,不使用任何专有字段,无论使用何种传输。

这还解决了 nova 中当前传输支持的第二个问题,即 iSER 驱动程序。它当前是普通 open-iscsi 驱动程序代码的完整副本,并额外设置了一个传输参数为“iser”

这将允许通过 iSCSI 驱动程序直接使用 iSER,尽管此规范的目的不是弃用 iSER 驱动程序,并且可能首先禁用 iSER(也因为 iSER 需要目标支持,而硬件传输不需要)。之前的相关规范如下

https://review.openstack.org/#/c/86637/

https://blueprints.launchpad.net/nova/+spec/add-transport-support-to-iscsi

https://blueprints.launchpad.net/cinder/+spec/add-transport-support-to-iscsi

预计后续蓝图将弃用单独的 iSER 驱动程序,并将功能整合到使用传输支持中。

用例

用户在其系统中安装了支持硬件 iSCSI 的 HBA。使用 open-iscsi 的硬件传输支持可以实现更高的 iSCSI 通信速度和更低的 CPU 使用率。

open-iscsi 当前支持的传输包括

  • Chelsio:cxgb3i, cxgb4i

  • QLogic:qla4xxx, bnx2i(以前是 Broadcom)

  • Emulex:be2iscsi, ocs

  • Mellanox 及其他:iser

使用任何这些传输都需要系统中存在适当的硬件,但 iSER 在一开始将不会被支持。

项目优先级

提议的变更

在发起端,使用软件 iSCSI 和硬件 iSCSI 传输之间的唯一区别是 interface 标志(–interface=[iface])

例如:“iscsiadm -m discovery -t st -p ip:port -I <iface 文件>”

iface 文件可以自动为系统上所有受 open-iscsi 支持的硬件生成,方法是使用“iscsiadm -m iface”。iface 文件名的默认格式为 <transport_name.hw_address>

默认 iface 名称为“default”。不使用 -I 参数(这是 open-iscsi 当前在 nova 中使用的默认方式)与指定

“iscsiadm -m discovery -t st -p ip:port -I default” 相同

需要进行的更改是

  • 一个新参数,用于指定在执行 iscsi 发现/登录时应使用哪个传输,如果操作不成功或未提供参数(-I default),则回退到 TCP

  • 另一种(但更复杂)方法可能是从源 IP 地址推断 iface 名称。IP 地址可用于确定 hwaddress 和 PCI 设备 ID。PCI 设备 ID 提供传输名称,iface 名称的格式为 <transportname>.<hwaddress>

  • 可选/未调研:在未来,可能值得研究是否可以将网络服务集成到 open-iscsi 传输中提供网络接口,但这超出了此规范的范围。

其他相关更改

  • 在尝试使用所述传输之前,验证硬件是否存在。实现此的最佳方法是检查 PCI 供应商 ID/MAC 地址,如果 nova 愿意接受此类代码。

备选方案

使用 iscsi-targets 的手动发现,并在进行发现时提供 -I 参数。传输名称写入 open-iscsi 生成的记录中,但是这不能保证将使用硬件传输,因为这可能会根据 CLI 参数的构造方式被覆盖。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

iSCSI 性能得到显著提高,驱动程序中没有添加额外的命令,除了可能生成默认 iface 文件:“iscsiadm -m iface”

其他部署者影响

这可以用作最终替换和弃用 LibvirtISERVolumeDriver 的垫脚石,因为可以使用“iscsiadm -I iser”来实现 iSER 支持,而无需单独的驱动程序。

开发人员影响

实现

负责人

主要负责人

anish7 <anish@chelsio.com>

iSER 驱动程序弃用 & 后续规范 Assignee

工作项

  • 将 -I 参数添加到 ‘nova/virt/libvirt/volume.py’ 中的所有 iscsiadm 登录/发现命令

  • 将传输参数添加到配置选项,默认值为软件 iscsi,即 ‘-I default’

依赖项

没有特别的。但是,如果未配置传输,则使用传输所需的最低信息是 IP、传输名称和硬件地址的三元组。具有此功能的自动配置传输将是一个不错的选择。

测试

当前的 iSCSI 测试将正常工作。将在 Chelsio 硬件以及可以获得的任何其他支持传输硬件上进行测试。

文档影响

需要为新的传输参数编写相关文档。

参考资料