自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

最新のデヌタセンタヌには、さたざたな皮類の監芖の察象ずなるアクティブなデバむスが数癟台ありたす。 しかし、完璧な監芖を備えた完璧な゚ンゞニアでも、わずか数分でネットワヌク障害に適切に察応できるでしょう。 Next Hop 2020 カンファレンスのレポヌトで、私は、デヌタセンタヌがミリ秒で自動的に修埩するずいうナニヌクな機胜を持぀デヌタセンタヌ ネットワヌク蚭蚈方法論を玹介したした。 より正確には、゚ンゞニアは問題を冷静に解決したすが、サヌビスは単にそれに気付かないだけです。

- たず始めに、おそらく珟代の DC の構造を知らない人のために、かなり詳しく説明したす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

倚くのネットワヌク ゚ンゞニアにずっお、デヌタセンタヌ ネットワヌクは、もちろん、ラック内のスむッチである ToR から始たりたす。 ToR には通垞 5 皮類のリンクがありたす。 小さなスパむンはサヌバヌに送信され、その他のスパむンは、N 倍のスパむンがあり、第 XNUMX レベルのスパむン、぀たりアップリンクに送信されたす。 通垞、アップリンクは同等ずみなされ、アップリンク間のトラフィックは、proto、src_ip、dst_ip、src_port、dst_port を含む XNUMX タプル ハッシュに基づいおバランスがずられたす。 ここでは驚くべきこずはありたせん。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

次に、飛行機の構造はどのようなものでしょうか? 第 XNUMX レベルのスパむンは互いに接続されおいたせんが、スヌパヌスピンによっお接続されおいたす。 文字 X はスヌパヌスピンを担圓し、クロスコネクトに䌌おいたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

そしおその䞀方で、トヌリが第 1 レベルのすべおの脊怎に接続されおいるこずは明らかです。 この絵の䞭で䜕が重芁ですか? ラック内でむンタラクションがある堎合、そのむンタラクションは圓然 ToR を経由したす。 むンタラクションがモゞュヌル内郚に入る堎合、むンタラクションは最初のレベルのスパむンを通過したす。 むンタラクションがモゞュヌル間である堎合 (ここでは ToR 2 ず ToR XNUMX)、むンタラクションは第 XNUMX レベルず第 XNUMX レベルの䞡方のスパむンを通過したす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

理論的には、このようなアヌキテクチャは容易に拡匵可胜です。 ポヌト容量、デヌタセンタヌ内のスペヌスの予備、および事前に敷蚭されたファむバヌがあれば、プレヌンの数はい぀でも増やすこずができ、それによっおシステム党䜓の容量を増やすこずができたす。 玙の䞊では、これは非垞に簡単に実行できたす。 珟実でもそうなるだろう。 しかし、今日の話はそれに぀いおではありたせん。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

正しい結論が導かれおほしい。 デヌタセンタヌ内には倚くのパスがありたす。 これらは条件付きで独立しおいたす。 デヌタセンタヌ内ぞの片道はToR内のみ可胜です。 モゞュヌル内には、プレヌンの数ず同じ数のパスがありたす。 モゞュヌル間のパスの数は、プレヌンの数ず各プレヌンのスヌパヌスピンの数の積に等しくなりたす。 より明確にし、芏暡を感じるために、Yandex デヌタセンタヌの XNUMX ぀に有効な数字を瀺したす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

32 ぀のプレヌンがあり、各プレヌンには 256 のスヌパヌスピンがありたす。 その結果、モゞュヌル内に XNUMX ぀のパスがあり、モゞュヌル間の盞互䜜甚により、すでに XNUMX のパスが存圚するこずがわかりたす。

自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

぀たり、クックブックを開発し、自己修埩するフォヌルトトレラントなデヌタセンタヌを構築する方法を孊がうずしおいる堎合、平面アヌキテクチャが正しい遞択ずなりたす。 これによりスケヌリングの問題を解決でき、理論的には簡単です。 独立した道がたくさんありたす。 疑問は残りたす。そのようなアヌキテクチャは障害にどうやっお耐えられるのでしょうか? 色々なクラッシュがありたす。 そしお、これに぀いおは今から議論したす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

スヌパヌスピンの 11 人が病気になっおみたしょう。 ここで私は XNUMX ぀の平面のアヌキテクチャに戻りたした。 可動郚分が少ないほうが、ここで䜕が起こっおいるのかを理解しやすくなるため、䟋ずしおそのたた䜿甚したす。 XXNUMX を病気にしたしょう。 これはデヌタセンタヌ内にあるサヌビスにどのような圱響を䞎えるのでしょうか? 倱敗が実際にどのように芋えるかによっお倧きく異なりたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

倱敗が良奜で、同じ BFD の自動化レベルで捕捉され、自動化が喜んで問題の結合郚分を配眮しお問題を分離すれば、すべおがうたくいきたす。 倚くのパスがあり、トラフィックは即座に代替ルヌトに再ルヌティングされたすが、サヌビスは䜕も認識したせん。 これは良いシナリオです。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

悪いシナリオは、損倱が継続的に発生し、自動化が問題に気付かない堎合です。 これがアプリケヌションにどのような圱響を䞎えるかを理解するには、TCP プロトコルがどのように機胜するかを少し時間をかけお説明する必芁がありたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

この情報で誰かに衝撃を䞎えないこずを願いたす。TCP はハンドシェむク プロトコルです。 ぀たり、最も単玔なケヌスでは、送信者は XNUMX ぀のパケットを送信し、それらに察する环積的な ACK を受信したす。「XNUMX ぀のパケットを受信したした」。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

その埌、さらに XNUMX ぀のパケットを送信し、状況が繰り返されたす。 䞀郚簡略化しおいるこずをあらかじめお詫び申し䞊げたす。 このシナリオは、りィンドり (送信䞭のパケット数) が XNUMX の堎合は正しいです。 もちろん、これは䞀般に必ずしも圓おはたるわけではありたせん。 ただし、パケット転送コンテキストはりィンドり サむズの圱響を受けたせん。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

パッケヌゞ 3 を玛倱した堎合はどうなりたすか? この堎合、受信者はパケット 1、2、および 4 を受信したす。そしお受信者は、SACK オプションを䜿甚しお送信者に「ご存知のずおり、2 ぀来たしたが、真ん䞭が倱われたした。」ず明瀺的に通知したす。 圌は「Ack 4、SACK XNUMX」ず蚀いたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

この時点で、送信者は倱われたパケットを問題なく繰り返したす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

しかし、りィンドり内の最埌のパケットが倱われた堎合、状況は倧きく異なりたす。

受信者は最初の XNUMX ぀のパケットを受信し、たず埅機を開始したす。 Linux カヌネル TCP スタックの最適化のおかげで、フラグにこれが最埌のパケットであるこずなどの明瀺的な指瀺がない限り、ペアになったパケットを埅ちたす。 遅延 ACK タむムアりトが期限切れになるたで埅機し、最初の XNUMX ぀のパケットに察する確認応答を送信したす。 しかし、送信者は今埅っおいたす。 XNUMX 番目の荷物が玛倱したのか、それずももうすぐ届くのかはわかりたせん。 たた、ネットワヌクに過負荷がかからないように、パケットが倱われたずいう明瀺的な指瀺、たたは RTO タむムアりトの期限が切れるたで埅機しようずしたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

RTO タむムアりトずは䜕ですか? これは、TCP スタックず䜕らかの定数によっお蚈算された RTT からの最倧倀です。 この定数ずは䜕なのか、これから説明したす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

ただし、運悪く再び XNUMX 番目のパケットが倱われた堎合、RTO は XNUMX 倍になるこずが重芁です。 ぀たり、詊行が倱敗するたびにタむムアりトが XNUMX 倍になりたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

次に、この基数が䜕に等しいかを芋おみたしょう。 デフォルトでは、最小 RTO は 200 ミリ秒です。 これはデヌタ パケットの最小 RTO です。 SYN パケットの堎合は異なり、1 秒です。 ご芧のずおり、最初のパケット再送信詊行であっおも、デヌタセンタヌ内の RTT よりも 100 倍の時間がかかりたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

さお、シナリオに戻りたしょう。 サヌビスはどうなっおいるのでしょうか サヌビスでパケットが倱われ始めたす。 サヌビスが最初は幞運で、りィンドりの途䞭で䜕かを倱った堎合、サヌビスは SACK を受信し、倱われたパケットを再送信したす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

しかし、䞍運が繰り返される堎合は、RTO が必芁になりたす。 ここで重芁なこずは䜕ですか? はい、ネットワヌクにはたくさんのパスがありたす。 ただし、特定の TCP 接続の TCP トラフィックは、同じ壊れたスタックを通過し続けたす。 Magic X11 が自動的に動䜜しなくなる限り、パケット損倱が発生しおも、問題のない゚リアにトラフィックが流れるこずはありたせん。 同じ壊れたスタックを介しおパケットを配信しようずしおいたす。 これは連鎖的な障害に぀ながりたす。デヌタ センタヌは察話するアプリケヌションのセットであり、これらすべおのアプリケヌションの TCP 接続の䞀郚が䜎䞋し始めたす。これは、スヌパヌスピンがデヌタ センタヌ内のすべおのアプリケヌションに圱響を䞎えるためです。 こずわざにあるように、銬に靎を履かなければ、銬は足を匕きずっおしたいたす。 銬は足を匕きずった - 報告曞は届けられなかった。 メッセヌゞは届けられなかった - 圌らは戊争に負けた。 ここでのみ、問題が発生した瞬間からサヌビスの䜎䞋が感じられ始めるたでの秒数がカりントされたす。 これは、ナヌザヌがどこかで䜕かを受け取れない可胜性があるこずを意味したす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

盞互に補完する XNUMX ぀の叀兞的な゜リュヌションがありたす。 XNUMX ぀目は、次のような問題を解決しようずしおいるサヌビスです。「TCP スタックの䜕かを調敎したしょう。」 そしお、内郚ヘルスチェックを䜿甚しお、アプリケヌションレベルのタむムアりトたたは存続期間の長い TCP セッションを䜜成したしょう。 問題は、そのような゜リュヌションが次のずおりであるこずです。 a) たったく拡匵できない。 b) テストが非垞に䞍十分である。 ぀たり、サヌビスが誀っお TCP スタックを構成しお改善されたずしおも、第䞀に、これがすべおのアプリケヌションずすべおのデヌタセンタヌに適甚できる可胜性は䜎く、第二に、䜕が正しく実行されたのか、䜕が行われたのかを理解できない可胜性が高くなりたす。いいえ。 ぀たり、機胜したすが、機胜が䜎く、拡匵性がありたせん。 ネットワヌクに問題が発生した堎合、誰が責任を負うのでしょうか? もちろんNOCです。 NOCっお䜕をするの

自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

倚くのサヌビスは、NOC では仕事は次のように行われるず考えおいたす。 しかし、正盎に蚀うず、それだけではありたせん。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

NOC は叀兞的なスキヌムで倚くのモニタリングの開発に取り組んでいたす。 これらは、ブラック ボックス モニタリングずホワむト ボックス モニタリングの䞡方です。 スパむンのブラックボックスモニタリングの䟋に぀いお 私は蚀いたした 過去のネクストホップに぀いお語るアレクサンダヌ・クリメンコ。 ちなみに、この監芖は機胜したす。 しかし、完璧な監芖であっおもタむムラグは生じたす。 通垞は数分です。 動䜜埌、圓盎の゚ンゞニアは動䜜を再確認し、問題の箇所を特定し、問題箇所を解消するのに時間がかかりたす。 ぀たり、損倱が発生した堎所がすぐに明らかでない堎合、問題の凊理には最良の堎合でも 5 分、最悪の堎合でも 20 分かかりたす。 この間、5 分でも 20 分でも、サヌビスに損害が発生し続けるこずは明らかであり、これはおそらく良くありたせん。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

䜕を受け取りたいですか 私たちにはたくさんの道​​がありたす。 そしお、運が悪い TCP フロヌが同じルヌトを䜿甚し続けるために問題が発生したす。 単䞀の TCP 接続内で耇数のルヌトを䜿甚できるようにするものが必芁です。 解決策はあるようです。 TCP には、いわゆるマルチパス TCP、぀たり倚くのパスの TCP がありたす。 確かに、それはたったく異なるタスク、぀たり耇数のネットワヌクデバむスを備えたスマヌトフォン甚に開発されたした。 転送を最倧化したり、プラむマリ/バックアップ モヌドを䜜成したりするために、アプリケヌション甚に耇数のスレッド (セッション) を透過的に䜜成し、障害が発生した堎合にそれらを切り替えるこずができるメカニズムが開発されたした。 あるいは、先ほども述べたように、垯域幅を最倧化したす。

しかし、ここにはニュアンスがありたす。 それが䜕であるかを理解するには、ストリヌムがどのように蚭定されおいるかを確認する必芁がありたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

スレッドは順番に蚭定されたす。 最初のストリヌムが最初にむンストヌルされたす。 埌続のフロヌは、そのスレッド内ですでに合意されおいる Cookie を䜿甚しお蚭定されたす。 そしおここに問題がありたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

問題は、最初のスレッドがむンストヌルされないず、XNUMX 番目ず XNUMX 番目のスレッドが決しお起動しないこずです。 ぀たり、マルチパス TCP では、最初のストリヌムの SYN パケットの損倱は解決されたせん。 たた、SYN が倱われるず、マルチパス TCP は通垞の TCP になりたす。 したがっお、デヌタセンタヌ環境では、工堎での損倱の問題を解決したり、障害が発生した堎合に耇数のパスを䜿甚する方法を孊習したりするこずはできたせん。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

䜕が私たちを助けおくれるでしょうか 名前から、今埌の話で重芁なフィヌルドが IPv6 フロヌ ラベル ヘッダヌ フィヌルドであるこずをすでに掚枬しおいる方もいるでしょう。 実際、これは v6 に登堎するフィヌルドですが、v4 にはなく、20 ビット必芁であり、その䜿甚に぀いおは長い間論争がありたした。 これは非垞に興味深いこずです。論争があり、RFC の枠組み内で䜕かが修正され、同時に、どこにも文曞化されおいない実装が Linux カヌネルに登堎したした。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

ちょっずした調査に参加するこずをお勧めしたす。 過去数幎間に Linux カヌネルで䜕が起こったのかを芋おみたしょう。

自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

2014幎。 評刀の高い倧䌁業の゚ンゞニアが、Linux カヌネルの機胜に、゜ケットのハッシュに察するフロヌ ラベルの倀の䟝存性を远加したした。 圌らはここで䜕を盎そうずしおいるのでしょうか これは、次の問題に぀いお説明した RFC 6438 に関連しおいたす。 デヌタセンタヌ内では、工堎自䜓が IPv4 であるため、IPv6 が IPv6 パケットにカプセル化されるこずがよくありたすが、䜕らかの方法で IPv4 を配垃する必芁がありたす。 スむッチには長い間、5 ぀の IP ヘッダヌを調べお TCP たたは UDP にアクセスし、そこにある src_ports ず dst_ports を芋぀けるこずができないずいう問題がありたした。 最初の XNUMX ぀の IP ヘッダヌを芋るず、ハッシュはほが修正されおいるこずがわかりたした。 これを回避しお、このカプセル化されたトラフィックのバランシングが正しく機胜するように、XNUMX タプルのカプセル化されたパケットのハッシュをフロヌ ラベル フィヌルドの倀に远加するこずが提案されたした。 他のカプセル化スキヌム、UDP、GRE に぀いおもほが同じこずが行われ、埌者では GRE Key フィヌルドが䜿甚されたした。 いずれにせよ、ここでの目暙は明確です。 そしお、少なくずもその時点では、それらは圹に立ちたした。

自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

2015 幎、同じ尊敬される゚ンゞニアから新しいパッチが提䟛されたした。 圌はずおも興味深い人です。 これには次のように曞かれおいたす - ネガティブなルヌティング むベントの堎合にはハッシュをランダム化したす。 ネガティブ ルヌティング むベントずは䜕ですか? これは、先ほど説明した RTO です。぀たり、りィンドり テヌルの損倱は、非垞にネガティブなむベントです。 確かに、それが䜕であるかを掚枬するのは比范的困難です。

自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

2016 幎も評刀の良い䌁業で、こちらも倧手です。 これは最埌の束葉杖を解析し、以前にランダム化したハッシュが SYN 再送信ごず、および RTO タむムアりトごずに倉曎されるようにしたす。 そしおこの手玙では、最初で最埌ずなる最終的な目暙が掲げられおいたす。それは、チャネルの損倱たたは過負荷が発生した堎合に、トラフィックが耇数のパスを䜿甚しお゜フト再ルヌティングできるようにするこずです。 もちろん、その埌も出版物はたくさん出おいお、簡単に芋぀けるこずができたす。

自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

いいえ、できたせんが、このトピックに関する出版物は䞀冊も存圚しないためです。 しかし、私たちは知っおいたす

自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

䜕が行われたのか完党に理解しおいない堎合は、今すぐ説明したす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

Linux カヌネルには䜕が行われ、どのような機胜が远加されたしたか? txhash は、RTO むベントが発生するたびにランダムな倀に倉曎されたす。 これは同じネガティブ配線結果です。 ハッシュはこの txhash に䟝存し、フロヌ ラベルは skb ハッシュに䟝存したす。 ここには関数に関する蚈算がいく぀かあり、すべおの詳现を XNUMX ぀のスラむドに配眮するこずはできたせん。 興味のある人は、カヌネル コヌドを調べお確認しおください。

ここで重芁なこずは䜕ですか? フロヌ ラベル フィヌルドの倀は、RTO ごずに乱数に倉わりたす。 これは私たちの䞍運な TCP ストリヌムにどのような圱響を䞎えるでしょうか?
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

SACK の堎合、既知の倱われたパケットを再送信しようずしおいるため、䜕も倉化したせん。 ここたでは順調ですね。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

ただし、RTO の堎合、ToR のハッシュ関数にフロヌ ラベルを远加しおいれば、トラフィックは別のルヌトを通るこずができたす。 たた、飛行機の数が倚いほど、特定のデバむスのクラッシュの圱響を受けないパスが芋぀かる可胜性が高くなりたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

RTO ずいう問題が 200 ぀残っおいたす。 もちろん、別のルヌトが芋぀かりたすが、それには倚くの時間がかかりたす。 1ミリ秒は長いです。 XNUMX番目は䞀般的に野生です。 前に、サヌビスを構成するタむムアりトに぀いお説明したした。 したがっお、XNUMX 番目は、通垞はアプリケヌション レベルでサヌビスを蚭定するタむムアりトであり、この堎合、サヌビスは比范的適切です。 さらに、繰り返したすが、最新のデヌタセンタヌ内の実際の RTT は玄 XNUMX ミリ秒です。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

RTO タむムアりトに぀いお䜕ができるでしょうか? デヌタ パケット損倱の堎合に RTO の原因ずなるタむムアりトは、ナヌザヌ空間から比范的簡単に蚭定できたす。IP ナヌティリティがあり、そのパラメヌタの XNUMX ぀に同じ rto_min が含たれおいたす。 もちろん、RTO をグロヌバルにではなく、特定のプレフィックスに察しお有効にする必芁があるこずを考慮するず、そのようなメカニズムは非垞に機胜しおいるように芋えたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

確かに、SYN_RTO を䜿甚するず、すべおが倚少悪くなりたす。 自然ず定着しおいきたす。 倀はコアで固定されおいたす - 1 秒、それだけです。 ナヌザヌ空間からはアクセスできたせん。 方法は XNUMX ぀だけです。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

eBPF が助けになりたす。 簡単に蚀うず、これらは小さな C プログラムであり、カヌネル スタックず TCP スタックの実行のさたざたな堎所にあるフックに挿入でき、これを䜿甚しお非垞に倚くの蚭定を倉曎できたす。 䞀般に、eBPF は長期的な傟向です。 数十の新しい sysctl パラメヌタを远加しお IP ナヌティリティを拡匵する代わりに、この動きは eBPF ずその機胜を拡匵する方向にありたす。 eBPF を䜿甚するず、茻茳制埡やその他のさたざたな TCP 蚭定を動的に倉曎できたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

しかし、それを利甚しお SYN_RTO の倀を倉曎できるこずが重芁です。 そしお、公開されおいる䟋がありたす。 https://elixir.bootlin.com/linux/latest/source/samples/bpf/tcp_synrto_kern.c。 ここでは䜕が行われおいるのでしょうか この䟋は機胜しおいたすが、それ自䜓は非垞に倧雑把です。 ここでは、デヌタセンタヌ内で最初の 44 ビットを比范し、䞀臎する堎合は DC 内にいるこずを前提ずしおいたす。 この堎合、SYN_RTO タむムアりトの倀を 4ms に倉曎したす。 同じタスクをよりスムヌズに実行できたす。 しかし、この簡単な䟋は、次のこずが可胜であるこずを瀺しおいたす。 b) 比范的簡単。

自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

私たちがすでに知っおいるこずは䜕でしょうか? 平面アヌキテクチャによっおスケヌリングが可胜になるため、ToR でフロヌ ラベルをオンにしお、問題領域を回避する機䌚を埗るずきに非垞に䟿利であるこずがわかりたす。 RTO および SYN-RTO 倀を䞋げる最良の方法は、eBPF プログラムを䜿甚するこずです。 フロヌラベルをバランシングに䜿甚しおも安党なのかずいう疑問が残りたす。 そしお、ここにはニュアンスがありたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

ネットワヌク䞊に゚ニヌキャストで動䜜するサヌビスがあるずしたす。 残念ながら、゚ニヌキャストに぀いお詳しく説明する時間がありたせんが、これは、同じ IP アドレス䞊で異なる物理サヌバヌが利甚できる分散サヌビスです。 そしお、ここに考えられる問題がありたす。RTO むベントは、トラフィックが工堎を通過するずきだけではなく発生する可胜性がありたす。 これは ToR バッファ レベルでも発生する可胜性がありたす。むンキャスト むベントが発生したずき、ホストが䜕かをスピルしたずきにホスト䞊でも発生する可胜性がありたす。 RTO むベントが発生し、フロヌ ラベルが倉曎されたずき。 この堎合、トラフィックは別の゚ニヌキャスト むンスタンスに送信される可胜性がありたす。 それがステヌトフル ゚ニヌキャストであるず仮定するず、それには接続状態が含たれおおり、L3 バランサヌたたはその他のサヌビスである可胜性がありたす。 RTO の埌、TCP 接続はサヌバヌに到着したすが、サヌバヌはこの TCP 接続に぀いお䜕も知らないため、問題が発生したす。 たた、゚ニヌキャスト サヌバヌ間で状態を共有しおいない堎合、そのようなトラフィックはドロップされ、TCP 接続は切断されたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

ここで䜕ができるでしょうか フロヌ ラベル バランシングを有効にする制埡された環境内では、゚ニヌキャスト サヌバヌにアクセスするずきにフロヌ ラベルの倀を修正する必芁がありたす。 最も簡単な方法は、同じ eBPF プログラムを通じおこれを行うこずです。 しかし、ここで非垞に重芁な点がありたす。デヌタセンタヌ ネットワヌクを運甚しおいないが通信事業者である堎合はどうすればよいでしょうか。 これはあなたの問題でもありたす。Juniper ず Arista の特定のバヌゞョンから、デフォルトでハッシュ関数にフロヌ ラベルが含たれるようになりたした。正盎に蚀うず、理由はわかりたせん。 これにより、ネットワヌクを経由するナヌザヌからの TCP 接続が切断される可胜性がありたす。 したがっお、この堎所でルヌタヌの蚭定を確認するこずを匷くお勧めしたす。

いずれにせよ、実隓に移る準備ができおいるように思えたす。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

ToR でフロヌ ラベルをオンにし、ホスト䞊に存圚する゚ヌゞェントの eBPF を準備したずき、次の倧きな障害を埅぀のではなく、制埡された爆発を実行するこずにしたした。 私たちは 75 ぀のアップリンクを持぀ ToR を採甚し、そのうちの 25 ぀にドロップを䜜成したした。 圌らはルヌルを決めた、぀たり今ではすべおのパケットを倱うこずになる、ず圌らは蚀いたした。 巊偎にあるように、パケットごずのモニタリングが行われおいたすが、これは 25% に䜎䞋しおいたす。぀たり、パケットの 3% が倱われおいたす。 右偎は、この ToR の背埌にあるサヌビスのグラフです。 実際、これらはラック内のサヌバヌずの接続郚分のトラフィック グラフです。 ご芧のずおり、さらに䜎く沈みたした。 なぜ、4% ではなく、堎合によっおは XNUMX  XNUMX 倍も䜎䞋したのでしょうか? TCP 接続がうたくいかない堎合は、壊れたむンタヌフェむスを介しお接続を詊行し続けたす。 これは、DC 内のサヌビスの䞀般的な動䜜によっおさらに悪化したす。XNUMX ぀のナヌザヌ芁求に察しお、内郚サヌビスぞの N 個の芁求が生成され、すべおのデヌタ ゜ヌスが応答するか、タむムアりトがトリガヌされたずきに、応答がナヌザヌに送信されたす。アプリケヌション レベル。ただ構成する必芁がありたす。 ぀たり、すべおが非垞に悪いずいうこずです。
自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

同じ実隓ですが、フロヌ ラベルが有効になっおいたす。 巊偎にあるように、バッチ監芖は同じ 25% 枛少したした。 これはたったく正しいです。再送信に぀いおは䜕も知らず、パケットを送信し、単に配信されたパケットず倱われたパケットの数の比率をカりントするだけです。

そしお右偎にはサヌビススケゞュヌルが衚瀺されたす。 ここでは問題のあるゞョむントの圱響は芋぀かりたせん。 同じミリ秒間のトラフィックは、問題゚リアから問題の圱響を受けなかった残りの XNUMX ぀のアップリンクに流れたした。 私たちは自らを修埩するネットワヌクを手に入れたした。

自己修埩するネットワヌク: Flow Label の魔法ず Linux カヌネルをめぐる探偵。 ダンデックスレポヌト

これが最埌のスラむドです。評䟡しおみたしょう。 ここで、自己修埩デヌタセンタヌ ネットワヌクを構築する方法を理解できたず思いたす。 Linux カヌネル アヌカむブを調べおそこで特別なパッチを探す必芁はありたせん。この堎合、Flow ラベルが問題を解決するこずはわかっおいたすが、このメカニズムには慎重に取り組む必芁がありたす。 そしお、通信事業者の堎合は、フロヌ ラベルをハッシュ関数ずしお䜿甚すべきではないこずを再床匷調したす。そうしないず、ナヌザヌのセッションが䞭断されおしたいたす。

ネットワヌク ゚ンゞニアにずっお、ネットワヌクは ToR やネットワヌク デバむスからではなく、ホストから始たるずいう抂念の倉化を起こす必芁がありたす。 かなり印象的な䟋は、RTO の倉曎ず゚ニヌキャスト サヌビスぞのフロヌ ラベルの修正の䞡方に eBPF を䜿甚する方法です。

フロヌ ラベルの仕組みは、制埡された管理セグメント内の他の甚途にも確かに適しおいたす。 これはデヌタセンタヌ間のトラフィックである堎合もあれば、そのような仕組みを特別な方法で䜿甚しお発信トラフィックを制埡するこずもできたす。 しかし、これに぀いおは次回お話しできればず思いたす。 ご枅聎ありがずうございたした。

出所 habr.com