RIFTの概要とセットアップ
概要 ファット・ツリーでのルーティング(RIFT)は、CLOSベースおよびファット・ツリー・ネットワーク・トポロジーのバリエーションでパケットをルーティングするために使用できるゼロOpExルーティングプロトコルです。これはリンクステート技術とディスタンスベクトル技術の両方のハイブリッドであり、管理の容易さやネットワークへの耐障害性の向上など、IPファブリックにはいくつかのメリットがあります。
Fat Tree(RIFT)プロトコルでのルーティングの Junos 実装について
RIFTプロトコルのメリット
RIFTプロトコルは、以下を可能にするゼロOpExルーティングプロトコルです。
IPファブリックの管理を簡素化するために必要な設定はほぼゼロです。
豊富なトレース機能とロギング機能により、IPファブリックの拡張性の利点を実現します。
ループせずにパスを最大限に使用することで、IPファブリックに耐障害性が追加されます。
RIFTプロトコルは、距離ベクトルとリンクステートプロトコルのハイブリッドとして、両方のプロトコルタイプの利点を継承し、次のような追加のメリットを提供します。
可能な限り最速のコンバージェンス。
トポロジーの自動検出。
トップオブラック デバイスでの最小ルート数。
高度な等価コスト マルチパス(ECMP)。
RIFTプロトコルの概要
CLOSおよびファットツリーアーキテクチャ(スパインおよびリーフモデルとも呼ばれる)にIP転送ベースのデータセンターを導入する増加に伴い、IGP(内部ゲートウェイプロトコル)とBGPは現在、必要なルーティング決定を処理するために使用されています。これらのプロトコルで使用されるアプローチは、このようなIPファブリックの要件を満たしていない、複雑で高コストな運用拡張に依存しています。これは、IGPおよびBGPプロトコルはもともと、一般的なネットワークトポロジとスパースネットワークトポロジー用に構築されたからです。FAT Trees(RIFT)でのルーティングは、これらの問題を克服し、進化するIPファブリックのニーズを満たします。
RIFTプロトコルは、オープンスタンダードプロトコルです。これは、リーフに向かって拡散した計算を使用する距離ベクトルプロトコルのハイブリッドバージョンであり、スパインに向かって分散計算とフラッディングを使用するリンクステートプロトコルです。言い換えると、RIFTプロトコルが有効になっていると、デバイスは北方向のリンク状態情報をフラッディングし、リーフを除くすべてのスイッチは(正常な条件下で)デフォルトルートを生成し、南方向にフラッディングします。
RIFTプロトコルの主な機能:
ファット・ツリー・トポロジーの自動構築
IP ファブリックの誤ったリンクの自動検出。
データセンターネットワークの各レベルで保持されるルーティング状態情報の量を最小限に抑えます。
フラッディングの量を自動的に最小限に抑えます。
リンク障害およびノード障害時のプレフィックスの自動分離により、ブラックホーリングと最適でないルーティングを防止します。
非 ECMP 転送を許可します。
利用可能な帯域幅に基づいて、スパインに向けてトラフィックを自動的に再調整します。
プロトコルコンバージェンス後に使用できる限定されたキー値データストアを同期します。例えば、より高いレベルの機能をノードにブートストラップします。
詳細については、インターネットドラフトdraft-ietf-rift-rift-09(2020年5月7日終了) RIFT:ファット・ツリーでのルーティングを参照してください。
Junos 実装の RIFT プロトコルがネットワーク パフォーマンスに与える影響
RIFTプロトコルとJunos OSの統合は、一般的なデータセンターアーキテクチャのルート負荷とメモリ使用率に何らかの影響を与えます。これは、RIFTプロトコルが利用可能なすべてのコアを消費してプロトコルのパフォーマンスを向上させる機能を有しているためです。
RIFTの動的構成は完全にはサポートされていません。Junos OS CLIの設定変更により、RIFTプロトコルが再起動され、プロトコルが再コンバージェンスされ、その結果、トラフィックロスが発生する可能性があります。
RIFTプロトコルでサポートされていない機能
RIFTのJunos OS実装は、 https://datatracker.ietf.org/doc/draft-ietf-rift-rift/ のRIFTインターネットドラフトに記載されている標準に準拠していますが、以下の機能はサポートしていません。
論理システム
Snmp
ISSU(インサービス ソフトウェア アップグレード)とノンストップ ソフトウェア アップグレード
グレースフル ルーティング エンジン スイッチオーバー(GRES)
テレメトリ
RIFTのJunos OS実装には、以下の機能は実装されていません。
キーバリューストア
水平リンク
リーフ-2リーフのサポート
ネガティブなディスアグリゲーション
プレフィックスのモビリティ属性
インターフェイスでのラベル バインディング
RIFTプロトコルの有効化
RIFTソフトウェアパッケージはスタンドアロンパッケージであり、ジュニパーによるプロトコルの実装は、マルチコアプロセッサーアーキテクチャを最適に活用するように設計された最新のメモリおよびスレッドセーフのプログラミング言語で実行されます。
RIFTプロトコルは関連する RIFT プロセスを初期化し、ゼロタッチ設定のデフォルト値が設定を通じて適用されます。また、すべてのイーサネット インターフェイスで RIFT が自動的に有効になります。 system-id
は、システムMACアドレスから自動的に導出され level
、 はプロトコル動作の検出部分を通じて自動的に決定されます。
概要 RIFTプロトコルは、必要な設定がゼロに近い必要があります。RIFTプロトコルを有効にすると、必要な設定がパッケージのデフォルトから junos-rift
自動的に継承され、IPファブリックの管理が容易になります。
始める前に
プロトコルを有効にする前に、デバイスに RIFT ソフトウェア パッケージをダウンロードしてインストールする必要があります。
RIFTプロトコルをインストールするには、次の手順にしたがっています。
ベースライン Junos OS ソフトウェアとともに実行する必要があるソフトウェア パッケージから、特別な
junos-rift
パッケージをダウンロードします。メモ:パッケージが展開される
junos-rift
ベースラインの Junos OS ソフトウェアは、64 ビット バージョンのみであり、Junos OS リリース 19.4R1 以降である必要があります。パッケージをインストールする
junos-rift
間、デバイスはCLOSアーキテクチャでケーブル接続する必要があります。個別のパッケージであるため
junos-rift
、Junos OS ベースライン パッケージから個別にライセンスを取得できます。パッケージの
junos-rift
ライセンスは、セクション 15、16、および 17 に特に重点を置いて、 エンド ユーザー ライセンス契約 に基づいて付与されます。
ソフトウェア パッケージから、パッケージを
junos-rift
抽出し、ホスト デバイス上の/var/tmp
ディレクトリにダウンロードします。ソフトウェア パッケージを正常にダウンロードした後、次のコマンドを実行します。
user@host> request system software add package-name
例えば:
user@host> request system software add /var/tmp/junos-rift.tgz
RIFTプロトコルを有効にするには、デバイスでRIFTソフトウェアパッケージをアクティブにする必要があります。RIFTを有効にするには、 コマンドを request rift package activate
使用するか、指定されたファイルからRIFT設定をCLIの現在の設定に手動で読み込んで組み合わせることができます。
Enabling RIFT Using Activate Command
コマンドを使用して RIFT ソフトウェア パッケージを request rift package activate
アクティブにするには:
junos-rift
後、次のコマンドを実行します。
user@host >request rift package activate
activateコマンドは、RIFT設定を自動的にコミットします。
Enabling RIFT Using Load Command
RIFT設定を手動で読み込むには、次の手順にしたがっています。
パッケージを正常にインストール
junos-rift
した後、次のコマンドを実行して、指定されたファイルから RIFT 設定を CLI の現在の設定に読み込んで結合します。user@host# load merge /etc/config/junos-rift/package-defaults.conf user@host# load merge /etc/config/junos-rift/platform/platform-defaults.conf
ここでは、platformホストデバイスであり、次の値のいずれか、mxqfxまたは vmxを指定できます。
設定をコミットします。
user@host> commit
Enabling RIFT in CLOS-based Topology (ZTP Mode)
CLOS トポロジーで RIFT ソフトウェア パッケージをアクティブにするには、追加の設定が必要です。トポロジー内のファブリックの最上位ノードを識別し、すべてのファブリック上のデバイスがデフォルト設定のレベルを上書き auto
するように設定する必要があります。
RIFTソフトウェアパッケージをCLOSベースのトポロジーでアクティブにするには:
デフォルト設定で自動レベルを上書きし、必要に応じて手動でレベルを指定します。
[edit protocols rift] user@host# set level top-of-fabric
追加の設定をコミットします。
user@host> commit
Traceoptions for RIFT
RIFTプロトコルを有効にすると、必要な設定が自動的に継承されますが、最小限のトレースをオプションの設定として追加設定できます。
RIFT の traceoptions を設定するには:
rift ステートメントで traceoptions および proxy-process パラメーターを指定します。
[edit protocols rift] user@host# set traceoptions file size size user@host# set traceoptions file files number user@host# set traceoptions level level user@host# set traceoptions flag flag user@host# set proxy-process traceoptions file size size user@host# set proxy-process traceoptions level level user@host# set proxy-process traceoptions file files number user@host# set proxy-process traceoptions flag flag
例えば:
[edit protocols rift] user@host# set traceoptions file size 1000000 user@host# set traceoptions file files 4 user@host# set traceoptions level info user@host# set traceoptions flag node user@host# set proxy-process traceoptions file size 1000000 user@host# set proxy-process traceoptions level info user@host# set proxy-process traceoptions file files 4 user@host# set proxy-process traceoptions flag if-events
Verifying RIFT Configuration
RIFTプロトコルの設定は、以下の階層レベルから検証できます。
[groups rift-defaults]
[interfaces interface-range rift-interfaces]
[protocols rift]
[edit] user@host# show groups rift-defaults protocols { rift { node-id auto; level auto; lie-receive-address { family { inet 224.0.0.120; inet6 ff02::a1f7; } } interface <*> { lie-transmit-address { family { inet 224.0.0.120; inet6 ff02::a1f7; } } bfd-liveness-detection minimum-interval 1000; } } }
[edit] user@host# show interfaces interface-range rift-interfaces member ge-0/0/*; description "Match interfaces that RIFT could use.";
[edit] user@host# show protocols rift apply-groups rift-defaults; interface rift-interfaces;
パッケージから適用されたデフォルトを表示することで、RIFT設定を junos-rift
検証することもできます。これを行うには、 コマンドを show configuration protocols rift | display inherited
実行します。
例えば:
user@host> show configuration protocols rift | display inherited ## ## 'auto' was inherited from group 'rift-defaults' ## node-id auto; level auto; ## ## 'lie-receive-address' was inherited from group 'rift-defaults' ## lie-receive-address { ## ## 'family' was inherited from group 'rift-defaults' ## family { ## ## '224.0.0.120' was inherited from group 'rift-defaults' ## inet 224.0.0.120; ## ## 'ff02::a1f7' was inherited from group 'rift-defaults' ## inet6 ff02::a1f7; } } interface ge-0/0/0.1 { ## ## 'lie-transmit-address' was inherited from group 'rift-defaults' ## lie-transmit-address { ## ## 'family' was inherited from group 'rift-defaults' ## family { ## ## '224.0.0.120' was inherited from group 'rift-defaults' ## inet 224.0.0.120; ## ## 'ff02::a1f7' was inherited from group 'rift-defaults' ## inet6 ff02::a1f7; } } ## ## 'bfd-liveness-detection' was inherited from group 'rift-defaults' ## ‘400’ was inherited from group 'rift-defaults' ## bfd-liveness-detection minimum-interval 400; }
表 1 は、RIFT プロトコルの設定とステータスの検証に使用できるコマンドを示しています。
コマンド |
説明 |
|
RIFTプロトコルのランタイム状態を検査します。 |
|
RIFTプロトコルは、他のプロトコルが受け入れられるポリシーやコマンドで使用できます。 |
|
RIFTがインストールされたルートの詳細を表示します。 |
|
RIFT データベースをクリアします。 |
|
RIFTプロトコルを再起動します。 |
詳細については、ソフトウェア パッケージ配布の FAQ ファイルを参照してください。
Troubleshooting the RIFT Protocol
RIFTプロトコルは、極端な場合を除き、コアファイルを生成しません。広範なログ記録によってすべての障害が報告され、場合によっては出口でバックトレースが発生します。RIFT プロセスは、traceoptions 設定を使用して収集できる設定可能なトレース イベントを提供します。
RIFTの実装をトラブルシューティングするには、以下を参照してください。
Forming Adjacency
Problem
RIFT の隣接関係はフラッピング アップ/ダウンし、または
Remote Uses Our Own SystemID
エラーの有無をMultiple Neighbors
示しています。Solution
RIFTプロトコルは、ポイントツーポイント隣接関係を形成するイーサネットリンク、またはノードの独自のインターフェイスがループバックするイーサネットリンクで、2つ以上のネイバーをサポートしていません。ケーブルを確認して修正します。
Undefined Level
Problem
すべてのスイッチは未定義のレベルを示し、3方向の隣接関係を形成しませんが、LIE(リンク情報要素)が送受信されています。
Solution
ファブリックトップレベルの設定がない可能性があります。ZTPにアンカーを提供するには、すべてのファブリック最上位デバイスにファブリック最上位レベルを設定する必要があります。
Loopback Address
Problem
RIFTのノードにループバックアドレスを取得できません。
Solution
すべてのループバックアドレスをファブリック上に設定するには、必要な各ノードでループバックアドレスを設定し、それを北方向にRIFTに再分配することが最も簡単な方法です。これを行うためには、以下の設定が必要です。
[edit policy-options] policy-statement lo0-rift { term 0 { from { protocol direct; route-filter loopback-address exact; } then accept; } term default { then reject; } }
[edit protocols rift] export { northbound { lo0-rift; } }
この設定により、すべてのリーフが、ファブリック上のデバイスを除く他のすべてのノードのループバックアドレスに ping を実行できます。
ファブリック上のデバイスにもリーフデバイスから到達可能にする必要がある場合、またはその逆の場合は、ファブリック上のループバックアドレスを1レベル以下(つまりサウスバウンド)に公開する必要があります。これを行うためには、以下の設定が必要です。
[edit protocols rift] export { southbound { lo0-rift; } }
メモ:ファブリック上のアドレスをすべてのリーフノードに伝播させるために、 階層レベルで
allow-rift-routes
オプションを[edit protocols rift export southbound]
設定します。System Log Error Messages
RIFTプロセスは、RIFTプロトコルのJunos OSへの統合に関連するエラーを記録するシステムログメッセージを生成します。システム ログ メッセージを解釈するには、以下を参照してください。
RIFT_PROXYD_ALREADY_RUNNING
RIFTプロセスの別のインスタンスがすでに実行されています。RIFT_PROXYD_CONNECT_RIFT
ローカル RIFT プロセスへの接続試行に失敗しました。
システム ログ エラー メッセージの詳細については、 システム ログ エクスプローラーを参照してください。