KokeLab

Cisco/Linux/AWS/Ansible/Kubernetes

Flex Linkの設定

どうも、お久しぶりです。コケラです。

前回はどちらかというと「自分語り系」の記事となりましたが、今回は「技術系」の記事とさせて頂きます。
技術系の記事では、私が実際に自学習や現場での経験で学んで、「面白いなぁ」「覚えておきたいなぁ」と感じた技術を紹介していきます。
技術系の記事としては、記念すべき第一回目。今回、皆さんにシェアしたいのは、Flex Linkという技術です。

Flex Linkとは

Flex LinkはL2における冗長化の設定です。L2で冗長化というと、真っ先に思いつくのがSTP(Spanning Tree Protocol)ですよね。あとは、EtherChannelなどでしょうか。まぁ今回はちょっとEtherChannelのことは忘れてください。EtherChannel?なにそれ美味しいの?
リング構成(ループ構成)でL2のネットワークを冗長化させている場合、STPを実装しないとブロードキャストストームが発生してしまいます。
なので、下図(トポロジー1)のように、スパニングツリーアルゴリズムで特定のスイッチのポートからブロッキングポート(以下BP)を選出し、ARPのフレームがぐるぐると無限にループしないようにすることで、ブロードキャストストームの発生を未然に防ぐわけです。

f:id:kokelabo:20190207015050p:plain
[トポロジー1]BP選出によるループ回避
BPは冗長リンクとしての役割も果たします。例えば、SWA-B間で障害が発生した場合、SWCのポートがBPのままだと、PCA-B間で通信ができなくなりますよね。とはいえ、いつも「ケーブルかスイッチ交換するまで通信断だわー、あははーw」となるわけではありません。当然ですが、救済措置が用意されています。SWA-B間で障害が発生すると、BPだったSWCのポートが自動的に開放され、トラフィックの送受信ができるようになります。
これ以上STPの詳細な動作やらBPDUの具体的な動きやらを説明すると、それこそ冗長な記事になってしまうので、さすがに本記事では省かせて頂きます。STPはやや複雑な技術で管理も難しく、導入のハードルが少し高いです。詳しいことは、Google先生にでも訊いてください。
というわけで、Flex Linkの話に戻りますが、Flex LinkはこのSTPの代替ソリューションとして利用されることがあります。要するに「ちょっとSTP使いたくないから、Flex Linkにするわ」というケースが発生し得るのです。先述しました通り、STPは仕組みが複雑な分、管理が少し難しいです。また、障害発生時に、BPが開放されるまでのコンバージェンスに50秒ほどの時間を要します。たかが50秒でも、状況によっては大惨事となります。そして、BPDUの動作で、無駄なトラフィックが流れてしまうこともあります。
こういったSTPのデメリットを回避できるよう、CatalystにはFlex Linkという機能が用意されています。STPでは、BPDUを使って複数のスイッチ間で連携し合いながら動作するのに対し、Flex Linkは該当機器単体だけで動作します。なので、STPに比べると非常にシンプルで分かりやすく、導入のハードルも低いといえるでしょう。障害を検知してからの切り替えも、STPだと50秒ですが、Flex Linkは100ミリ秒以内でコンバージェンスします。説明だけでは分かりにくいかと思うので、実際に設定しながら解説していきます。

コンフィグ

f:id:kokelabo:20190209120951p:plain
[トポロジー2]SWBFlex Linkの設定
Flex Linkでは、2つのスイッチポートを利用して、アクティブリンクとスタンバイリンクのペアを明示的に作成します。上図(トポロジー2)のようにCatalystを3台用意し、そのうちSWBのFa0/1を平常時に使うアクティブポートに、Fa0/5を障害時に切り替わるスタンバイポート(バックアップポート)とし、実際にコンフィグを投入していきましょう。
余談ですが、L2のループ構成にして、なにも設定しないデフォルトの状態では、自動的にSTPが動作します。下図(画像1、2)のように、SWAのFa0/1が自動的にBPとして選出され、オレンジ点灯となりました。
f:id:kokelabo:20190217161042j:plainf:id:kokelabo:20190217164935p:plain
[画像1、2]SWAのFa0/1がBPとして選出

SWB(config)#int fa0/1
SWB(config-if)#switchport backup int fa0/5
SWB(config-if)#exit

これらのコンフィグを投入すると、SWBのFa0/5が即座にオレンジ点灯となり、30秒から40秒ほどでSWAのFa0/1がグリーン点灯に変わりました(画像3)。

f:id:kokelabo:20190217172524j:plain
[画像3]SWBのFa0/5がバックアップポートとなりオレンジ点灯
これでループを回避しつつ、SWB-C間で障害が発生すると、バックアップルートだったSWA-B間が開放され、自動的に通信ができるようになります。
SWAのFa0/1のランプ状態が正常になったことからも分かるように、Flex Linkの設定をすると、当然ですがSTPの設定は無効となります。設定がこのままの状態ですと、障害が復旧しても、継続してSWA-B間で通信が行われます。リンクの切り戻しは行われません。例えば、平常時のSWB-C間では100Mbpsの速度で通信が行われる設定がなされていて、バックアップルートのSWA-B間は30Mbpsの速度だった場合、いつまでもSWA-B間のままではマズいですよね?というわけで、障害が復旧したら、ちゃんと通信がSWB-C間に戻るように設定しないといけません。Preemptの設定を投入しましょう。

SWB(config)#int fa0/1
SWB(config-if)#switchport backup int fa0/5 preemption mode forced
SWB(config-if)#switchport backup int fa0/5 preemption delay 30
SWB(config-if)#end

Preemptの設定は以上です。障害復旧時、30秒後に、再びSWB-C間の通信へと切り戻されるようになります。上記コンフィグ3行目の「delay」に続く数字が、切り戻しまでの秒数です。では、このFlex Linkの設定を確認できるShowコマンドを見てみましょう。

SWB#sh int switchport backup detail

Switch Backup Interface Pairs:

Active Interface        Backup Interface        State
------------------------------------------------------------------------
FastEthernet0/1         FastEthernet0/5         Active Up/Backup Standby
        Preemption Mode  : forced
        Preemption Delay : 30 seconds
        Multicast Fast Convergence  : Off
        Bandwidth : 100000 Kbit (Fa0/1), 100000 Kbit (Fa0/5)
        Mac Address Move Update Vlan : auto

間違いなく設定されています。本当に思った通りの動作をしてくれるのか、実際に検証してみましょう。SWCのFa0/1からケーブルを抜去します。すると、オレンジ点灯だったSWBのFa0/5が、グリーン点灯に変わりました(画像4)。また、先ほどのShowコマンドをもう一度見ると、Fa0/5のStateが「Backup Up」になっていることが分かります。

f:id:kokelabo:20190217184045j:plain
[画像4]SWBのFa0/5がグリーン点灯

SWB#sh int switchport backup detail

Switch Backup Interface Pairs:

Active Interface        Backup Interface        State
------------------------------------------------------------------------
FastEthernet0/1         FastEthernet0/5         Active Down/Backup Up
        Preemption Mode  : forced
        Preemption Delay : 30 seconds
        Multicast Fast Convergence  : Off
        Bandwidth : 100000 Kbit (Fa0/1), 100000 Kbit (Fa0/5)
        Mac Address Move Update Vlan : auto

アクティブリンクの切り替わりが確認できましたので、ケーブリングを元に戻すと、しっかりと30秒後にSWB-C間への切り戻しも行われました。動作検証は無事成功です。

まとめ

今回はFlex LinkというL2冗長化の技術を紹介させて頂きました。いかがだったでしょうか。設定は非常に簡単ですし、仕組みもかなりシンプルですよね。この設定の簡単さ、仕組みのシンプルさが、このFlex Linkのいちばん良いところかなぁと思っています。
Flex Linkは、一見、万能な技術のようにも見えますが、デメリットもあります。先述しました通り、Flex LinkはSTPとは異なり、該当機器だけで動作します。障害が発生しても、ポートのリンクさえアップしていれば、障害は検知しません。極端な話、監視拠点から「通信の速度が遅くなった」等といったヘルプの申告がなければ、ほぼほぼ障害に気付くことができません。これが、Flex Linkのウィークポイントです。なので、「一時的に速度が落ちたりしても良いから、なにがなんでも通信断の可能性だけは狭めたいんや!」といった場合に利用されることが多いです。また、要件定義・設計のフェーズでFlex Linkを導入するケースも、ほとんどないです。最初からループフリーな構成にしたり、EtherChannelを利用することで要件を満たせてしまいます。あくまでも、運用・保守のフェーズで使われることがあるという認識で良いでしょう。
以上で、Flex Linkの技術解説を終わります。ここまで長々とお付き合い頂きまして、ありがとうございました!