此产品的文档集力求使用非歧视性语言。在本文档集中,非歧视性语言是指不隐含针对年龄、残障、性别、种族身份、族群身份、性取向、社会经济地位和交叉性的歧视的语言。由于产品软件的用户界面中使用的硬编码语言、基于 RFP 文档使用的语言或引用的第三方产品使用的语言,文档中可能无法确保完全使用非歧视性语言。 深入了解思科如何使用包容性语言。
思科采用人工翻译与机器翻译相结合的方式将此文档翻译成不同语言,希望全球的用户都能通过各自的语言得到支持性的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 Cisco Systems, Inc. 对于翻译的准确性不承担任何责任,并建议您总是参考英文原始文档(已提供链接)。
本文档介绍使用SR-IOV和Active-Backup绑定在OpenStack Cisco Virtualized Infrastructure Manager(CVIM)上逐步部署CPNR。
Cisco 建议您了解以下主题:
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解任何命令的潜在影响
在当前网络环境中,虚拟网络功能(VNF)在实现灵活、可扩展且高效的网络服务方面发挥着关键作用。对于需要高性能网络连接的VNF,SR-IOV是一种常用的技术。SR-IOV允许VNF绕过虚拟机监控程序虚拟交换机并直接访问物理网络接口控制器(NIC)资源,从而减少延迟并提高吞吐量。
在继续部署之前,请确保满足这些前提条件。
Intel XL710和E810CQDA2 NIC卡通常用于高性能SR-IOV网络。要验证主机上的NIC卡型号,请参阅以下步骤:
执行以下命令列出与网络控制器相关的外围组件互联(PCI)设备:
lspci | grep -i ethernet
输出示例:
81:00.0 Ethernet controller: Intel Corporation Ethernet Controller XL710 for 40GbE QSFP+ (rev 02)
82:00.0 Ethernet controller: Intel Corporation Ethernet Controller E810-C for QSFP (rev 03)
如果网卡是Intel XL710,您可以在输出中看到以太网控制器XL710。
如果网卡是Intel E810CQDA2,您可以看到输出的是以太网控制器E810-Cin。
要检查正在使用的网卡驱动程序,请运行:
ethtool -i
XL710的输出示例:
driver: i40e
version: 2.13.10
E810CQDA2的输出示例:
driver: ice
version: 1.7.12
确保驱动程序版本与OpenStack和Linux分发版的兼容性矩阵相匹配。
确保在服务器BIOS/UEFI中启用SR-IOV。
必须启用Intel VT-d或AMD-Vi才能实现PCI直通和SR-IOV功能。
确保安装和配置了OpenStack服务,如Nova、Neutron、Glance和Keystone。
Neutron必须同时支持用于协调/管理网络的Openvswitch(OVS)和用于应用/服务网络的SR-IOV。
计算节点必须配置为支持SR-IOV,在NIC上创建虚拟功能(VF)。
CPNR VNF映像必须支持SR-IOV接口并包含必需的驱动程序。
确保CPNR VNF映像在OpenStack Glance中可用。
确保访问OpenStack CLI以创建网络、风格和启动VNF。
在Linux主机和VNF内配置网络的Root或管理权限。
斯廖夫
以下是思科弹性服务控制器(ESC)XML示例,演示使用SR-IOV网络(使用type>direct</type>)为名为test-tenant的租户和名为sriov-vm-1的VM部署虚拟机(VM)。这包括多个接口,包括SR-IOV(直接)接口:
test-tenant
true
false
sriov-vm-deployment
sriov-vm-1-group
vim1
default
sriov-image
custom-flavor
300
30
REBOOT_ONLY
0
mgmt-net
192.168.10.101
1
direct
sriov-net-1
0
sriov-subnet-1
10.10.10.10
2
direct
sriov-net-2
0
sriov-subnet-2
10.10.20.10
1
1
false
--user-data
file://tmp/init/sriov-vm-1.cfg
type>direct</type>在<interface>下为该NIC启用SR-IOV(PCI直通)。
每个SR-IOV接口都有自己的网络和子网。
您可以根据需要在<addresses>中关联IPv4/IPv6。
在Cisco ESC XML上传递的Day0文件示例:
Content-Type: multipart/mixed; boundary="===============2678395050260980330=="
MIME-Version: 1.0`
--===============2678395050260980330==
MIME-Version: 1.0
Content-Type: text/cloud-boothook; charset="us-ascii"
#cloud-boothook
#!/bin/bash
if [ ! -f /etc/cloud/cloud.cfg.orig ]; then
cp /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg.orig
cp /etc/cloud/cloud.cfg.norootpasswd /etc/cloud/cloud.cfg
fi
--===============2678395050260980330==
MIME-Version: 1.0
Content-Type: text/cloud-config; charset="us-ascii"
#cloud-config
hostname: cpnr
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC7pf8gvOWH/Zv8iAlTv6LWEiPGA3B6t96G6LwTHF6iXOqQxyIUkg8IkqZ6wNwxsDV8DYESOzFGp//aXO6wZDtoawMExe9sNEx0qVOt/ueP3IYQ8731fNJwFtWQsCQTM7VQjpcg5/d6eMxQ8zvmiIYo2huwfclE+zLdihjL/Y6v4HK760u/DQ+OaEIgqTgrwePJK5Db/gMDf+oXI9KvNxDb2vtxzroX0APEnZ9JX+Ic0JGWTkD4smMkTdWsjaqDYXqW6SUsyCc4Bf9tHL5Irr1AgUR4hEbLnbk6NlIqWrgVeI5CQVMMFpWqV0o2hyDz2rMA7tbBeYzD/ynslQAerU7DmBRb1FDVh79+JeaCNIM8EpwbCUKHT6CQAjPK8cYBieO1yEHKjHyFTsZgpvdi4rVMP+Qsvab+J5RPPcJeKj7o8KIrtyyESXbLNcZv1uGwZ8nLZKfZQSJP04HUkRKoQJ/JoMvMurEKG/cJ1VtocV4AJiRHj+367D3uzrKd6eHYlM9oD+zpPeJ1P1J2TDPUp2K7GcKCrItn9blSGo/n/+gYBO793QjSdkmc/Ag4TEVhUfG17l0WlSvAw4L0csMlYBAGGqKAUEEx3BJGYNJ851bj23m6JBe83OVWGRWrDIIE+G14/tx8qYXDaFxFUFPb2zj+gmDXq80hYpv++/yFtTocbw== cpnr@INVITN14SLM1BULD01CO
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDAmkQGCZUrYqkZ0C0J9t7mF9La9zYOqfzzFkk1wWtPga+aANOaFgjqbjj+VlBdd3zJy1p6BMWZhaZIcOh0+knCisJArcHM3HlurQZXO45zHtBcm7tB1FQ0W1HI9GbvJ+IPIe7kpPme/socd5ytTx0ZkYtlcRDDZuxTwYY4P4/vpnzXuwPS2dfcfQscubj6MkSlx4JHhc/hkDsmtJUipkWEungE/UsldjQzkj8oJorymYHQXE/czNxwzCGizK1YinhebeHFcmHd6Jcqd5oZZWnmkGKGeW6o0ddSFI5NmwzHd5RzwjztU2nqmiyOA8mu7YkCm6X82uhACwQlfY0pGRpTVkIhlf+tKDwKQRuwpcbR1ZUHmli0zi5QZtbzc31aLNlUPpR21BptS4GSfbKJaMOaDUClfe8rGk+9GCgm6wnZiT+SMa4/wEA9NILlwobrwHxVsb/kFlFKXg0aPkdvmqWPNcd09vF50enrs0aXFsqCyl6CPMJpZtGAgckvX8iU2bCJkxzD9F4rAu2D/FNb8KG5cbw7uptiwB4yoek6Q36NyxHYYJyOGiV4oQJ02T9MRPkvjLf7ASx9HA25nG+J4CZXWkuV7XYX1N5DFvOg/kwA7xMPyNgTEkblTRpIcfXU2PCWYSZcn1vYmsazf2uVCY+mjfLcvi85c/1mLnUGikiovQ== admin@invitn14slm1escx01co
runcmd:
- /usr/sbin/useradd FMLVL1 -d /home/FMLVL1 -s /bin/bash -g users; (/bin/echo changeme; /bin/echo changeme) | /usr/bin/passwd FMLVL1
- nmcli con add type ethernet con-name eth0 ifname eth0 ip4 10.xx.xx.xx/24
- nmcli con add type ethernet con-name eth1 ifname eth1 ip4 172.xx.xx.xx/23
- nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=1000,fail_over_mac=1" ipv4.addresses 'xx.xx.xx.xx/29' ipv4.gateway 'xx.xx.xx.xx' ipv4.method manual ipv6.addresses '2402:xxxx:xx:0025::5/64' ipv6.gateway '2402:xxxx:xx:0025::1' ipv6.method manual
- nmcli connection add type ethernet ifname ens6 master bond0
- nmcli connection add type ethernet ifname ens7 master bond0
- nmcli con up eth0
- nmcli con up eth1
- nmcli con up bond-slave-ens6
- nmcli con up bond-slave-ens7
- nmcli con down bond0
- nmcli con up bond0
- nmcli connection reload
- hostnamectl set-hostname CPNRDNS01CO
--===============2678395050260980330==
CPNR是重要的虚拟网络功能(VNF),为企业和服务提供商网络提供IP地址管理(IPAM)、DHCP和域名服务器(DNS)服务。在OpenStack中将CPNR部署为VNF需要仔细规划,特别是在利用SR-IOV端口、跨NUMA配置和Active-Backup绑定接口以实现冗余和性能时。
本文解释在OpenStack上部署CPNR VNF的逐步过程。此命令包括:
跨NUMA认知:
主用 — 备用绑定:
OpenStack网络:
NUMA是一种内存架构,其中每个CPU(及其本地内存和设备)分组为一个NUMA节点。在OpenStack中,可感知NUMA的位置可确保VNF被优化分配到同一NUMA节点上的资源,以最大程度地减少延迟并最大限度地提高性能。
SR-IOV NIC为NUMA-Local:
单NUMA模式限制:
CPNR VNF需要访问:
在此部署中,CPNR VNF需要从NUMA 0(sriov0)和NUMA 1(sriov1)访问SR-IOV NIC,以提供冗余和高可用性。为了实现这一目标:
Contrack是Linux内核功能,用于跟踪网络连接,尤其是网络地址转换(NAT)和防火墙规则。对于OpenStack中基于OVS的端口,conntrack用于管理连接状态和实施安全组规则。
Conntrack表:
默认限制:
OVS端口的影响:
增大跟踪表大小:
sysctl net.netfilter.nf_conntrack_max
sysctl -w net.netfilter.nf_conntrack_max=262144
echo "net.netfilter.nf_conntrack_max=262144" >> /etc/sysctl.conf
监控连接使用情况:
检查conntrack统计信息:cat /proc/sys/net/netfilter/nf_conntrack_count
优化安全组规则:
减少应用于OVS端口的规则数量,以最大程度减少控制跟踪开销。SR-IOV端口绕过OVS数据路径和Linux内核功能,如contrack。这样可以完全消除连接跟踪开销。
与OVS端口不同,OVS端口受控制跟踪表大小(nf_conntrack_max)的限制,SR-IOV端口可以处理几乎无限数量的连接。
通过将数据包处理卸载到NIC硬件,SR-IOV端口消除了基于软件的连接处理带来的延迟。
Active-Backup绑定模式由于其简单性、容错性以及SR-IOV接口的兼容性,特别适合此部署。原因如下:
Active-Backup模式独立于底层物理交换机或硬件运行。故障切换逻辑完全驻留在Linux内核中,使其具有高度便携性和通用性。
SR-IOV VF绑定到特定物理NIC和NUMA节点。通过使用主用 — 备用模式,您可以将来自不同NUMA节点的VF合并到单个逻辑绑定接口(bond0)。 这可确保高可用性,同时有效利用NUMA资源。
Active-Backup模式是Linux绑定中最简单、使用最广泛的模式之一。它旨在提供高可用性,从而确保即使绑定接口之一发生故障流量也能继续无缝流。这深入说明了活动备份模式的工作方式、主要特性和优势。
Linux中的bond interface将两个或多个网络接口合并为一个逻辑接口。此逻辑接口称为绑定(例如bond0),用于提供:
在Active-Backup模式下,在任何指定时间都仅使用一个接口(称为active interface)来传输和接收流量。其他接口仍处于standby模式。如果主用接口发生故障,其中一个备用接口将升级为active状态,流量将自动重新路由到新的主用接口。
单个活动接口:
自动故障切换:
故障恢复支持:
故障接口恢复后,根据绑定配置,它可以自动再次变为活动状态(如果已进行配置)或保持备用模式。无交换机端要求:
监控:
数连续
监控所有成员接口的运行状况。活动接口:
监控:
活动接口上的链路故障:
如果主用接口(eth2)发生故障(例如,电缆未插好、NIC硬件故障或链路断开),绑定将使用微型ARP监控立即检测该故障。自动故障切换:
故障转移及时性:
故障切换过程几乎是瞬时的(通常在几毫秒内,具体取决于最小间隔)。故障接口恢复:
流量连续性:
回切是无缝的,确保不会中断持续流量。Active-Backup模式尤其适用于SR-IOV接口,因为:
例如:
CPNR VNF需要以下四个网络:
分步部署:
协调网络:
openstack network create --provider-network-type vxlan orchestration-network
管理网络:
openstack network create --provider-network-type vxlan management-network
协调子网:
openstack subnet create --network orchestration-network \
--subnet-range 192.168.100.0/24 orchestration-subnet
管理子网:
openstack subnet create --network management-network \
--subnet-range 10.10.10.0/24 management-subnet
SR-IOV网络1:
openstack network create --provider-network-type vlan \
--provider-physical-network sriov0 --provider-segment 101 sriov-network-1
SR-IOV网络2:
openstack network create --provider-network-type vlan \
--provider-physical-network sriov1 --provider-segment 102 sriov-network-2
为了确保VNF可以从两个NUMA节点访问SR-IOV NIC,请创建具有跨NUMA支持的风格:
openstack flavor create --ram 8192 --vcpus 4 --disk 40 cross-numa-flavor
设置NUMA特定属性:
openstack flavor set cross-numa-flavor \
--property hw:numa_nodes=2 \
--property hw:cpu_policy=dedicated \
--property hw:mem_page_size=large
启动VNF后,为VNF上的SR-IOV端口(eth2和eth3)配置绑定接口。
在Active-Backup模式下创建绑定接口(bond0):
vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
ONBOOT=yes
BONDING_OPTS="mode=active-backup miimon=100"
IPADDR=172.16.1.10
NETMASK=255.255.255.0
GATEWAY=172.16.1.1
eth2:
vi /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
ONBOOT=yes
MASTER=bond0
SLAVE=yes
eth3:
vi /etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
ONBOOT=yes
MASTER=bond0
SLAVE=yes
重新启动网络服务以应用配置:
systemctl restart network
部署VNF后,使用以下步骤验证其功能:
检查VNF实例是否处于活动状态:
openstack server show cpnr-instance
确保状态为ACTIVE。
Ping 测试:验证VNF是否可以通过所有网络通信:
ping
ping
绑定接口:
确认bond0处于活动状态:
cat /proc/net/bonding/bond0
查找:
确保VNF使用来自两个NUMA节点的资源:
nova show --human | grep numa
监控和故障排除:使用工具如keetcpdumpandeshttoolto monitor the SR-IOV interfaces。
安全:小心管理对物理网络的访问,并在租户之间实施严格的隔离。
扩展:在扩展SR-IOV部署时规划物理NIC容量,因为可用VF的数量受NIC硬件的限制。
如果部署未按预期运行,请参阅以下故障排除步骤:
dmesg | grep -i "SR-IOV"
lspci | grep Ethernet
如果VNF无法访问两个网卡,请确保启用跨NUMA模式:
openstack flavor show cross-numa-flavor
cat /proc/net/bonding/bond0
systemctl restart network
openstack port list --server cpnr-instance
ip addr show
在具有SR-IOV端口的OpenStack上部署CPNR VNF需要cross-NUMA模式,以使VNF从两个NUMA节点连接到NIC。这是至关重要的,因为OpenStack在单NUMA模式下将VNF限制为仅访问启动VNF的NUMA节点内的资源(NIC、CPU、内存)。将跨NUMA模式与Active-Backup绑定相结合,可确保高可用性、容错能力和高效的资源利用率,从而使此部署具有极高的弹性和性能。
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
10-Jul-2025 |
初始版本 |