RIFTの概要と設定
ファットツリーでのルーティング(RIFT)は、CLOSベースおよびファットツリーネットワークトポロジーのバリエーションでパケットをルーティングするために使用できるゼロOpExルーティングプロトコルです。これは、リンクステート技術とディスタンスベクトル技術の両方を組み合わせたもので、管理の容易さやネットワークの耐障害性の向上など、IPファブリックに複数のメリットをもたらします。
Junosのファットツリーにおけるルーティング(RIFT)プロトコルの実装について
RIFTプロトコルのメリット
RIFTプロトコルはゼロのOpExルーティングプロトコルであり、以下を可能にします。
必要な設定はほぼ不要で、IPファブリックの管理が容易です。
広範なトレースおよびロギング機能により、IPファブリックの拡張性を向上できます。
ループせずにパスを最大限に利用し、IPファブリックの耐障害性を高めます。
RIFTプロトコルは、距離ベクトルとリンク状態プロトコルのハイブリッドとして、両方のプロトコルタイプのメリットを継承し、以下のような追加のメリットを提供します。
可能な限り最速のコンバージェンス。
トポロジーの自動検出。
トップオブラックデバイスでの最小ルート。
高度な等価コストマルチパス(ECMP)。
RIFTプロトコルの概要
CLOSおよびファットツリーアーキテクチャ(スパイン&リーフモデルとも呼ばれる)におけるIP転送ベースのデータセンターの導入の増加に伴い、現在では、必要なルーティング決定を処理するために内部ゲートウェイプロトコル(IGP)とBGPが使用されています。これらのプロトコルで使用されるアプローチは、複雑で高コストの運用拡張に依存しているため、そのようなIPファブリックの要件を満たせません。これは、IGPおよびBGPプロトコルがもともと汎用でスパースなネットワークトポロジー向けに構築されているためです。Routing in Fat Trees(RIFT)は、これらの問題を克服し、進化するIPファブリックのニーズを満たします。
RIFTプロトコルは、オープンスタンダードのプロトコルです。これは、リーフに向かって拡散計算を使用する距離ベクトルプロトコルと、スパインに向かって分散計算とフラッディングを使用するリンク状態プロトコルのハイブリッドバージョンです。つまり、RIFTプロトコルを有効にすると、デバイスはリンク状態情報を北方向にフラッディングし、リーフを除くすべてのスイッチは(通常の条件下では)デフォルトルートを生成し、これを南方向にフラッディングします。
RIFTプロトコルの主な機能:
ファットツリートポロジーの自動構築
IPファブリックのリンクのケーブルミスを自動的に検出します。
データセンターネットワークの各レベルで保持されるルーティング状態情報の量を最小限に抑えます。
フラッディングの量を自動的に最小限に抑えます。
リンクやノードの障害時にプレフィックスを自動的にディスアグリゲーションし、ブラックホーリングやサブオプティマル・ルーティングを防止します。
非ECMP転送を許可します。
使用可能な帯域幅に基づいて、スパインへのトラフィックを自動的にリバランスします。
プロトコルコンバージェンス後に使用できる、限定されたキー値データストアを同期します。例えば、ノードで高レベルの機能ブートストラップを行う場合などです。
詳細については、インターネットドラフトdraft-ietf-rift-rift-09(有効期限:2020年5月7日) RIFT:ファットツリーでのルーティングをご覧ください。
RIFTプロトコルのJunos実装がネットワークパフォーマンスに与える影響
RIFTプロトコルのJunos OSへの統合は、一般的なデータセンターアーキテクチャのルート負荷とメモリ使用率に何らかの影響を与えます。これは、RIFTプロトコルがプロトコルのパフォーマンスを向上させるために利用可能なすべてのコアを消費する機能を備えているためです。
RIFTの動的設定は完全にはサポートされていません。Junos OS CLIの設定変更により、RIFTプロトコルが再起動し、プロトコルが再コンバージェンスし、結果としてトラフィックが失われる可能性があります。
RIFTプロトコルでサポートされていない機能
RIFTのJunos OS実装は、 https://datatracker.ietf.org/doc/rfc9692/ のRIFTインターネットドラフトに記載されている標準に準拠していますが、以下の機能はサポートしていません。
論理システム
SNMP
ISSU(インサービスソフトウェアアップグレード)とノンストップソフトウェアアップグレード
グレースフルルーティングエンジンスイッチオーバー(GRES)
テレメトリ
RIFTのJunos OS実装では、以下は実装されていません。
Key-Valueストア
水平リンク
リーフ 2 リーフのサポート
負のディスアグリゲーション
プレフィックスのモビリティ属性
インターフェイスでのラベルバインディング
RIFTプロトコルの有効化
RIFTソフトウェアパッケージはスタンドアロンパッケージであり、プロトコルのジュニパー実装は、マルチコアプロセッサアーキテクチャを最適に利用できるように設計された最新のメモリとスレッドセーフプログラミング言語で実行されます。
RIFTプロトコルは、関連するRIFTプロセスを初期化し、ゼロタッチ設定のデフォルト値が設定を通じて適用されます。また、すべてのイーサネットインターフェイスでRIFTを自動的に有効にします。 system-id はシステムMACアドレスから自動的に導出され、 level はプロトコル操作のディスカバリー部分によって自動的に決定されます。
RIFTプロトコルでは、必要な設定はほぼゼロです。RIFTプロトコルを有効にすると、 junos-rift パッケージのデフォルトから必要な設定が自動的に継承されるため、IPファブリックの管理が容易になります。
始める前に
プロトコルを有効にする前に、デバイスにRIFTソフトウェアパッケージをダウンロードしてインストールする必要があります。
RIFTプロトコルをインストールするには:
ベースラインソフトウェアと一緒に実行する必要があるソフトウェアパッケージから、特別な
junos-riftパッケージをダウンロードJunos OS。注: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
request rift package activateコマンドを使用してRIFTソフトウェアパッケージをアクティブにするには、次の手順に従います。
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 はホストデバイスであり、mx、 qfx、 vmxのいずれかの値となります。
設定をコミットします。
user@host> commit
Enabling RIFT in CLOS-based Topology (ZTP Mode)
CLOSトポロジーでRIFTソフトウェアパッケージをアクティブにするには、追加の設定が必要です。トポロジー内のトップオブファブリックであるノードを特定し、すべてのトップオブファブリックデバイスをデフォルト設定の auto レベルを上書きするように設定する必要があります。
CLOSベースのトポロジーでRIFTソフトウェアパッケージをアクティブにするには:
デフォルト設定で自動レベルを上書きし、オプションで手動でレベルを指定します。
[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;
また、 junos-rift パッケージから適用されたデフォルトを表示することで、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隣接関係が上下にフラッピングし、
Multiple NeighborsエラーまたはRemote Uses Our Own SystemIDエラーを伴う拒否を表示します。Solution
RIFTプロトコルは、ポイントツーポイントの隣接関係を形成するイーサネットリンク上の2つ以上のネイバー、またはループバックするノード自体のインターフェイスをサポートしません。ケーブルを確認して修正します。
Undefined Level
Problem
すべてのスイッチは未定義のレベルを示し、三方向隣接関係を形成していませんが、LIE(リンク情報要素)が送受信されています。
Solution
トップオブファブリックレベルの設定がない可能性があります。ZTPのアンカーとなるには、すべてのトップオブファブリックデバイスにtop-of-fabricレベルで設定する必要があります。
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; } }注:トップオブファブリックアドレスをすべてのリーフノードに伝送できるようにするには、
[edit protocols rift export southbound]階層レベルでallow-rift-routesオプションを設定します。System Log Error Messages
RIFTプロセスは、システムログメッセージを生成して、RIFTプロトコルのJunos OSへの統合に関連するエラーを記録します。システムログメッセージを解釈するには、以下を参照してください。
RIFT_PROXYD_ALREADY_RUNNING—RIFTプロセスの別のインスタンスがすでに実行されています。RIFT_PROXYD_CONNECT_RIFT—ローカルRIFTプロセスに接続しようとしました。
システムログエラーメッセージの詳細については、 システムログエクスプローラを参照してください。