〇、リンク負荷分散の機能(What)#
リンク負荷分散の役割は、社内ユーザーが外部ネットワークにアクセスするトラフィックを複数のリンクに分配することです。会社から家に帰るのと同じように、選べる道がいくつかあります。リンク負荷分散は、退社時に最も早く家に帰れる道や、最も美しい景色の道、あるいはバーベキューができる道を選ぶ手助けをしてくれます。
機能的に見ると、リンク負荷分散のシナリオがわかります:
企業にとって、複数の出口リンクを使用することで、特定の出口リンクの故障が会社の業務に与える影響を防ぎ、ISP を跨いでリソースにアクセスする際の遅延問題を回避できます。
一、なぜリンク負荷分散が必要なのか(Why)#
前述の通り、リンク負荷分散の主な機能はルーティングの選択ですが、ネットワーク内でルーティングを担当するのはルーターであり、ルーターには複数の出口リンクに同時に適用できる等価静的ルーティングやポリシールーティングもあります。それでは、なぜリンク負荷分散が必要なのでしょうか?
等価静的ルーティングとポリシールーティング#
この質問に答えるためには、まず等価静的ルーティングとポリシールーティングの概念を定義する必要があります:
等価静的ルーティング:手動で設定された、同じ宛先、同じ優先度、異なる次ホップを持つ 2 つ以上の静的ルーティング。データ転送時には、その中の 1 つの静的ルーティングがランダムに選ばれます;
ポリシールーティング:手動で設定され、4 つのタプル、役割、ISP、アプリケーション、ドメインなどの多次元情報にマッチし、複数の次ホップの中から異なるルーティングアルゴリズムに基づいてルーティングを選択するポリシーです。
等価静的ルーティングとポリシールーティングの概念からわかるように:両者ともに複数の出口のルーティングを行うことができ、ポリシールーティングの機能はより強力で、リンク負荷分散に近い機能を実現しています。しかし、両者の欠点も明らかです:ポリシーは静的であるのに対し、リンクは動的です。
リンク負荷分散#
リンクには健康度の概念があり、動的なネットワーク環境では、リンクが故障したり、混雑したり、さまざまな予期しない状況が発生する可能性があります。リンク負荷分散のニーズはここから生じます。静的なルーティングポリシーはリンクの動的変化を感知できないため、ルーティングのマッチングを前提に、リンクの状態に基づいて動的にルーティングを選択できる強化されたポリシーが必要です。
リンク負荷分散はルーティング機能の強化であり、ルーティングのマッチング結果に依存します。
二、リンク負荷分散は何を実現するのか(How)#
リンク負荷分散を実現するためには、まずその特性を整理する必要があります:
- リンク基本情報の維持:出力インターフェース、次ホップ、キャリア、帯域幅、優先度、重み、健康度など;
- リンク状態の感知:
- インターフェース状態:有効、無効、新しい IP の追加、IP の削除、ルーティングポート、スイッチポートのタイプ...
- リンク状態:目的に関連し、パケットロス率、帯域幅、負荷...
- リンクプール:リンクの集合であり、負荷分散の選択範囲;
- リンク負荷分散アルゴリズム:ランダム、ラウンドロビン、加重ラウンドロビン、優先度、負荷率、近接ルーティング...
- 上記の特性に加えて、クライアントからサーバーへの複数の接続が NAT によって異なる IP に変換される状況を考慮すると、サーバーによって攻撃と見なされて遮断される可能性があるため、特定の時間内に同じ特徴(例えば 4 つのタプル)を持つセッションに対してリンク選択を維持する必要があります。これを「セッション保持」と呼びます。
リンク状態の感知#
- インターフェース状態を監視する
- ping などのプロトコルを使用してリンク状態を感知する
リンク状態を過度に感知することは推奨されません。なぜなら、リンク帯域幅やサーバーのリソースを消費するからです。通常、トラフィック統計などを使用してリンクの負荷率情報を計算し、インターフェース状態の監視と組み合わせることができます。
リンク負荷分散アルゴリズム#
ランダム#
ハッシュアルゴリズムを使用して正常なリンクから 1 つを選択します。正常なリンクがない場合は、過負荷のリンクからランダムに選択します。
ラウンドロビン#
正常なリンクから順番に 1 つを選択します。正常なリンクがない場合は、過負荷のリンクから順番に選択します。
加重ラウンドロビン#
重みの比率に基づいて接続を正常なリンクリストに割り当てます。同様に、正常なリンクがない場合は、過負荷のリンクから加重ラウンドロビンで 1 つを選択します。
加重の原理は基本的に、重みの大きさに応じて毎回 1 つのリンクをシミュレーションで選択し、そのリンクの重みを 1 減らし、次回のシミュレーション選択を新しい重みに基づいて行い、最終的に選択リストを生成します。実際の選択時には、この選択リストをラウンドロビンで選択します。例えば、a:2、b:4、c:1 の 3 つのリンクがある場合、重みに基づいてシミュレーション選択を行い、リストは {b, b, a, b, a, b, c} となり、実際の選択はこのリストに従って行います。
優先度#
優先度に基づいて正常なリンクリストから 1 つを選択します。同様に、正常なリンクがない場合は、過負荷のリンクから優先度に基づいて 1 つを選択します。
負荷率#
リンクのトラフィックとリンク帯域幅の比率に基づいて負荷率を計算し、最小負荷のリンクを選択します。
近接ルーティング#
目的の IP に基づいて ISP 情報データベースを照会し、目的の ISP を見つけ、その ISP のリンクを選択します。他のアルゴリズムと組み合わせて選択結果に対してさらに負荷分散を行うことができます。
セッション保持#
4 つのタプルおよび選択結果に基づいてセッション保持テーブルを構築し、セッション保持テーブルの項目は定期的に期限切れになります。新しい接続が到達した際にセッション保持テーブルを照会し、マッチが成功した場合はセッション保持テーブルの期限を更新します。マッチが成功しなかった場合は、新しいセッション保持テーブル項目を追加します。
Done!
この記事は Mix Space によって xLog に同期更新されました。
元のリンクは https://www.vikifish.com/posts/network/linklb