データセンタネットワークの取り組みとFacebook Backpack

  • このエントリーをはてなブックマークに追加

Yahoo! JAPAN Tech Advent Calendar 2017の20日目の記事です。一覧はこちら

1. はじめに

こんにちは。サイトオペレーション本部でネットワークインフラを担当している村越です。また、ヤフーの黒帯制度で第6代・第7代ネットワークの黒帯としても活動しています。

12月頭にネットワークメーカーやユーザー企業へ訪問して来たのですが、帰国後はあっという間で今年も残りわずかになってきましたね。
年の瀬の慌ただしいときですが、12/20のAdvent Calendarとしてデータセンタネットワークの取り組みとOCP Facebook Backpackについて紹介したいと思います。

2. データセンタネットワークのトレンド

トラフィック量の急激な上昇が通信事業者やISPからコンテンツサービスを提供するGoogleなどに変化していることが2009年のNanogで発表があったことはご存じの方も多いと思います。

引用元:2009年Nanog Arbor Networks発表資料

最近ですとYouTubeやFacebookで動画を閲覧する方も増えているので実感することがあるのではないでしょうか。このようなトラフィックを多く処理する必要があるGoogle、Amazon、Facebook、MicrosoftなどOTT(Over the TOP)ではネットワークの構成に変化が見られ、2012年のMicrosoftがNanogで発表した構成、2014年のFacebook Blogで紹介された構成、2017年のUBER Engineeringで紹介された構成などにあるようにCLOS Fabric Networkが代表的であり、RFC7938にも記載があります。

引用元:2012年Nanog Microsoft発表した構成

引用元:2014年Facebook Blogで紹介された構成

引用元:2017年UBER Engineeringで紹介された構成

3. ヤフーの取り組み

ヤフーでもデータセンタネットワークの構成はCLOS Fabric Networkへと徐々に対応させています。2016年にJANOG38で発表した「ヤフーのIP CLOS ネットワーク」はその最初の事例です。

現在の取り組みを表にまとめてみました。ここでは今回紹介するFacebook Backpackと関連するためFacebookをもとにヤフーとの比較として記載しています。

strategy

今回はDesign、Automation、Chipなどの話は別の機会とし、White BoxであるOCP Facebook Backpackにフォーカスして紹介していきたいと思います。(表中の紫色として囲まれている箇所)

4. OCP Facebook Backpackとは

OCP(Open Compute Project)とはFacebook社が中心となり提唱しており、サーバー・ストレージ・ネットワーク・ラックなどのハードウエア設計や仕様のオープンソース化を推進する非営利組織のコミュニティーです。Facebook BackpackはOCPにネットワーク機器として技術仕様が公開されています。

仕様が公開されているため、従来のネットワーク機器では考えられないような内部の構造を確認できます。
例えば、以下はLine Cardの内部構造であり、ASICのBroadcom Tomahawkとの接続などが詳細に記載されていることがわかります。
興味がある方は誰でもPDFをダウンロードして確認できますので眺めてみるのも良いかもしれません。

引用元:Latest version/spec:November 7,2016

4-1. Backpackの特徴

Backpackの特徴は、OCPで仕様を公開されているWhite BoxでありOS側が対応すればどんなOSも載せることができるところも1つですがもう1つ大きな違いがあります。それは従来のネットワーク機器にあるSUP(Supervisor)が存在していないということです。かわりに各FabricやLine Card上でOSが稼働することで1台のネットワークの中に小さなCLOS Fabric Networkが構成されている形です。

以下にイメージ図を記載しています。Facebook Backpackに今回はCumulus Linux OSを載せているため、各FabricやLine Cardにロケットを載せた亀のマークが確認できると思います。BackpackのアーキテクチャについてはCloud Computing Day 2017で説明した資料:Session2: Comments on OCP Network Switches / Kenya Murakoshi Yahoo! JAPAN動画がありますので詳しくしりたい方は参考にしてもらえればと思います。

Backpack

以下にスペックを記載しておきます。

  • モジュール
    • 4枚搭載
  • ポート密度
    • 128 x100G, QSFP28
  • ASIC
    • Broadcom BCM56960 Tomahawk
  • Line Card
    • Tomahawk ASIC x2枚搭載
    • QSFP28 100G x32port
  • Fabric
    • Tomahawk ASIC x1枚搭載

5. Backpack 動作検証

Backpackの特徴を捉えたところで、実際にちゃんと動くのか気になる方もいるかもしれません。今回弊社のデータセンタにある機器を利用して環境を構築して検証を実施したので結果について簡単に記載していきたいと思います。検証の際は、伊藤忠テクノソリューションズ株式会社(CTC)に協力いただき、一部の検証機材をお借りしました。特に測定器であるIXIAではCTCの横田さんに大変お世話になりました。ありがとうございました。

5-1. 場所・機材

場所は弊社データセンタで実施しました。機材は以下を利用しています。

  • ヤフー
    • Facebook Backpack 2台
    • 100G SR x8個
    • Accton AS7712-32X 2台
    • management sw 数台
  • CTC
    • IXIA 2slot Chassis 1台
    • IXIA 100G module 1枚
    • IXIA 10G module 1枚
    • DL360G7 HC 2台
    • DL360p Gen8 1台
    • Dell Z9100-ON 1台

test-pic

5-2. 内容・構成

ネットワーク機器のOSはBackpackを含めて検証期間中に最新であるCumulus Linux OS version 3.4.3を利用しています。

5-2-1. Underlay構成

Underlayの構成はBGPでCLOS Fabric Networkを構築しました。Backpack内はBGP AS 65000とし、FabricをRoute Reflectorに設定しています。また、Fabric〜Line Card〜ToR間はすべてBGP Unnumberd Interfaces(RFC5549)を利用しています。

Backpack01
undearlay backpack01

Single Home 全体構成 Underlay
single home underlay

5-2-2. Overlay構成

OverlayとしてVxLAN BGP EVPNの構成を取りました。EVPNについては以前弊社のAdvent Calendar 2015にも記載がありますのであわせてご覧ください。ToR側をVTEPとして設定し、VLAN1、VLAN100それぞれがToR間で通信できるかを確認しています。設定はマニュアルに任せますが、ToRの一部設定を以下に記載しておきます。

es-accton01の設定

router bgp 65001
 bgp router-id xxx.65.28.24
 bgp bestpath as-path multipath-relax
 neighbor spine peer-group
 neighbor spine remote-as external
 neighbor spine capability extended-nexthop
 neighbor swp1 interface peer-group spine
 neighbor swp2 interface peer-group spine
 !
 address-family ipv4 unicast
  network xxx.65.28.24/32
  neighbor spine next-hop-self
  neighbor spine soft-reconfiguration inbound
  neighbor spine allowas-in
  maximum-paths 64
 exit-address-family
 !
 address-family ipv6 unicast
  redistribute connected
  neighbor spine activate
 exit-address-family
 !
 address-family l2vpn evpn
  neighbor spine activate
  advertise-all-vni
 exit-address-family

VTEP
vtep

詳細は検証項目にそれぞれ記載していますが、内容としてBGP EVPNの構成をSingle HomeとDual Homeで構成し、それぞれでBGP EVPNネイバーがはれ、Macアドレスを広報できていることやMac Moveできることを確認しています。また、パケットの中身もSPANしてサーバー側でtcpdumpにより取得し、Wiresharkで表示しています。
Backpackの単体ではRFC2544試験もIXIAで確認しました。

Single Home 全体構成 Overlay
single home overlay

5-3. 検証項目

下記の検証を今回実施しましたが、長くなるため以下の抜粋に留めました。

  • 1-1-1〜1-1-3
  • 2-2-1〜2
  • 3-3-2

検証項目

5-3:1-1-1. Single HomeでBGP EVPN Neighborの確認

まずは基本としてes-accton01〜Backpack01 lc101間、es-accton02〜Backpac02 lc101間でbgp evpn neighborが張られていることを確認してみましょう。
Single Homeの簡易構成図もあわせて載せておきます。

simple single home

cumulus@es-accton01:~$ net show bgp evpn summary
 BGP router identifier xxx.65.28.24, local AS number 65001 vrf-id 0
 BGP table version 0
 RIB entries 25, using 3600 bytes of memory
 Peers 2, using 41 KiB of memory
 Peer groups 1, using 64 bytes of memory

 Neighbor                V         AS MsgRcvd MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd
 fb-bp01-lc101.xxx(swp1) 4      65000  282493  282614        0    0    0 01w0d11h            7
 fb-bp02-lc101.xxx(swp2) 4      65000  282447  282536        0    0    0 01w0d11h            7

 Total number of neighbors 2
 cumulus@es-accton01:~$

cumulus@es-accton02:~$ net show bgp evpn summary
 BGP router identifier xxx.65.28.25, local AS number 65002 vrf-id 0
 BGP table version 0
 RIB entries 25, using 3600 bytes of memory
 Peers 2, using 41 KiB of memory
 Peer groups 1, using 64 bytes of memory

 Neighbor        V                  AS MsgRcvd MsgSent  TblVer  InQ OutQ  Up/Down State/PfxRcd
 fb-bp01-lc402.xxx(swp1) 4       65000  282684  282787       0    0    0 01w0d11h            7
 fb-bp02-lc402.xxx(swp2) 4       65000  282734  282813       0    0    0 01w0d11h            7

 Total number of neighbors 2

5-3:1-1-2. Single HomeでBGP EVPN Routeの確認

次にMacアドレスをEVPN routeとして広報できているか確認してみます。es-accton02配下に接続されているサーバー(HC-16)のMacアドレスがes-acccton01まで伝搬されていることを確認します。まず、HC-16のMacアドレスは以下から 2c:27:d7:4e:95:80 であることがわかります。(★を確認)

[root@DL360G7HC-16 ~]# ifconfig
ens1f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.1  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::2e27:d7ff:fe4e:9580  prefixlen 64  scopeid 0x20<link>
        ether 2c:27:d7:4e:95:80  txqueuelen 1000  (Ethernet)  ★
        RX packets 193  bytes 23812 (23.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 156  bytes 16872 (16.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 48

ens1f0.100: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.1  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::2e27:d7ff:fe4e:9580  prefixlen 64  scopeid 0x20<link>
        ether 2c:27:d7:4e:95:80  txqueuelen 1000  (Ethernet)  ★
        RX packets 95  bytes 9402 (9.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 55  bytes 6317 (6.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

では、このMacアドレスがBGP EVPN routeとして広報され、es-accton01まで伝搬しているか確認してみましょう。

cumulus@es-accton01:~$ net show bgp evpn route
BGP table version is 0, local router ID is xxx.65.28.24
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
EVPN type-2 prefix: [2]:[ESI]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]

   Network          Next Hop            Metric LocPrf Weight Path

省略

Route Distinguisher: xxx.65.28.24:1
*> [2]:[0]:[0]:[48]:[2c:27:d7:4e:96:60]
                    xxx.65.28.24                       32768 i
*> [3]:[0]:[32]:[xxx.65.28.24]
                    xxx.65.28.24                       32768 i
Route Distinguisher: xxx.65.28.24:2
*> [2]:[0]:[0]:[48]:[2c:27:d7:4e:96:60]
                    xxx.65.28.24                       32768 i
*> [3]:[0]:[32]:[xxx.65.28.24]
                    xxx.65.28.24                       32768 i
Route Distinguisher: xxx.65.28.25:1
*> [2]:[0]:[0]:[48]:[2c:27:d7:4e:95:80]  ★
                    xxx.65.28.25                           0 65000 65002 i
*  [2]:[0]:[0]:[48]:[2c:27:d7:4e:95:80]  ★
                    xxx.65.28.25                           0 65000 65002 i
*  [3]:[0]:[32]:[xxx.65.28.25]
                    xxx.65.28.25                           0 65000 65002 i
*> [3]:[0]:[32]:[xxx.65.28.25]
                    xxx.65.28.25                           0 65000 65002 i
Route Distinguisher: xxx.65.28.25:2
*  [2]:[0]:[0]:[48]:[2c:27:d7:4e:95:80]  ★
                    xxx.65.28.25                           0 65000 65002 i
*> [2]:[0]:[0]:[48]:[2c:27:d7:4e:95:80]  ★
                    xxx.65.28.25                           0 65000 65002 i
*  [3]:[0]:[32]:[xxx.65.28.25]
                    xxx.65.28.25                           0 65000 65002 i
*> [3]:[0]:[32]:[xxx.65.28.25]
                    xxx.65.28.25                           0 65000 65002 i

Displayed 16 prefixes (20 paths)
cumulus@es-accton01:~$

下記のようにMacアドレスをEVPN type2のrouteとして広報できていることが確認できます。

[2]:[0]:[0]:[48]:[2c:27:d7:4e:96:60]

また広報元のVTEPはxxx.65.25.25=es-accton02となっていることもわかります。この際にRDがxxx.65.28.25:1とxxx.65.28.25:2と2つあることを確認でき、VNI10100とVNI10001にそれぞれ対応している形です。以下のコマンドで詳しく確認できます。

cumulus@es-accton01:~$ net show bgp evpn route rd xxx.65.28.25:1
EVPN type-2 prefix: [2]:[ESI]:[EthTag]:[MAClen]:[MAC]
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]

BGP routing table entry for xxx.65.28.25:1:[2]:[0]:[0]:[48]:[2c:27:d7:4e:95:80]
Paths: (2 available, best #1)
  Advertised to non peer-group peers:
  fb-bp01-lc101.xxx(swp1) fb-bp02-lc101.xxx(swp2)
  Route [2]:[0]:[0]:[48]:[2c:27:d7:4e:95:80]
  65000 65002
    xxx.65.28.25 from fb-bp01-lc101.xxx(swp1) (xxx.65.28.4)
      Origin IGP, localpref 100, valid, external, bestpath-from-AS 65000, best
      Extended Community: RT:65002:10100 ET:8 ★
      AddPath ID: RX 0, TX 60637
      Last update: Mon Nov 27 16:34:39 2017

  Route [2]:[0]:[0]:[48]:[2c:27:d7:4e:95:80]
  65000 65002
    xxx.65.28.25 from fb-bp02-lc101.xxx(swp2) (xxx.65.28.16)
      Origin IGP, localpref 100, valid, external
      Extended Community: RT:65002:10100 ET:8 ★
      AddPath ID: RX 0, TX 60635
      Last update: Mon Nov 27 16:34:39 2017

BGP routing table entry for xxx.65.28.25:1:[3]:[0]:[32]:[xxx.65.28.25]
Paths: (2 available, best #2)
  Advertised to non peer-group peers:
  fb-bp01-lc101.xxx(swp1) fb-bp02-lc101.xxx(swp2)
  Route [3]:[0]:[32]:[xxx.65.28.25]
  65000 65002
    xxx.65.28.25 from fb-bp01-lc101.xxx(swp1) (xxx.65.28.4)
      Origin IGP, localpref 100, valid, external
      Extended Community: RT:65002:10100 ET:8 ★
      AddPath ID: RX 0, TX 60618
      Last update: Mon Nov 27 14:49:03 2017

  Route [3]:[0]:[32]:[xxx.65.28.25]
  65000 65002
    xxx.65.28.25 from fb-bp02-lc101.xxx(swp2) (xxx.65.28.16)
      Origin IGP, localpref 100, valid, external, bestpath-from-AS 65000, best
      Extended Community: RT:65002:10100 ET:8 ★
      AddPath ID: RX 0, TX 481
      Last update: Mon Nov 20 00:19:19 2017


Displayed 2 prefixes (4 paths) with this RD
cumulus@es-accton01:~$

vtyshに入って確認することも可能です。

es-accton01.xxx# show bgp evpn vni
Advertise Gateway Macip: Disabled
Advertise All VNI flag: Enabled
Number of VNIs: 2
Flags: * - Kernel
  VNI        Orig IP         RD                    Import RT                 Export RT
* 10001      xxx.65.28.24    xxx.65.28.24:2        65001:10001               65001:10001
* 10100      xxx.65.28.24    xxx.65.28.24:1        65001:10100               65001:10100
es-accton01.xxx#

次にes-accton01のMacテーブルも確認してみます。(★を確認)

cumulus@es-accton01:~$ bridge fdb show
2c:27:d7:4e:96:60 dev swp31s0 vlan 100 master bridge
2c:27:d7:4e:96:60 dev swp31s0 vlan 1 master bridge
8c:ea:1b:c4:ec:31 dev swp31s0 master bridge permanent
8c:ea:1b:c4:ec:35 dev swp32 master bridge permanent
96:9f:e6:70:fa:40 dev vxlan10100 master bridge permanent
2c:27:d7:4e:95:80 dev vxlan10100 vlan 100 offload master bridge ★
00:00:00:00:00:00 dev vxlan10100 dst xxx.65.28.25 self permanent
00:00:00:00:00:00 dev vxlan10100 dst xxx.65.28.29 self permanent
2c:27:d7:4e:95:80 dev vxlan10100 dst xxx.65.28.25 self offload ★
32:de:f4:5f:ef:66 dev vxlan10001 master bridge permanent
2c:27:d7:4e:95:80 dev vxlan10001 vlan 1 offload master bridge ★
00:00:00:00:00:00 dev vxlan10001 dst xxx.65.28.30 self permanent
00:00:00:00:00:00 dev vxlan10001 dst xxx.65.28.25 self permanent
00:00:00:00:00:00 dev vxlan10001 dst xxx.65.28.29 self permanent
2c:27:d7:4e:95:80 dev vxlan10001 dst xxx.65.28.25 self offload ★

cumulus@es-accton01:~$ net show bridge macs

VLAN      Master    Interface    MAC                TunnelDest    State      Flags          LastSeen
--------  --------  -----------  -----------------  ------------  ---------  -------------  ----------------
1         bridge    swp31s0      2c:27:d7:4e:96:60                                          00:00:15
1         bridge    vxlan10001   2c:27:d7:4e:95:80 ★                         offload        7 days, 13:21:13
100       bridge    swp31s0      2c:27:d7:4e:96:60                                          00:09:55
100       bridge    vxlan10100   2c:27:d7:4e:95:80 ★                         offload        00:10:09
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.25  permanent  self           9 days, 19:06:18
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.29  permanent  self           9 days, 19:06:18
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.30  permanent  self           9 days, 19:06:18
untagged            vxlan10001   2c:27:d7:4e:95:80  xxx.65.28.25             self, offload  9 days, 19:05:28
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.25  permanent  self           9 days, 19:06:18
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.29  permanent  self           9 days, 19:06:18
untagged            vxlan10100   2c:27:d7:4e:95:80  xxx.65.28.25             self, offload  00:10:09
untagged  bridge    swp31s0      8c:ea:1b:c4:ec:31                permanent                 9 days, 21:14:35
untagged  bridge    swp32        8c:ea:1b:c4:ec:35                permanent                 9 days, 21:14:35
untagged  bridge    vxlan10001   32:de:f4:5f:ef:66                permanent                 9 days, 21:14:35
untagged  bridge    vxlan10100   96:9f:e6:70:fa:40                permanent                 9 days, 21:14:35


cumulus@es-accton01:~$ net show evpn mac vni all

VNI 10001 #MACs (local and remote) 2

MAC               Type   Intf/Remote VTEP      VLAN
2c:27:d7:4e:95:80 remote xxx.65.28.25    ★
2c:27:d7:4e:96:60 local  swp31s0               1

VNI 10100 #MACs (local and remote) 2

MAC               Type   Intf/Remote VTEP      VLAN
2c:27:d7:4e:95:80 remote xxx.65.28.25    ★
2c:27:d7:4e:96:60 local  swp31s0               100

きちんとMacアドレスが載っていることがわかります。最後にpingで疎通を確認してみます。

[root@DL360G7HC-17 ~]# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.331 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.291 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.255 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.259 ms
64 bytes from 192.168.1.1: icmp_seq=5 ttl=64 time=0.262 ms
^C
--- 192.168.1.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.255/0.279/0.331/0.034 ms

[root@DL360G7HC-17 ~]# ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.240 ms
64 bytes from 192.168.100.1: icmp_seq=2 ttl=64 time=0.272 ms
64 bytes from 192.168.100.1: icmp_seq=3 ttl=64 time=0.268 ms
64 bytes from 192.168.100.1: icmp_seq=4 ttl=64 time=0.270 ms
64 bytes from 192.168.100.1: icmp_seq=5 ttl=64 time=0.259 ms
^C
--- 192.168.100.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 0.240/0.261/0.272/0.023 ms

5-3:1-1-3. Single HomeでMac Mobilityの確認

今回、IXIAを使って以下のようにA(IP:172.16.0.1/16 MAC: 00:11:01:00:00:01)とB(IP:172.16.100.1/16, MAC: 00:12:01:00:00:01)の設定を逆にすることでMacアドレスを移動しても問題ないか確認してみました。

Mac Move

まずはMacアドレスが移動する前の状況を確認します。

cumulus@es-accton01:~$ net show bridge macs

VLAN      Master    Interface    MAC                TunnelDest    State      Flags          LastSeen
--------  --------  -----------  -----------------  ------------  ---------  -------------  -----------------
1         bridge    vxlan10001   2c:27:d7:4e:95:80                           offload        01:19:22
100       bridge    swp32        00:11:01:00:00:01                                          00:02:06
100       bridge    vxlan10100   00:12:01:00:00:01                           offload        00:09:08
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.25  permanent  self           10 days, 00:32:48
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.29  permanent  self           10 days, 00:32:48
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.30  permanent  self           10 days, 00:32:48
untagged            vxlan10001   2c:27:d7:4e:95:80  xxx.65.28.25             self, offload  01:19:22
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.5   permanent  self           10 days, 00:32:48
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.25  permanent  self           10 days, 00:32:48
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.29  permanent  self           10 days, 00:32:48
untagged            vxlan10100   00:12:01:00:00:01  xxx.65.28.25             self, offload  00:09:08
untagged  bridge    swp31s0      8c:ea:1b:c4:ec:31                permanent           10 days, 02:41:05
untagged  bridge    swp32        8c:ea:1b:c4:ec:35                permanent           10 days, 02:41:05
untagged  bridge    vxlan10001   32:de:f4:5f:ef:66                permanent           10 days, 02:41:05
untagged  bridge    vxlan10100   96:9f:e6:70:fa:40                permanent           10 days, 02:41:05

cumulus@es-accton02:~$ net show bridge macs

VLAN      Master    Interface    MAC                TunnelDest    State     Flags          LastSeen
--------  --------  -----------  -----------------  ------------  ---------  -------------  -----------------
1         bridge    swp31s0      2c:27:d7:4e:95:80                    00:00:19
100       bridge    swp32        00:12:01:00:00:01                    00:09:08
100       bridge    vxlan10100   00:11:01:00:00:01     offload        00:09:08
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.24  permanent  self           01:19:24
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.29  permanent  self           01:19:24
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.30  permanent  self           01:19:24
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.5   permanent  self           01:19:24
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.24  permanent  self           01:19:24
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.29  permanent  self           01:19:24
untagged            vxlan10100   00:11:01:00:00:01  xxx.65.28.24     self, offload  00:09:08
untagged  bridge    swp31s0      8c:ea:1b:c4:f1:d2                permanent                 10 days, 02:41:06
untagged  bridge    swp31s1      8c:ea:1b:c4:f1:d3                permanent                 01:19:48
untagged  bridge    swp32        8c:ea:1b:c4:f1:d6                permanent                 10 days, 02:41:06
untagged  bridge    vxlan10001   2e:e3:24:b4:2e:d9                permanent                 10 days, 02:41:06
untagged  bridge    vxlan10100   b2:1b:73:96:db:42                permanent                 10 days, 02:41:06

cumulus@es-accton01:~$  net show evpn mac vni all

VNI 10001 #MACs (local and remote) 1

MAC               Type   Intf/Remote VTEP      VLAN
2c:27:d7:4e:95:80 remote xxx.65.28.25

VNI 10100 #MACs (local and remote) 2

MAC               Type   Intf/Remote VTEP      VLAN
00:11:01:00:00:01 local  swp32                 100
00:12:01:00:00:01 remote xxx.65.28.25
cumulus@es-accton01:~$

cumulus@es-accton02:~$  net show evpn mac vni all

VNI 10001 #MACs (local and remote) 1

MAC               Type   Intf/Remote VTEP      VLAN
2c:27:d7:4e:95:80 local  swp31s0               1

VNI 10100 #MACs (local and remote) 2

MAC               Type   Intf/Remote VTEP      VLAN
00:11:01:00:00:01 remote xxx.65.28.24
00:12:01:00:00:01 local  swp32                 100

cumulus@es-accton01:~$ net show bgp evpn route vni 10100 mac 00:11:01:00:00:01
BGP routing table entry for [2]:[0]:[0]:[48]:[00:11:01:00:00:01]
Paths: (1 available, best #1)
  Not advertised to any peer
  Route [2]:[0]:[0]:[48]:[00:11:01:00:00:01] VNI 10100
  Local
    xxx.65.28.24 from 0.0.0.0 (xxx.65.28.24)
      Origin IGP, localpref 100, weight 32768, valid, sourced, local, bestpath-from-AS Local, best
      Extended Community: ET:8 RT:65001:10100
      AddPath ID: RX 0, TX 60694
      Last update: Mon Nov 27 18:58:03 2017


Displayed 1 paths for requested prefix

cumulus@es-accton02:~$ net show bgp evpn route vni 10100 mac 00:11:01:00:00:01
BGP routing table entry for [2]:[0]:[0]:[48]:[00:11:01:00:00:01]
Paths: (2 available, best #2)
  Not advertised to any peer
  Route [2]:[0]:[0]:[48]:[00:11:01:00:00:01] VNI 16777213
  Imported from xxx.65.28.24:1:[2]:[0]:[0]:[48]:[00:11:01:00:00:01]
  65000 65001
    xxx.65.28.24 from fb-bp02-lc402.xxx(swp2) (xxx.65.28.23)
      Origin IGP, localpref 100, valid, external
      Extended Community: RT:65001:10100 ET:8
      AddPath ID: RX 0, TX 60782
      Last update: Mon Nov 27 18:58:03 2017

  Route [2]:[0]:[0]:[48]:[00:11:01:00:00:01] VNI 16777213
  Imported from xxx.65.28.24:1:[2]:[0]:[0]:[48]:[00:11:01:00:00:01]
  65000 65001
    xxx.65.28.24 from fb-bp01-lc402.xxx(swp1) (xxx.65.28.11)
      Origin IGP, localpref 100, valid, external, bestpath-from-AS 65000, best
      Extended Community: RT:65001:10100 ET:8
      AddPath ID: RX 0, TX 60780
      Last update: Mon Nov 27 18:58:03 2017


Displayed 2 paths for requested prefix

cumulus@es-accton01:~$ net show bgp evpn route vni 10100 mac 00:12:01:00:00:01
BGP routing table entry for [2]:[0]:[0]:[48]:[00:12:01:00:00:01]
Paths: (2 available, best #2)
  Not advertised to any peer
  Route [2]:[0]:[0]:[48]:[00:12:01:00:00:01] VNI 16777213
  Imported from xxx.65.28.25:1:[2]:[0]:[0]:[48]:[00:12:01:00:00:01]
  65000 65002
    xxx.65.28.25 from fb-bp01-lc101.xxx(swp1) (xxx.65.28.4)
      Origin IGP, localpref 100, valid, external
      Extended Community: RT:65002:10100 ET:8
      AddPath ID: RX 0, TX 60699
      Last update: Mon Nov 27 18:58:03 2017

  Route [2]:[0]:[0]:[48]:[00:12:01:00:00:01] VNI 16777213
  Imported from xxx.65.28.25:1:[2]:[0]:[0]:[48]:[00:12:01:00:00:01]
  65000 65002
    xxx.65.28.25 from fb-bp02-lc101.xxx(swp2) (xxx.65.28.16)
      Origin IGP, localpref 100, valid, external, bestpath-from-AS 65000, best
      Extended Community: RT:65002:10100 ET:8
      AddPath ID: RX 0, TX 60697
      Last update: Mon Nov 27 18:58:03 2017


Displayed 2 paths for requested prefix


cumulus@es-accton02:~$ net show bgp evpn route vni 10100 mac 00:12:01:00:00:01
BGP routing table entry for [2]:[0]:[0]:[48]:[00:12:01:00:00:01]
Paths: (1 available, best #1)
  Not advertised to any peer
  Route [2]:[0]:[0]:[48]:[00:12:01:00:00:01] VNI 10100
  Local
    xxx.65.28.25 from 0.0.0.0 (xxx.65.28.25)
      Origin IGP, localpref 100, weight 32768, valid, sourced, local, bestpath-from-AS Local, best
      Extended Community: ET:8 RT:65002:10100
      AddPath ID: RX 0, TX 60777
      Last update: Mon Nov 27 18:58:03 2017


Displayed 1 paths for requested prefix

次にアドレスの移動をしたあと同じコマンドを見てみます。

cumulus@es-accton01:~$ net show bridge macs

VLAN      Master    Interface    MAC                TunnelDest    State      Flags          LastSeen
--------  --------  -----------  -----------------  ------------  ---------  -------------  -----------------
1         bridge    vxlan10001   2c:27:d7:4e:95:80                           offload        01:35:23
100       bridge    swp32        00:12:01:00:00:01                                          00:04:43
100       bridge    vxlan10100   00:11:01:00:00:01                           offload        00:05:14
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.25  permanent  self           10 days, 00:48:50
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.29  permanent  self           10 days, 00:48:50
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.30  permanent  self           10 days, 00:48:50
untagged            vxlan10001   2c:27:d7:4e:95:80  xxx.65.28.25             self, offload  01:35:23
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.5   permanent  self           10 days, 00:48:50
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.25  permanent  self           10 days, 00:48:50
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.29  permanent  self           10 days, 00:48:50
untagged            vxlan10100   00:11:01:00:00:01  xxx.65.28.25             self, offload  00:05:14
untagged  bridge    swp31s0      8c:ea:1b:c4:ec:31                permanent                 10 days, 02:57:06
untagged  bridge    swp32        8c:ea:1b:c4:ec:35                permanent                 10 days, 02:57:06
untagged  bridge    vxlan10001   32:de:f4:5f:ef:66                permanent                 10 days, 02:57:06
untagged  bridge    vxlan10100   96:9f:e6:70:fa:40                permanent                 10 days, 02:57:06

cumulus@es-accton02:~$ net show bridge macs

VLAN      Master    Interface    MAC                TunnelDest    State      Flags          LastSeen
--------  --------  -----------  -----------------  ------------  ---------  -------------  -----------------
1         bridge    swp31s0      2c:27:d7:4e:95:80                                          00:00:20
100       bridge    swp32        00:11:01:00:00:01                                          00:05:10
100       bridge    vxlan10100   00:12:01:00:00:01                           offload        00:07:32
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.24  permanent  self           01:35:26
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.29  permanent  self           01:35:26
untagged            vxlan10001   00:00:00:00:00:00  xxx.65.28.30  permanent  self           01:35:26
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.5   permanent  self           01:35:26
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.24  permanent  self           01:35:26
untagged            vxlan10100   00:00:00:00:00:00  xxx.65.28.29  permanent  self           01:35:26
untagged            vxlan10100   00:12:01:00:00:01  xxx.65.28.24             self, offload  00:07:33
untagged  bridge    swp31s0      8c:ea:1b:c4:f1:d2                permanent                 10 days, 02:57:08
untagged  bridge    swp31s1      8c:ea:1b:c4:f1:d3                permanent                 01:35:50
untagged  bridge    swp32        8c:ea:1b:c4:f1:d6                permanent                 10 days, 02:57:08
untagged  bridge    vxlan10001   2e:e3:24:b4:2e:d9                permanent                 10 days, 02:57:08
untagged  bridge    vxlan10100   b2:1b:73:96:db:42                permanent                 10 days, 02:57:08

cumulus@es-accton01:~$  net show evpn mac vni all

VNI 10001 #MACs (local and remote) 1

MAC               Type   Intf/Remote VTEP      VLAN
2c:27:d7:4e:95:80 remote xxx.65.28.25

VNI 10100 #MACs (local and remote) 2

MAC               Type   Intf/Remote VTEP      VLAN
00:11:01:00:00:01 remote xxx.65.28.25
00:12:01:00:00:01 local  swp32                 100

cumulus@es-accton02:~$  net show evpn mac vni all

VNI 10001 #MACs (local and remote) 1

MAC               Type   Intf/Remote VTEP      VLAN
2c:27:d7:4e:95:80 local  swp31s0               1

VNI 10100 #MACs (local and remote) 2

MAC               Type   Intf/Remote VTEP      VLAN
00:11:01:00:00:01 local  swp32                 100
00:12:01:00:00:01 remote xxx.65.28.24

cumulus@es-accton01:~$ net show bgp evpn route vni 10100 mac 00:11:01:00:00:01
BGP routing table entry for [2]:[0]:[0]:[48]:[00:11:01:00:00:01]
Paths: (2 available, best #2)
  Not advertised to any peer
  Route [2]:[0]:[0]:[48]:[00:11:01:00:00:01] VNI 16777213
  Imported from xxx.65.28.25:1:[2]:[0]:[0]:[48]:[00:11:01:00:00:01]
  65000 65002
    xxx.65.28.25 from fb-bp01-lc101.xxx(swp1) (xxx.65.28.4)
      Origin IGP, localpref 100, valid, external
      Extended Community: RT:65002:10100 ET:8 MM:1 ★
      AddPath ID: RX 0, TX 60705
      Last update: Mon Nov 27 19:17:58 2017

  Route [2]:[0]:[0]:[48]:[00:11:01:00:00:01] VNI 16777213
  Imported from xxx.65.28.25:1:[2]:[0]:[0]:[48]:[00:11:01:00:00:01]
  65000 65002
    xxx.65.28.25 from fb-bp02-lc101.xxx(swp2) (xxx.65.28.16)
      Origin IGP, localpref 100, valid, external, bestpath-from-AS 65000, best
      Extended Community: RT:65002:10100 ET:8 MM:1 ★
      AddPath ID: RX 0, TX 60703
      Last update: Mon Nov 27 19:17:58 2017


Displayed 2 paths for requested prefix

cumulus@es-accton02:~$ net show bgp evpn route vni 10100 mac 00:11:01:00:00:01
BGP routing table entry for [2]:[0]:[0]:[48]:[00:11:01:00:00:01]
Paths: (1 available, best #1)
  Not advertised to any peer
  Route [2]:[0]:[0]:[48]:[00:11:01:00:00:01] VNI 10100
  Local
    xxx.65.28.25 from 0.0.0.0 (xxx.65.28.25)
      Origin IGP, localpref 100, weight 32768, valid, sourced, local, bestpath-from-AS Local, best
      Extended Community: ET:8 RT:65002:10100 MM:1 ★
      AddPath ID: RX 0, TX 60787
      Last update: Mon Nov 27 19:17:58 2017


Displayed 1 paths for requested prefix

cumulus@es-accton01:~$ net show bgp evpn route vni 10100 mac 00:12:01:00:00:01
BGP routing table entry for [2]:[0]:[0]:[48]:[00:12:01:00:00:01]
Paths: (1 available, best #1)
  Not advertised to any peer
  Route [2]:[0]:[0]:[48]:[00:12:01:00:00:01] VNI 10100
  Local
    xxx.65.28.24 from 0.0.0.0 (xxx.65.28.24)
      Origin IGP, localpref 100, weight 32768, valid, sourced, local, bestpath-from-AS Local, best
      Extended Community: ET:8 RT:65001:10100 MM:1 ★
      AddPath ID: RX 0, TX 60700
      Last update: Mon Nov 27 19:15:40 2017


Displayed 1 paths for requested prefix

cumulus@es-accton02:~$ net show bgp evpn route vni 10100 mac 00:12:01:00:00:01
BGP routing table entry for [2]:[0]:[0]:[48]:[00:12:01:00:00:01]
Paths: (2 available, best #2)
  Not advertised to any peer
  Route [2]:[0]:[0]:[48]:[00:12:01:00:00:01] VNI 16777213
  Imported from xxx.65.28.24:1:[2]:[0]:[0]:[48]:[00:12:01:00:00:01]
  65000 65001
    xxx.65.28.24 from fb-bp02-lc402.xxx(swp2) (xxx.65.28.23)
      Origin IGP, localpref 100, valid, external
      Extended Community: RT:65001:10100 ET:8 MM:1 ★
      AddPath ID: RX 0, TX 60786
      Last update: Mon Nov 27 19:15:40 2017

  Route [2]:[0]:[0]:[48]:[00:12:01:00:00:01] VNI 16777213
  Imported from xxx.65.28.24:1:[2]:[0]:[0]:[48]:[00:12:01:00:00:01]
  65000 65001
    xxx.65.28.24 from fb-bp01-lc402.xxx(swp1) (xxx.65.28.11)
      Origin IGP, localpref 100, valid, external, bestpath-from-AS 65000, best
      Extended Community: RT:65001:10100 ET:8 MM:1 ★
      AddPath ID: RX 0, TX 60784
      Last update: Mon Nov 27 19:15:40 2017


Displayed 2 paths for requested prefix

Macアドレスが逆になっていることが確認できるとともに、★の箇所でMM(MacMobility)Extended Communityのシーケンス番号が1になっていることがわかるかと思います。MAC Mobilityに関しては、RFC7432もあわせて参照ください。

5-3:2-2-1. Dual Homeでパケットキャプチャ(Control Plane)

キャプチャしてパケットの中身を見てみる前に、構成をDual Homeに変更します。accton01〜02間の構成をMLAGに設定しなおし、以下のようにanycast ipを設定してActive-Active Modeにします。(EVPN and VXLAN Active-Active Mode参照)

es-accton01の例

# The loopback network interface
auto lo
iface lo inet loopback
    address xxx.65.28.24
    clagd-vxlan-anycast-ip xxx.65.28.40

simple dual home

上図のようにaccton01でspanすることでパケットをキャプチャしてみます。z9100でclear ip bgp を実施して受け取ったパケットを以下に表示させています。z9100配下サーバーHC-16のMacアドレス(末尾95:80)がEVPN NLRI Type2として広報されており、VTEPアドレスがEVPN NLRI Type3として広報されていることが確認できます。

EVPN NLRI Type2,3

5-3:2-2-2. Dual Homeでパケットキャプチャ(Data Plane)

つぎにBGP Control Plane側ではなく、VxLANでカプセル化されたData Planeのパケットを見てみます。サーバー同士でpingを打った時のパケットキャプチャが以下です。UnderlayのアドレスとしてSrc,Dst IPにVTEPのアドレス(xxx.65.28.40,41)、OverlayのアドレスとしてSrc, Dst IPにサーバーのアドレス(192.168.1.1,2)を確認できます。

dataplane unicast

5-3:3-2-2. RFC2544試験 Overlay 20,000flow

性能試験としてRFC2544試験をIXIAで行いました。この試験は、純粋にBackpackの構成で問題ないか確認するために以下の構成のようにシンプルにBackpack1台をIXIAと接続し、Line CardをVTEPとすることで性能を確認しています。

RFC2544

IXIAの結果を以下に貼り付けます、問題なくwire rate出ていることがわかります。

RFC2544 results
RFC2544 results2

6. さいごに

いかがでしたでしょうか。
今回はデータセンタネットワークの取り組みの中で、Backpackの仕組みと実際の動作試験を紹介しました。今回紹介した以外にも最新の技術を利用して、課題解決していく様々な取り組みがあり、ヤフーにはそのような文化が根付いていると思います。

来年の1月27日は、「Yahoo! JAPAN Tech Conference 2018」が開催され、Yahoo! JAPANを支えるさまざまな領域の技術をテーマにした講演が聞けます。

宣伝になってしまいますが、私も登壇(A-1 14:00-14:50)しますので、良かったら聞きに来ていただけるとうれしいです。

最後まで読んでいただきありがとうございました。
今年も残すところ後わずかですが、皆様良いお年をお過ごしください。

Yahoo! JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。

  • このエントリーをはてなブックマークに追加