在登录失败时故障转移到备用 iSCSI 门户

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/cinder/+spec/iscsi-alternative-portal

本规范建议在附加 iSCSI 卷时,当主 iSCSI 门户不可访问时,添加对备用 iSCSI 门户的故障转移功能。

问题描述

当主 iSCSI 门户因网络故障等原因无法访问时,即使其他门户地址可访问,卷的附加/分离也会失败。为了使 nova-compute 能够回退到备用门户地址,cinder 应该将备用门户地址告知 nova。

用例

提议的变更

在 os-initialize_connection 卷操作 API 返回的 ‘connection_info’ 中添加可选参数 ‘target_alternative_portals’、‘target_alternative_iqns’ 和 ‘target_alternative_luns’,它们代表 iSCSI 门户的备用地址列表以及每个门户对应的 iqn 和 lun。(当地址指向相同的门户时,iqns 和 luns 可以相同。)

当 nova-compute 识别到这些参数时,它将在发现过程中失败时回退到参数指定的备用门户地址/目标/lun。旧的 nova-compute 会忽略这些新参数,因此如果主门户地址可用,它仍然可以正常工作。

请注意,此提案适用于单个 iSCSI 数据路径用例(故障转移)。这意味着,如果主门户和目标失败,则在该路径上已经附加的其他 LUN 将无法访问,直到手动恢复该路径。多数据路径(多路径)用例由另一个规范涵盖。

此更改也必须应用于 cinder/brick/initiator。

备选方案

数据模型影响

后端驱动程序(如果需要)可以将多个门户地址和 iqn 放入卷表的 ‘provider_location’ 字段中。

例如,LVM iSCSI 驱动程序会将地址以以下格式放入,以便将它们作为卷字典传递给目标管理助手

provider_location = ‘<门户 IP>:<端口>;<门户 IP 2>:<端口>,<门户> <iqn>’

例如:

provider_location = ‘10.0.1.2:3260;10.0.2.2:3260,0 iqn.2010-10.org.openstack

volume-12345678-abcd-1234-5678-12345678abcd’

(请注意,‘volume-12345678…’ 是目标的名称,而不是卷;在 LVM iSCSI 驱动程序中它们是相同的。)

其他后端驱动程序可以将多个门户地址和 iqn 添加到 cinder.conf 中,或者可以从阵列中动态检索它们。

REST API 影响

‘os-initialize_connection’ 卷操作 API 响应可能包含附加参数 ‘target_alternative_portals’ 和 ‘target_alternative_iqns’,它们包含门户 IP 地址:端口对列表、与每个门户地址对应的备用 iqn 和 lun 列表。例如

{"connection_info": {"driver_volume_type": "iscsi", ...
                     "data": {"target_portal": "10.0.1.2:3260",
                              "target_alternative_portals": [
                                               "10.0.2.2:3260",
                                               "10.0.3.2:3260"],
                              "target_iqn": "iqn.2014-2.org.example:vol1-1",
                              "target_alternative_iqns": [
                                            "iqn.2014-2.org.example:vol1-2",
                                            "iqn.2014-2.org.example:vol1-3"],
                              "target_lun": 1,
                              "target_alternative_luns": [2, 3],
                              ...}}}

在这种情况下,“iqn.2014-2.org.example:vol1-1”,lun=1 对应于门户 “10.0.1.2:3260”, “iqn.2014-2.org.example:vol1-2”,lun=2 对应于门户 “10.0.2.2:3260”,以及 “iqn.2014-2.org.example:vol1-3”,lun=3 对应于门户 “10.0.3.2:3260”。

在某些后端中,门户可能具有相同目标和/或 lun。

后端驱动程序负责指定备用门户的顺序。Nova 和 Cinder brick 库应首先尝试连接到主门户和目标。如果失败,它应尝试按照提供的列表顺序连接到备用门户和目标。例如,如果后端驱动程序希望为每个 LUN 对门户进行轮询,则驱动程序可以返回不同的门户地址作为相同目标中 LUN 的主地址。

安全影响

请注意,如果在 connection_info 中提供了任何 CHAP 凭据,则必须将它们应用于所有 target_portals。

通知影响

其他最终用户影响

性能影响

其他部署者影响

后端驱动程序可能具有额外的设置来启用备用 iSCSI 门户。例如,要在 iSCSI LVM 驱动程序中利用此功能,我们需要指定 cinder-volume 节点上运行 iSCSI 目标的备用 IP 地址列表。

开发人员影响

为了启用多个 iSCSI 门户功能,后端驱动程序必须更改 initialize_connection 方法的实现,以返回附加参数 ‘target_alternative_portals’、‘target_alternative_iqns’ 和 ‘target_alternative_luns’。

实现

负责人

主要负责人

tsekiyama

工作项

  • 在 LVM iSCSI 驱动程序中实现此功能作为示例

  • 修改 Nova 和 Cinder brick 库以故障转移到备用门户

依赖项

测试

  • 应为支持此功能的驱动程序添加单元测试,以便 initialize_connection 将返回正确的 connection_info。

  • 为了在 tempest 中测试此功能,必须将多个地址分配给测试环境,以便访问备用门户地址。在 LVM iSCSI 驱动程序中实现将对测试有用。

文档影响

应添加一个部分来描述此功能。

如果驱动程序需要此功能的其他设置,则应添加其文档。

参考资料