Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WhiteBoxSwitch NOSの変遷

53b88e92e021d7817f13662ba2465f6c?s=47 Mabuchin
November 20, 2019

WhiteBoxSwitch NOSの変遷

in CNUGI#2

53b88e92e021d7817f13662ba2465f6c?s=128

Mabuchin

November 20, 2019
Tweet

Transcript

  1. mixi, Inc. WhiteBoxなNOSの変遷 Cumulus Linux + SONiC Toshiya Mabuchi 2019/11/19

  2. 2 おことわり

  3. 5年前…

  4. 昔Whitebox NOSを検証したことがありました 4 JANOG35.5 パネルセッション:検証してみて感じたホワイトボックススイッチの未来 https://www.janog.gr.jp/meeting/janog35.5/download_file/33/180

  5. 5年前のCumulus Linux • Version 2.2.2 • VXLAN/BGP/ISIS/OSPF/VRRP等の基本的なL2/L3サポート • VXLANはfdbの学習未サポート(staticのみ) •

    各種ネットワークの設定はFile書き換え • Ansibleのroleは当時からあった • ファイルの置き換え/追記等 • 監視はlinuxと同等 • Zabbix agentやIF-MIB等で情報取得 5 基本的な機能を備えつつ安価なモジュールが使えるL2/L3スイッチ
  6. そのときの課題 •ドキュメント情報がまだ充⾜していなかった • Quick Start Guide + αくらいの情報量 • 出たばかりでフォーラムの蓄積も無し

    • 外部API Interfaceがまだなかった
  7. 今のCumulus Linux • Version 3.7 • NLCU • Quagga ->

    FRR • BGP unnumbered • HTTP API • Netconf / OpenConfigはまだサポート無し • PTP Boundary Clock * • ASIC Monitoring * • Knowledge base docs 7 * Spectrum限定
  8. 相当に状況が変化

  9. ちょっと触ってみました

  10. GoodPoint: NLCU • コンフィグ変更CLIの登場 • Commitで反映する⽅式 • Day2 configを持つアーキテクチャの場合は効果⼤ •

    Config validation / rollback • ⼿動時には特に効果絶⼤ #vim /etc/network/interfaces auto swp1 iface swp1 address 192.0.2.1/30 address 2001:DB8::1/126 $net add interface swp1 ip address 192.0.2.1/30 $net add interface swp1 ipv6 address 2001:db8:123::1/126 $net pending $net commit
  11. GoodPoint: FRR • BGP unnumbered • プロトコル⾃体で運⽤の負荷軽減を図ることが可能 • Ansibleで設定変更! すらも無くせるメリット

    • FRRでServerと共通化 • Spine + Leaf + ToR + Serverが全てFRR config管理 Leaf ToR Server leaf.j2 Tor.j2 Server.j2 DB
  12. GoodPoint: ASIC Monitoring • ASIC Monitoringが可能 • 定期的にASICのパケットキューの状態をSnapShot • パケット⻑をヒストグラムとしてデータ採取可能

    • Bufferの滞留具合やロスの原因をを程度深堀り可能に • WhiteBoxだけどSwitchdがBlackboxだから分からない︕が無くなる(?) • 実際運⽤してる⼈で使ってる⼈いますか︖ • Mellanox WJH(What just happened) (Spectrum2) • Cumulus4.x~ • Drop reasonをメタデータとして組み込んでCPUに上げる • 期待!!!
  13. GoodPoint: HTTP API • HTTP API≠REST CONF • 構造化されたAPIではない •

    NLCUをHTTP Protocol越し実行 • 動作させることは簡単 • Docsが少なめ • netconf/openconfigはまだ • Automation • HTTP API • 設定ファイルをAnsibleで置換/追記 • 自作API serverを建てる Curl例
  14. ⽐較まとめ Cumulus2.2 Cumulus3.7 Config File edit NLCU + File API

    なし HTTP API & ⼀部grpc Routing Quaaga FRR Monitoring Snmpd, server agent系 Snmpd, agent, ASIC monitor,
  15. 段違いに使いやすくなってた

  16. ホワイトボックススイッチのよくある図 Hardware Network OS Monitoring API Routing CLI • )BSEXBSFґଘແ͠

    • ίϯϙʔωϯτຖʹબ୒Մೳ • ಠࣗπʔϧαʔόʔϛυϧ΢ΣΞ ΋؆୯ʹಋೖՄೳ
  17. OSSなNOS SONiCとの使⽤感⽐較

  18. Cumulusアーキテクチャ • NCLU • 統合コマンドライン • Switchdev • Linuxの基本構造に 則った⽅式

    • Switchdがnetlinkを 拾ってASICにも伝搬 https://cumulusnetworks.com/blog/cumulus-linux-network-command-line-utlility/linux-nclu-architecture/ Linux-NCLU-Architecture
  19. SONiCアーキテクチャ • Config command • 統合コマンドライン • Json fileをもとにDBに 書き込み

    • SAI Interface • DBの変更通知を • 受け取ってsyncdが SAI準拠でASICを叩く https://github.com/Azure/SONiC/wiki/Architecture Azure/SONiC Architecture
  20. SONiCとCumulusのルート挿⼊時の違い Cumulus SONiC FRR BGPd zebra fpmsyncd APPL_DB ASIC_DB swss

    zapi syncd ASIC FRR BGPd zebra kernel zapi switchd netlink ASIC ASIC Driver
  21. コンポーネントを換装する試験 Cumulus SONiC GoBGP zebra fpmsyncd APPL_DB ASIC_DB swss zapi

    syncd ASIC GoBGP zebra kernel zapi switchd netlink ASIC ASIC Driver ここ変えるだけでOK ※SONiCはzapiの対応バージョンを 有識者に確認しなかったら少しハマってたかも
  22. ハマったことを共有しようと思ったけど ハマらなかった

  23. SONiC / Cumulus Linux • Switchdev(Cumulus Linux) • Kernel is

    • アーキテクチャとしてシンプル • 何も気にせず経路をkernelに⼊れればOK • SAI(SONiC) • Redis is • 基本的にRedisの中央DB経由で情報をやり取り • DB情報からsyncdがSAI Interfaceを使いASIC SDKを叩く
  24. SONiCの良いところ • OSのライセンス費⽤がかからない • ⼤量投⼊時のコストメリット • OSSなので拡張が可能 • TAIの導⼊ •

    GoldStone • gNMI等はSONiCのほうが 実装が進⾏している https://telecominfraproject.com/oopt/
  25. SONiCのつらい点 • ビルドが超⻑い • ⼿元のビルド⽤マシンで⼤体 8h • 基本はビルド済みイメージで良い • が…SONiCを使うケースは多少のカスタムしたいケースが多い

    • トライエラーが結構なコスト • 普通に動かない • Release版のONIE imageを使っても動作しないのは⽇常茶飯事 • ⾃社で検証したStable Versionを1つ上げるだけでも結構きつい
  26. 実際のところSONiCはそこそこ⾟い • Syncdは簡単に落ちる • 商用ユーザの大半はDay1 configurationのみの運用 • Day2を想定する作りにはなってない • config

    commandのvalidationほぼ無し 2019-09-12.06:37:27.491030|s|SAI_OBJECT_TYPE_PORT:oid:0x1000000000013|SAI_PORT_ATTR_ADMIN_STATE=false 2019-09-12.06:37:27.491149|s|SAI_OBJECT_TYPE_PORT:oid:0x1000000000013|SAI_PORT_ATTR_SPEED=400000 2019-09-12.06:37:27.491252|s|SAI_OBJECT_TYPE_PORT:oid:0x1000000000013|SAI_PORT_ATTR_ADMIN_STATE=true 2019-09-12.06:37:27.493167|n|switch_shutdown_request|| Typo Syncd is down….
  27. Cumulus / SONiCのオペレーションカバー範囲 Defining Day-2 Operations https://dzone.com/articles/defining-day-2-operations SONiC / Cumulus

    ver2.2 Cumulus ver3.7
  28. 参考: Config Validation

  29. ⽐較まとめ Cumulus2.2 Cumulus3.7 SONiC (201904 build) Stably ◦ ◦ △

    Cost 要ライセンス 要ライセンス 無し Customize △ △ ◦ Config File + vtysh NLCU + File + vtysh configCLI + file + vtysh API なし HTTP API gNMI Routing Quaaga FRR FRR Monitoring Snmpd, agent系 Snmpd, agent系, ASIC monitor SNMP,gNMI
  30. • CumulusはDay2 Configが運⽤可能になった • NLCUは多くのネットワークエンジニアにとって嬉しい • 設定で詰まることはほぼ無い • Cumulus /

    SONiC(OSS NOS)の⽐較 • OSS NOSも徐々に⼒はつけてきている • 安定稼働させるためにCumulusのN倍の労⼒が必要 • そこにリソースを投⼊できるか? 既存運⽤に適⽤させつつ、マイグレーションするプランも可能 Summary 安定性/コスト/カスタマイズの観点から適切な選択を︕
  31. これが欲しいな… •FRR部分以外のgNMIのフルサポート • Interfaceを(可能な限り)統⼀したい • HTTP APIより可⽤性⾼いgNMI等があると嬉しい •MPLSラベルルーティングのサポート • 既存網のマイグレーション選択肢に⼊ると嬉しい

    • ASIC冗⻑的な観点からもコアにも⼊れれると良い
  32. 32