Dit document beschrijft de stapsgewijze implementatie van CPNR op OpenStack Cisco Virtualized Infrastructure Manager (CVIM) met behulp van SR-IOV en Active-Backup bonding.
Cisco raadt kennis van de volgende onderwerpen aan:
Dit document is niet beperkt tot specifieke software- en hardware-versies.
De informatie in dit document is gebaseerd op de apparaten in een specifieke laboratoriumomgeving. Alle apparaten die in dit document worden beschreven, hadden een opgeschoonde (standaard)configuratie. Als uw netwerk live is, moet u zorgen dat u de potentiële impact van elke opdracht begrijpt.
In het huidige netwerklandschap spelen Virtual Network Functions (VNF's) een cruciale rol bij het mogelijk maken van flexibele, schaalbare en efficiënte netwerkservices. Voor VNF's die krachtige netwerkconnectiviteit vereisen, is SR-IOV een veelgebruikte technologie. Met SR-IOV kunnen VNF's de virtuele switch van de hypervisor omzeilen en rechtstreeks toegang krijgen tot fysieke netwerkinterfacecontrollerbronnen (NIC's), waardoor de latentie wordt verminderd en de doorvoer wordt verhoogd.
Zorg ervoor dat aan deze voorwaarden is voldaan voordat u doorgaat met de implementatie.
Intel XL710- en E810CQDA2-NIC-kaarten worden vaak gebruikt voor krachtige SR-IOV-netwerken. Ga als volgt te werk om het NIC-kaartmodel op de host te verifiëren:
Voer deze opdracht uit om een lijst op te stellen van apparaten met een PCI (Peripheral Component Interconnect) die gerelateerd zijn aan netwerkcontrollers:
lspci | grep -i ethernet
Voorbeeld uitvoer:
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)
Als de NIC Intel XL710 is, ziet u de uitgang van de Ethernet Controller XL710.
Als de NIC Intel E810CQDA2 is, kunt u de Ethernet-controller E810-C in de uitvoer zien.
Voer het volgende uit om het NIC-stuurprogramma te controleren:
ethtool -i <NIC_INTERFACE_NAME>
Voorbeeld van uitvoer voor XL710:
driver: i40e
version: 2.13.10
Voorbeeld van uitvoer voor E810CQDA2:
driver: ice
version: 1.7.12
Zorg ervoor dat de driverversie overeenkomt met de compatibiliteitsmatrix voor uw OpenStack- en Linux-distributie.
Zorg ervoor dat SR-IOV is ingeschakeld in het BIOS/UEFI van de server.
Intel VT-d of AMD-Vi moet ingeschakeld zijn voor PCI-doorvoer en SR-IOV-functionaliteit.
Zorg ervoor dat OpenStack-services zoals Nova, Neutron, Glance en Keystone zijn geïnstalleerd en geconfigureerd.
Neutron moet zowel OpenSwitch (OVS) voor orkestratie-/beheernetwerken als SR-IOV voor applicatie-/servicenetwerken ondersteunen.
De compute nodes moeten zodanig zijn geconfigureerd dat ze SR-IOV ondersteunen, waarbij Virtual Functions (VF's) op de NIC's zijn gemaakt.
De CPNR VNF-afbeelding moet SR-IOV-interfaces ondersteunen en de nodige stuurprogramma's bevatten.
Zorg ervoor dat de CPNR VNF-afbeelding beschikbaar is in OpenStack Glance.
Zorg voor toegang tot de OpenStack CLI voor het maken van netwerken, smaken en het starten van de VNF.
Root- of beheerderstoegang om netwerken te configureren op de Linux-host en binnen de VNF.

SRIOV
Hier is een voorbeeld van Cisco Elastic Services Controller (ESC) XML, waarin de implementatie van virtuele machines (VM) wordt aangetoond met behulp van SR-IOV-netwerken (met type>direct</type>) voor een tenant met de naam testtenant en een VM met de naam sriov-vm-1. Dit omvat meerdere interfaces, waaronder SR-IOV (directe) interfaces:
<esc_datamodel xmlns="http://www.cisco.com/esc/esc">
<tenants>
<tenant>
<name>test-tenant</name>
<managed_resource>true</managed_resource>
<vim_mapping>false</vim_mapping>
<deployments>
<deployment>
<name>sriov-vm-deployment</name>
<vm_group>
<name>sriov-vm-1-group</name>
<locator>
<vim_id>vim1</vim_id>
<vim_project>default</vim_project>
</locator>
<image>sriov-image</image>
<flavor>custom-flavor</flavor>
<bootup_time>300</bootup_time>
<recovery_wait_time>30</recovery_wait_time>
<recovery_policy>
<action_on_recovery>REBOOT_ONLY</action_on_recovery>
</recovery_policy>
<interfaces>
<!-- Management Interface -->
<interface>
<nicid>0</nicid>
<network>mgmt-net</network>
<ip_address>192.x.x.x</ip_address>
</interface>
<!-- SR-IOV Interface 1 -->
<interface>
<nicid>1</nicid>
<type>direct</type>
<network>sriov-net-1</network>
<addresses>
<address>
<address_id>0</address_id>
<subnet>sriov-subnet-1</subnet>
<ip_address>10.x.x.x</ip_address>
</address>
</addresses>
</interface>
<!-- SR-IOV Interface 2 -->
<interface>
<nicid>2</nicid>
<type>direct</type>
<network>sriov-net-2</network>
<addresses>
<address>
<address_id>0</address_id>
<subnet>sriov-subnet-2</subnet>
<ip_address>10.y.y.y</ip_address>
</address>
</addresses>
</interface>
</interfaces>
<scaling>
<min_active>1</min_active>
<max_active>1</max_active>
<elastic>false</elastic>
</scaling>
<config_data>
<configuration>
<dst>--user-data</dst>
<file>file://tmp/init/sriov-vm-1.cfg</file>
</configuration>
</config_data>
</vm_group>
</deployment>
</deployments>
</tenant>
</tenants>
</esc_datamodel>
type>direct</type> onder <interface> maakt SR-IOV (PCI-doorvoer) voor die NIC mogelijk.
Elke SR-IOV-interface heeft zijn eigen netwerk en subnet.
U kunt IPv4/IPv6 koppelen in <adressen> indien nodig.
Voorbeeld van een Day0-bestand om de Cisco ESC XML door te geven:
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 TEST1KEYAAAAB3NzaC1yc2EAAAADAQABAAACAQC7pf8gvOWH/Zv8iAlTv6LWEiPGA3B6t96G6LwTHF6iXOqQxyIUkg8IkqZ6wNwx6CQAjPK8cYBieO1yEHKjHyFTsZgpvdi4rVMP+Qsvab+J5RPPcJeKj7o8KIrtyyESXbLNcZv1uGwZ8nLZKfZQSJP04HUkRKoQJ/JoMvMurEKG/cJ1VtocV4AJiRHj+367D3uzrKd6eHYlM9oD+zpPeJ1P1J2TDPUp2K7GcKCrItn9blSGo/n/+gYBO793QjSdkmc/Ag4TEVhUfG17l0WlSvAw4L0csMlYBAGGqKAUEEx3BJGYNJ851bj23m6JBe83OVWGRWrDIIE+G14/tx8qYXDaFxFUFPb2zj+gmDXq80hYpv++/yFtTocbw== cpnrtest@Testescx01co
- ssh-rsa TEST2KEYAAAAB3NzaC1yc2EAAAADAQABAAACAQDAmkQGCZUrYqkZ0C0J9t7mF9La9zYOqfzzFkk1wWtPga+aANOaFgjqbjj+VlBdi5QZtbzc31aLNlUPpR21BptS4GSfbKJaMOaDUClfe8rGk+9GCgm6wnZiT+SMa4/wEA9NILlwobrwHxVsb/kFlFKXg0aPkdvmqWPNcd09vF50enrs0aXFsqCyl6CPMJpZtGAgckvX8iU2bCJkxzD9F4rAu2D/FNb8KG5cbw7uptiwB4yoek6Q36NyxHYYJyOGiV4oQJ02T9MRPkvjLf7ASx9HA25nG+J4CZXWkuV7XYX1N5DFvOg/kwA7xMPyNgTEkblTRpIcfXU2PCWYSZcn1vYmsazf2uVCY+mjfLcvi85c/1mLnUGikiovQ== test@Testescx01co
runcmd:
- /usr/sbin/useradd Test1 -d /home/Test1 -s /bin/bash -g users; (/bin/echo changeme; /bin/echo changeme) | /usr/bin/passwd Test1
- 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 CPNRDNSTEST
--===============2678395050260980330==
CPNR is een vitale Virtual Network Function (VNF) die IP Address Management (IPAM), DHCP en Domain Name Server (DNS)-services biedt voor netwerken van bedrijven en serviceproviders. Het implementeren van CPNR als VNF in OpenStack vereist zorgvuldige planning, vooral bij het gebruik van SR-IOV-poorten, cross-NUMA-configuraties en een Active-Backup-verbindingsinterface voor redundantie en prestaties.
In dit artikel wordt het stapsgewijze proces voor de implementatie van de CPNR VNF op OpenStack uitgelegd. Het omvat:
Cross-NUMA-bewustzijn:
Actieve back-upbinding:
OpenStack-netwerken:
NUMA is een geheugenarchitectuur waarbij elke CPU (en het lokale geheugen en apparaten) is gegroepeerd in een NUMA-knooppunt. In OpenStack zorgt NUMA-bewuste plaatsing ervoor dat VNF's optimaal worden toegewezen aan bronnen op dezelfde NUMA-node om latentie te minimaliseren en prestaties te maximaliseren.
SR-IOV-NIC's zijn NUMA-lokaal:
Beperking van de single-NUMA-modus:
De CPNR VNF vereist toegang tot:
Bij deze implementatie vereist de CPNR VNF toegang tot SR-IOV-NIC's van zowel NUMA 0 (sriov0) als NUMA 1 (sriov1) om redundantie en hoge beschikbaarheid te bieden. Om dit te bereiken:
Contrack is een Linux-kernel-functie die wordt gebruikt om netwerkverbindingen te volgen, met name voor Network Address Translation (NAT) en firewallregels. Voor OVS-gebaseerde poorten in OpenStack wordt contrack gebruikt om de verbindingsstatus te beheren en beveiligingsgroepregels af te dwingen.
conctracktabel:
Standaardlimiet:
Impact op OVS-poorten:
De grootte van de conctrack-tabel vergroten:
sysctl net.netfilter.nf_conntrack_max
sysctl -w net.netfilter.nf_conntrack_max=262144
echo "net.netfilter.nf_conntrack_max=262144" >> /etc/sysctl.conf
Gebruik van monitor Contrack:
Controleer de contractstatistieken:cat /proc/sys/net/netfilter/nf_conntrack_count
Beveiligingsgroepregels optimaliseren:
Verminder het aantal regels dat wordt toegepast op OVS-poorten om de overheadkosten voor verbindingen tot een minimum te beperken.SR-IOV-poorten omzeilen de OVS-datapath en Linux-kernel-functies zoals conctrack. Hiermee wordt de overhead voor het volgen van verbindingen volledig verwijderd.
In tegenstelling tot OVS-poorten, die beperkt zijn door de grootte van de conctracktabel (nf_contrack_max), kunnen SR-IOV-poorten een vrijwel onbeperkt aantal verbindingen aan.
Door pakketverwerking te offloaden naar de NIC-hardware, elimineren SR-IOV-poorten de latentie die wordt geïntroduceerd door softwaregebaseerde contractverwerking.
De Active Backup-verbindingsmodus is bijzonder geschikt voor deze implementatie vanwege de eenvoud, fouttolerantie en compatibiliteit met SR-IOV-interfaces. Hier is waarom:
De Active-Backup-modus werkt onafhankelijk van de onderliggende fysieke switches of hardware. De failover-logica bevindt zich volledig in de Linux-kernel, waardoor deze zeer draagbaar en veelzijdig is.
SR-IOV-VF's zijn gekoppeld aan specifieke fysieke NIC's en NUMA-knooppunten. Door de Active-Backup-modus te gebruiken, kunt u VF's van verschillende NUMA-knooppunten combineren tot een enkele logische bindingsinterface (bond0). Dit zorgt voor een hoge beschikbaarheid en een efficiënt gebruik van de NUMA-middelen.
Active-Backup-modus is een van de eenvoudigste en meest gebruikte modi in Linux-binding. Het is ontworpen om een hoge beschikbaarheid te bieden door ervoor te zorgen dat het verkeer naadloos blijft stromen, zelfs als een van de gekoppelde interfaces uitvalt. Dit is een uitgebreide uitleg van hoe de Active-Backup-modus werkt, de belangrijkste kenmerken en voordelen.
Een bindingsinterface in Linux combineert twee of meer netwerkinterfaces tot één logische interface. Deze logische interface, aangeduid als de binding (bijvoorbeeld bond0), wordt gebruikt om:
In de Active-Backup-modus wordt slechts één interface (de actieve interface genoemd) op een bepaald moment gebruikt om verkeer te verzenden en te ontvangen. De andere interface(s) blijven in de stand-bymodus. Als de actieve interface uitvalt, wordt een van de standby-interfaces gepromoveerd naar de actieve status en wordt het verkeer automatisch omgeleid naar de nieuwe actieve interface.
Eén actieve interface:
Automatische failover:
Failback-ondersteuning:
Zodra de mislukte interface is hersteld, kan deze automatisch weer actief worden (indien geconfigureerd om dit te doen) of in de standby-modus blijven, afhankelijk van de verbindingsconfiguratie.Geen eisen aan de Switch:
Monitoring:
Actieve interface:
Monitoring:
Koppelingsfout op actieve interface:
Als de actieve interface (eth2) uitvalt (bijvoorbeeld kabel losgekoppeld, NIC-hardwarefout of koppeling naar beneden), detecteert de binding de storing onmiddellijk met behulp van minimon- of ARP-bewaking.Automatische failover:
Tijdigheid failover:
Het failoverproces is vrijwel onmiddellijk (meestal binnen een paar milliseconden, afhankelijk van het minimale interval).Herstel van mislukte interface:
Verkeerscontinuïteit:
Failback is naadloos en zorgt ervoor dat de doorlopende verkeersstromen niet worden verstoord.De Active-Backup-modus is bijzonder geschikt voor SR-IOV-interfaces omdat:
Voorbeeld:
De CPNR VNF vereist de volgende vier netwerken:
Dit is de stap-voor-stap implementatie:
Orchestratienetwerk:
openstack network create --provider-network-type vxlan orchestration-network Beheernetwerk:
openstack network create --provider-network-type vxlan management-network Subnet orkestratie:
openstack subnet create --network orchestration-network \
--subnet-range 192.xx.xx.0/24 orchestration-subnet Subnet beheer:
openstack subnet create --network management-network \
--subnet-range 10.x.x.0/24 management-subnet SR-IOV-netwerk 1:
openstack network create --provider-network-type vlan \
--provider-physical-network sriov0 --provider-segment 101 sriov-network-1 SR-IOV-netwerk 2:
openstack network create --provider-network-type vlan \
--provider-physical-network sriov1 --provider-segment 102 sriov-network-2 Om ervoor te zorgen dat de VNF toegang heeft tot SR-IOV-NIC's van beide NUMA-knooppunten, creëert u een smaak met cross-NUMA-ondersteuning:
openstack flavor create --ram 8192 --vcpus 4 --disk 40 cross-numa-flavor
NUMA-specifieke eigenschappen instellen:
openstack flavor set cross-numa-flavor \
--property hw:numa_nodes=2 \
--property hw:cpu_policy=dedicated \
--property hw:mem_page_size=large
Nadat u de VNF hebt gestart, configureert u de verbindingsinterface voor SR-IOV-poorten (eth2 en eth3) op de VNF.
Maak een verbindingsinterface (bond0) in de Active-Backup-modus:
vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
ONBOOT=yes
BONDING_OPTS="mode=active-backup miimon=100"
IPADDR=172.xx.xx.10
NETMASK=255.xx.xx.0
GATEWAY=172.xx.xx.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 Start de netwerkservice opnieuw om de configuratie toe te passen:
systemctl restart network
Controleer na het implementeren van de VNF de functionaliteit met behulp van de volgende stappen:
Controleer of de VNF-instantie actief is:
openstack server show cpnr-instance
Zorg ervoor dat de status ACTIEF is.
Pingtest: controleer of de VNF via alle netwerken kan communiceren:
ping <IP_ADDRESS_OF_ORCHESTRATION_NETWORK>
ping <IP_ADDRESS_OF_MANAGEMENT_NETWORK>
Bond-interface:
Bevestig dat bond0 actief is:
cat /proc/net/bonding/bond0
Zoeken naar:
Zorg ervoor dat de VNF middelen van beide NUMA-knooppunten gebruikt:
nova show <INSTANCE_ID> --human | grep numa
Controle en probleemoplossing: gebruik hulpmiddelen zoals tcpdump en ethtool om de SR-IOV-interfaces te bewaken.
Beveiliging: Beheer de toegang tot het fysieke netwerk zorgvuldig en zorg voor een strikte isolatie tussen huurders.
Schalen: plan voor fysieke NIC-capaciteit bij het schalen van SR-IOV-implementaties, omdat het aantal beschikbare VF's wordt beperkt door de NIC-hardware.
Als de implementatie niet werkt zoals verwacht, raadpleegt u de volgende stappen voor probleemoplossing:
dmesg | grep -i "SR-IOV"
lspci | grep Ethernet
Als de VNF geen toegang heeft tot beide NIC's, zorg er dan voor dat de cross-NUMA-modus is ingeschakeld:
openstack flavor show cross-numa-flavor
cat /proc/net/bonding/bond0
systemctl restart network
openstack port list --server cpnr-instance
ip addr show
Voor het implementeren van CPNR VNF op OpenStack met SR-IOV-poorten is de cross-NUMA-modus vereist om de VNF in staat te stellen verbinding te maken met NIC's van beide NUMA-knooppunten. Dit is van essentieel belang omdat OpenStack VNF's in de NUMA-modus beperkt tot alleen toegang tot bronnen (NIC's, CPU's, geheugen) binnen de NUMA-node waar de VNF wordt gestart. De combinatie van cross-NUMA-modus met Active-Backup-bonding zorgt voor hoge beschikbaarheid, fouttolerantie en efficiënt gebruik van bronnen, waardoor deze implementatie zeer veerkrachtig en krachtig is.
| Revisie | Publicatiedatum | Opmerkingen |
|---|---|---|
2.0 |
04-Aug-2026
|
Bijgewerkte inhoud |
1.0 |
10-Jul-2025
|
Eerste vrijgave |