Das gesamte Routing im Internet läuft über das altbewährte BGP Protokoll. Obwohl BGP schon relativ alt ist, hat es sich bis heute gehalten und damit bewiesen, wie skalierbar und zuverlässig dieses Protokoll ist. Aus diesem Grund wird es inzwischen auch schon immer häufiger im Rechenzentrum eingesetzt, um das Routing dort zu steuern und zu verwalten.

Auch ONTAP unterstützt seit Version 9.5 BGP als Routing-Protokoll. Die Idee dahinter ist, dass ONTAP mit den Routern im RZ über BGP kommuniziert, und IP-Adressen von SVMs darüber annonciert. Dadurch wird man unabhängig von Layer-2 Konstrukten (VLANs, Interface-Gruppen, etc.) und kann auch in größeren gerouteten Netzen hochverfügbare Dienste zur Verfügung stellen.

In diesem Beitrag werfen wir einen kurzen Blick auf die Konfiguration und Implementierung dieses Protokolls.

Folgende Skizze beschreibt das implementierte Szenario. Auf die Details werden wir in den nächsten Absätzen ein wenig eingehen.

BGP Übersicht im AU Lab

Konfiguration der Routing-Switches

Als Erstes benötigt man natürlich ein paar BGP-fähige Router. Bei uns im Lab sind das Cisco Nexus 3600 Switches, im Bild mit SW1 und SW2 bezeichnet. Auf diesen wird der BGP Routing-Prozess konfiguriert, die beiden Nexus werden wechselseitig mit iBGP Sessions verbunden und bekommen jeweils zwei eBGP Sessions auf die (noch zu konfigurierenden) VIP Interfaces der beiden NetApp Controller. Hier ist die Konfiguration des ersten Switches:

sw1(config)# router bgp 65001
sw1(config-router)# router-id 10.91.1.253
sw1(config-router)# log-neighbor-changes
sw1(config-router)# address-family ipv4 unicast
sw1(config-router-af)# maximum-paths 2
sw1(config-router-af)# neighbor 10.91.1.254 remote-as 65001
sw1(config-router-neighbor)# address-family ipv4 unicast
sw1(config-router-neighbor)# neighbor 10.91.0.61 remote-as 65042
sw1(config-router-neighbor)# disable-connected-check
sw1(config-router-neighbor)# address-family ipv4 unicast
sw1(config-router-neighbor)# neighbor 10.91.0.62 remote-as 65042
sw1(config-router-neighbor)# disable-connected-check
sw1(config-router-neighbor)# address-family ipv4 unicast

Wir nutzen hier disable-connected-check, da wir das BGP Peering über geroutete IP-Adressen machen und uns damit die Konfiguration von eBGP-Multihop sparen. Die Konfiguration des zweiten Switches läuft analog.

Anschließend sind die iBGP Relationships online, die eBGP Relationships natürlich bisher nicht, dazu müssen wir erst BGP im ONTAP konfigurieren:

sw1# show ip bgp summary
BGP summary information for VRF default, address family IPv4 Unicast
BGP router identifier 10.91.1.253, local AS number 65001
BGP table version is 202, IPv4 Unicast config peers 3, capable peers 1
2 network entries and 2 paths using 336 bytes of memory
BGP attribute entries [4/544], BGP AS path entries [2/12]
BGP community entries [0/0], BGP clusterlist entries [0/0]

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down State/PfxRcd
10.91.0.61      4 65042       0       0        0    0    0      2d Idle
10.91.0.62      4 65042       0       0        0    0    0      2d Idle
10.91.1.254     4 65001      12      12        3    0    0      2d 1

Im ONTAP gliedert sich die Konfiguration von BGP in 4 Schritte:

  • Erstellen einer BGP Konfiguration
  • Erstellen von BGP Interfaces auf allen Nodes
  • Erstellen der eBGP Peerings (Peer-Groups)
  • Erstellen eines LIFs, welches per BGP announced wird

Erstellen der BGP Konfiguration

Die BGP Konfiguration definiert primär die AS Nummer und die Router ID der jeweiligen Nodes. Als Router-ID nehmen wir hier die IP-Adresse der jeweiligen BGP Interfaces.

cl1::> bgp config create -node cl1n1 -asn 65042 -router-id 10.91.0.61
cl1::> bgp config create -node cl1n2 -asn 65042 -router-id 10.91.0.62

Erstellen von BGP Interfaces

Die BGP Interfaces werden benötigt, um die Peerings zu erstellen, sowie um den gerouteten Traffic in den Cluster zu bekommen. Diese LIFs unterscheiden sich nur in der Service Policy (default-route-announce) von anderen LIFs.

cl1::> network interface create -vserver cl1 -lif bgp1 -service-policy default-route-announce -home-node cl1n1 -home-port a0a-100 -address 10.91.0.61 -netmask-length 24
cl1::> network interface create -vserver cl1 -lif bgp2 -service-policy default-route-announce -home-node cl1n2 -home-port a0a-100 -address 10.91.0.62 -netmask-length 24

Nach Anlegen dieser LIFs gibt es nun zwei neue „virtuelle“ Ports im Cluster, auf die später die LIFs der SVMs gelegt werden können, sowie eine neue Broadcast Domain namens Vip:

cl1::*> network port show -port v*

Node: cl1n1
                                                                       Ignore
                                                  Speed(Mbps) Health   Health
Port      IPspace      Broadcast Domain Link MTU  Admin/Oper  Status   Status
--------- ------------ ---------------- ---- ---- ----------- -------- ------
v0a       Default      Vip              up      -     -/-     healthy  -

Node: cl1n2
                                                                       Ignore
                                                  Speed(Mbps) Health   Health
Port      IPspace      Broadcast Domain Link MTU  Admin/Oper  Status   Status
--------- ------------ ---------------- ---- ---- ----------- -------- ------
v0a       Default      Vip              up      -     -/-     healthy  -
2 entries were displayed.

Erstellen der eBGP Peerings

Als Nächstes müssen die Peerings zu den Routern aufgebaut werden. Dazu dienen im ONTAP sogenannte Peer-Groups. Davon müssen wir in unserem Fall 4 Stück anlegen (fully-meshed), denn wir möchten ja nicht, dass z. B. bei Ausfall eines Routers die IP-Adressen auf den anderen Node schwenken müssen.

cl1::*> bgp peer-group create -ipspace Default -peer-group cl1n1-sw1 -bgp-lif bgp1 -peer-address 10.91.1.253 -peer-asn 65001
cl1::*> bgp peer-group create -ipspace Default -peer-group cl1n2-sw1 -bgp-lif bgp2 -peer-address 10.91.1.253 -peer-asn 65001
cl1::*> bgp peer-group create -ipspace Default -peer-group cl1n1-sw2 -bgp-lif bgp1 -peer-address 10.91.1.254 -peer-asn 65001
cl1::*> bgp peer-group create -ipspace Default -peer-group cl1n2-sw2 -bgp-lif bgp2 -peer-address 10.91.1.254 -peer-asn 65001

Nun sollten wir auf dem Router auch schon die BGP Sessions sehen (der State der Peers ist nicht mehr Idle, aber es werden auch noch keine Routen ausgetauscht, wie man an der 0 in der Spalte State/PfxRcd sehen kann):

sw1# show ip bgp summary
BGP summary information for VRF default, address family IPv4 Unicast
BGP router identifier 10.91.1.253, local AS number 65001
BGP table version is 202, IPv4 Unicast config peers 3, capable peers 3
2 network entries and 2 paths using 336 bytes of memory
BGP attribute entries [4/544], BGP AS path entries [2/12]
BGP community entries [0/0], BGP clusterlist entries [0/0]

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down State/PfxRcd
10.91.0.61      4 65042       3       4        3    0    0      2d 0
10.91.0.62      4 65042       3       4        3    0    0      2d 0
10.91.1.254     4 65001      12      12        3    0    0      2d 1

Erstellen eines LIFs für CIFS

Nun erstellen wir ein LIF und announcen seine IP-Adresse über BGP. Dazu dient das Flag -is-vip true beim network interface create Kommando. Sobald wir dieses Flag angeben, müssen wir auch keine Netzmaske mehr angeben: VIP LIFs werden immer als /32 announced.

cl1::> network interface create -vserver MD1 -lif cifs2 -is-vip true -address 10.91.42.147 -home-node cl1n1 -home-port v0a -service-policy default-data-files
cl1::> network interface show -vserver MD1 -lif cifs*
            Logical    Status     Network            Current       Current   Is
Vserver     Interface  Admin/Oper Address/Mask       Node          Port      Home
----------- ---------- ---------- ------------------ ------------- --------- ----
MD1
            cifs1        up/up    10.92.4.202/16     cl1n1         a0a-1092  true
            cifs2        up/up    10.91.42.147/32    cl1n1         v0a       true
2 entries were displayed.

Dieses LIF wird nun per BGP von Node 1 announced, und die Route ist auf dem Switch in der BGP Routingtabelle sichtbar:

sw1# show ip bgp summary
BGP summary information for VRF default, address family IPv4 Unicast
BGP router identifier 10.91.1.253, local AS number 65001
BGP table version is 202, IPv4 Unicast config peers 3, capable peers 3
2 network entries and 3 paths using 336 bytes of memory
BGP attribute entries [4/544], BGP AS path entries [2/12]
BGP community entries [0/0], BGP clusterlist entries [0/0]

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.91.0.61      4 65042  828387  828263      202    0    0     3w2d 1
10.91.0.62      4 65042  828375  828263      202    0    0     3w2d 0
10.91.1.254     4 65001  828958  828934      202    0    0    1y30w 2

sw1# show ip route 10.91.42.147
IP Route Table for VRF "default"
'*' denotes best ucast next-hop
'**' denotes best mcast next-hop
'[x/y]' denotes [preference/metric]
'%<string>' in via output denotes VRF <string>

10.91.42.147/32, ubest/mbest: 1/0
    *via 10.91.0.61, [20/0], 20:15:46, bgp-65001, external, tag 65042

Wenn wir nun das LIF auf den Node 2 verschieben, so wird das sofort über BGP auf den Routern übernommen:

cl1::> network interface modify -vserver MD1 -lif cifs2 -home-node cl1n2
cl1::> network interface revert -vserver MD1 -lif cifs2
sw1# show ip bgp summary
BGP summary information for VRF default, address family IPv4 Unicast
BGP router identifier 10.91.1.253, local AS number 65001
BGP table version is 205, IPv4 Unicast config peers 3, capable peers 3
2 network entries and 3 paths using 336 bytes of memory
BGP attribute entries [4/544], BGP AS path entries [2/12]
BGP community entries [0/0], BGP clusterlist entries [0/0]

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.91.0.61      4 65042  828393  828268      205    0    0     3w2d 0
10.91.0.62      4 65042  828381  828268      205    0    0     3w2d 1
10.91.1.254     4 65001  828964  828941      205    0    0    1y30w 2

sw1# show ip route 10.91.42.147
IP Route Table for VRF "default"
'*' denotes best ucast next-hop
'**' denotes best mcast next-hop
'[x/y]' denotes [preference/metric]
'%<string>' in via output denotes VRF <string>

10.91.42.147/32, ubest/mbest: 1/0
    *via 10.91.0.62, [20/0], 00:00:10, bgp-65001, external, tag 65042

Fazit

Warum das alles? Der Vorteil von BGP ist gerade in größeren Netzwerken nicht von der Hand zu weisen, zum Beispiel in einem MetroCluster Konstrukt. Dort wurde bisher immer ein „flaches“ Layer-2 Netzwerk über beide Standorte benötigt, da die IP-Adressen einfach nur innerhalb der Layer-2 Broadcast Domain verschoben wurden. Mit BGP ist die Layer-2 Netzwerkkonfiguration nun komplett irrelevant, da die IP-Adressen ja in beliebigen AS announced werden können.

Die Konvergenzzeiten (Umschaltzeiten) sind, zumindest in unseren Lab-Versuchen, ähnlich schnell, wenn nicht sogar schneller, als bei einem einfachen Layer-2 Konstrukt mit Gratuitous ARPs.

Allerdings ist der Aufwand, BGP zu konfigurieren und zu betreiben, nicht zu vernachlässigen. Daher empfiehlt es sich, das BGP Feature im ONTAP nur zu nutzen, wenn man bereits BGP im Rechenzentrum nutzt, oder dies zumindest ernsthaft in Erwägung zieht.

Die AU ist mehrfach ausgezeichneter NetApp- und Cisco-Partner und wir stehen gerne bei Projekten rund um das Thema NetApp ONTAP, Cisco Switching und Routing, u.v.m zur Seite.

Von Michael Drüing

Michael ist Senior System Engineer sowie Solution Architect für Storage bei der Advanced UniByte GmbH am Hauptstandort Metzingen. NetApp NCTA, NCDA 7-mode, NCDA ONTAP, NCIE-SAN 7-mode, NCIE SAN ONTAP, NCIE SAN E-Series, NCIE DP, NCSE, NCSE ONTAP Specialist, NAHSE, NCSIE ONTAP, NAMIE, NAMCIP, NASGIE, FlexPod Design Specialist, FlexPod Implementation and Administration Specialist, NCSA Hybrid Cloud, NCHC-IE, NCHC-Architect, Triple SME. Cisco CCNA, CCNP SP, CCS-SP Core, CCS-Advanced Routing

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert