Mellanox-Neutron-Train-InfiniBand
概述
在本节中,我们将讨论配置和部署要求,以允许虚拟机在 OpenStack 云中的 Infiniband 织构上进行虚拟机之间的连接。Mellanox ML2 机制驱动程序的概述可以在 此处找到。
支持的网络类型是 VLAN,通过为每个网络配置分区密钥 (PKEY) 来实现分段,其概念类似于 VLAN。
先决条件
- CentOS 7.6 / Ubuntu 18.04 或更高版本
- Mellanox ConnectX® 系列设备
ConnectX®-3/ConnectX®-3 PRO ConnectX®-4/ConnectX®-4Lx ConnectX®-5 ConnectX®-6
- 驱动程序:Mellanox OFED 4.6-1.0.1.1 或更高版本
- 一个正在运行的 OpenStack 环境已安装 (RDO Manager 或 Packstack)。
- SR-IOV 在所有计算节点上启用。
- 软件包 iproute2 安装在所有计算节点上
- Mellanox UFM 大于 5.9.5(如果 mlnx_sdn_assist 用于 PKEY 配置)
InfiniBand 网络
Infiniband 网络依赖于一个软件实体来管理网络。该实体被称为子网管理器或 SM。子网管理器可以在专用节点上运行,也可以作为控制器节点的一部分运行,本文档假定前者。如前所述,通过 SM 配置的 PKEY 实现分段。
SM 节点
OpenSM 是 Infiniband SM 的常见实现。
OpenSM 可以通过两种方式配置
使用 mlnx_sdn_assist 机制驱动程序配置 OpenSM
SDN 机制驱动程序允许 OpenSM 动态地为 IB 网络分配 PK。有关将 SDN 机制驱动程序与 NEO一起使用的更多详细信息可以在 此处找到。
手动 OpenSM 配置
对于开发和功能评估过程,可以禁用 mlnx_sdn_assist 与网络管理端点的同步,并进行带外配置。
安装随 Mellanox OFED 4.6-1.0.1.1 或更高版本捆绑在一起的 OpenSM
注意:要创建 opensm 配置文件,请运行
# opensm --create-config /etc/opensm/opensm.conf
要禁用 mlnx_sdn_assist 与 SDN 的同步,请在 /etc/neutron/plugins/ml2/ml2_conf.ini 中设置以下配置选项
[sdn] enable_sync=false
对于 ConnectX®-3/ConnectX®-3Pro,请使用以下配置
更改 /etc/opensm/opensm.conf 中的以下内容
allow_both_pkeys TRUE
分区成员配置
在 Infiniband 网络中,网络分段是通过分区实现的(大致相当于以太网 VLAN)。每个分区都有自己的密钥(15 位分区密钥)。partitions.conf 文件包含系统中所有网络端点的分区成员配置。
要求每个 PKEY 拥有所有 GUID 作为成员。
OpenStack 中分配给网络的分割 ID 与转换为 PKEY 之间存在 1:1 的映射(例如,分割 ID 10 转换为 PKEY 10)
示例1
以下配置支持 VLAN 3、4、5 上的 3 个网络。
management=0x7fff,ipoib, defmember=full : ALL, ALL_SWITCHES=full,SELF=full; vlan3=0x3, ipoib, defmember=full : ALL; vlan4=0x4, ipoib, defmember=full : ALL; vlan5=0x5, ipoib, defmember=full : ALL; untagged=0xfff, ipoib, defmember=full : ALL; # Required for port cleanup
对于 ConnectX®-4 或更新版本,请使用以下配置
更改 /etc/opensm/opensm.conf 中的以下内容
virt_enabled 2
分区成员配置
在 Infiniband 网络中,网络分段是通过分区实现的(大致相当于以太网 VLAN)。每个分区都有自己的密钥(15 位分区密钥)。partitions.conf 文件包含系统中所有网络端点的分区成员配置。
需要遵循以下准则才能允许连接
对于每个 PKEY,都需要
- OpenSM PF(物理功能 IB 设备)GUID 是分区的成员。
- L3 和 DHCP PF GUID 是分区的成员。
- VF GUID 是分区的成员(相关 VM)。
OpenStack 中分配给网络的分割 ID 与转换为 PKEY 之间存在 1:1 的映射(例如,分割 ID 10 转换为 PKEY 10)
示例1
以下配置对应于一个 VLAN 网络(vlan 3)和两个 VM 以及一个 DHCP 代理
management=0x7fff,ipoib, defmember=full : ALL, ALL_SWITCHES=full,SELF=full; vlan3_vm1=0x3, indx0, ipoib, defmember=full : 0xfa163e0000c0851b; vlan3_vm2=0x3, indx0, ipoib, defmember=full : 0xfa163e0000df0519; vlan3_l3_dhcp_services=0x3, ipoib, defmember=full : 0xe41d2d030061f5fa; vlan3_sm=0x3, ipoib, defmember=full : SELF;
逐行查看
- 使所有成员成为默认(管理)pkey
- VM1 端口 guid(VF)是具有 pkey 3 的网络的成员
- VM2 端口 guid(VF)是具有 pkey 3 的网络的成员
- L3/DHCP 代理 PF guid 是具有 pkey3 的网络的成员
- 子网管理器是具有 pkey3 的网络的成员
示例 2
以下配置对应于两个 VLAN 网络(vlan 3、vlan 5)和每个网络上的一个 VM 以及一个 DHCP 和 L3 代理
management=0x7fff,ipoib, defmember=full : ALL, ALL_SWITCHES=full,SELF=full; vlan3_vm1=0x3, indx0, ipoib, defmember=full : 0xfa163e0000c0851b; vlan5_vm2=0x5, indx0, ipoib, defmember=full : 0xfa163e0000df0519; vlan3_l3_dhcp_services=0x3, ipoib, defmember=full : 0xe41d2d030061f5fa; vlan5_l3_dhcp_services=0x5, ipoib, defmember=full : 0xe41d2d030061f5fa; vlan3_sm=0x3, ipoib, defmember=full : SELF; vlan5_sm=0x5, ipoib, defmember=full : SELF;
逐行查看
- 使所有成员成为默认(管理)pkey
- VM1 端口 guid(VF)是具有 pkey 3 的网络的成员
- VM2 端口 guid(VF)是具有 pkey 5 的网络的成员
- L3/DHCP 代理 PF guid 是具有 pkey3 的网络的成员
- L3/DHCP 代理 PF guid 是具有 pkey5 的网络的成员
- 子网管理器是具有 pkey3 的网络的成员
- 子网管理器是具有 pkey5 的网络的成员
重启 OpenSM
更新 opensm.conf 和 partitions.conf 后,重启 opensm 服务以加载配置
# systemctl restart opensmd.service
部署
部署假定存在两个物理网络
- 默认 - 以太网网络
- ibphysnet - Infiniband 网络
控制器节点
要配置控制器节点
1. 安装 python-networking-mlnx 包
Neutron 服务器
1. 确保 ML2 是当前的 Neutron 插件,方法是检查 /etc/neutron/neutron.conf 中的 core_plugin 参数
core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin
2. 通过添加以下内容修改 /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2] type_drivers = vlan,flat tenant_network_types = vlan mechanism_drivers = mlnx_sdn_assist,mlnx_infiniband [ml2_type_vlan] network_vlan_ranges = default:1:10 [sdn] bind_normal_ports = true bind_normal_ports_physnets = ibphysnet
注意:如果部署包含以太网织构,请添加相关的机制驱动程序,例如
mechanism_drivers = mlnx_sdn_assist,mlnx_infiniband,openvswitch
3. 启动(或重启)Neutron 服务器
# systemctl restart neutron-server.service
Nova Scheduler
启用 PciPassthroughFilter,修改 /etc/nova/nova.conf
scheduler_available_filters = nova.scheduler.filters.all_filters scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, PciPassthroughFilter, NUMATopologyFilter
网络节点
- 安装 python-networking-mlnx 包并配置 DHCP 和 L3 代理
DHCP 代理
1. 按照以下方式修改 /etc/neutron/dhcp_agent.ini
dhcp_broadcast_reply = True interface_driver = multi multi_interface_driver_mappings = default:openvswitch,ibphysnet:ipoib ipoib_physical_interface = ib2
注意:multi_interface_driver_mappings 包含 physnet 与该 physnet 要使用的所需接口驱动程序之间的映射。在上面的示例中,openvswitch 用于 default physnet,而 ipoib 用于 ibphysnet。
2. 重启 DHCP 代理
# systemctl restart neutron-dhcp-agent.service
L3 代理
1. 按照以下方式修改 /etc/neutron/l3_agent.ini
interface_driver = multi multi_interface_driver_mappings = default:openvswitch,ibphysnet:ipoib ipoib_physical_interface = ib2
注意:multi_interface_driver_mappings 包含 physnet 与该 physnet 要使用的所需接口驱动程序之间的映射。
in the example above, openvswitch is used for the default physnet and ipoib is used for ibphysnet.
2. 重启 L3 代理
# systemctl restart neutron-l3-agent.service
计算节点
要配置计算节点
- 安装 python-networking-mlnx 包
对于 ConnectX®-3/ConnectX®-3Pro,请执行以下步骤
1. 创建文件 /etc/modprobe.d/mlx4_ib.conf 并添加以下内容
options mlx4_ib sm_guid_assign=0
2. 重启驱动程序
# /etc/init.d/openibd restart
Nova Compute
Nova-compute 需要知道允许传递到 VM 的 PCI 设备。 此外,对于 SRIOV PCI 设备,它需要知道 VF 属于哪个物理网络。 这通过 /etc/nova/nova.conf 中默认部分下的 pci_passthrough_whitelist 参数来完成。 例如,如果我们要通过其 PCI 地址白名单和标记 VF,我们将使用以下设置:[pci] passthrough_whitelist = {"address":"*:0a:00.*","physical_network":"default"} 这会将地址包含 ':0a:00.' 的任何 VF 关联到物理网络默认。
1. 将 pci passthrough_whitelist 添加到 /etc/nova/nova.conf
2. 重新启动 Nova
# systemctl restart openstack-nova-compute
Neutron MLNX Agent
1. 运行
# systemctl enable neutron-mlnx-agent.service
2. 运行
# systemctl daemon-reload
3. 在文件 /etc/neutron/plugins/ml2/ml2_conf.ini 中,应将 tenant_network_type 和 network_vlan_ranges 参数配置为在控制器节点中一样。此外,需要应用以下代理特定配置
[eswitch] physical_interface_mappings = ibphysnet:<ib_interface>(for example default:ib0)
4. 修改文件 /etc/neutron/plugins/ml2/eswitchd.conf,如下所示
fabrics = ibphysnet:<ib_interface> (for example default:ib0)
5. 启动 eswitchd
# systemctl enable eswitchd.service # systemctl start eswitchd.service
6. 启动 Neutron agent
# systemctl restart neutron-mlnx-agent
限制
当前,部署限制为 127 个分段网络。创建的额外网络将无法获得 DHCP 和路由服务。这是由于内核限制,即 PF 网卡不能成为超过 128 个 PKEY 的成员。将来将解决此问题。
已知问题和故障排除
有关已知问题和故障排除选项,请参阅 Mellanox OpenStack 故障排除
问题:所有节点(控制器/计算)上缺少 zmq 包解决方案
# wget https://bootstrap.pypa.io/get-pip.py # sudo python get-pip.py # sudo pip install pyzmq