今回はMPLSを使った経路制御で障害発生時の迂回について考察してみた。
OpenFlowコントローラはRyuを使用し、
ネットワークシュミレーションにはMininetを使用した。
コントローラは開発中のCloudySwitchを使用した。
目標
スイッチ間のリンクに障害が発生した場合、最小限のフローエントリ更新で、障害点を迂回し、通信が可能になること。
構想
図のように予め全経路のパスを構築しておくことで、
送信元のスイッチで経路を選択できる。
障害発生時に送信元のスイッチのみにフローエントリの更新が必要であるが、最小限にとどめることが可能である。
なお、送信元のスイッチの各パスへのラベルはグループテーブルのFast Failoverタイプとなっていて、自スイッチのポートに障害があった場合にFail Overできるようになっている。
【障害発生時】
障害発生時は影響するパスを算出し、送信元スイッチへ使用する経路を更新するフローエントリをコントローラから送出する。
影響するパスは使用されないこととなり、通信が可能となる。
結果
host01とhost02が通信を行っている。
当初は以下のパスで通信が行われていた。
host01 - s1-eth5 - s1-eth2 - s3-eth1 - s3-eth5 - host02
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth1 1500 0 729 0 0 0 780 0 0 0 BMRU
eth2 1500 0 85645 0 0 0 72470 0 0 0 BMRU
lo 65536 0 46688 0 0 0 46688 0 0 0 LRU
s1-eth1 1500 0 9 0 0 0 10 0 0 0 BMPRU
s1-eth2 1500 0 11028 0 0 0 5594 0 0 0 BMPRU
s1-eth3 1500 0 9 0 0 0 10 0 0 0 BMPRU
s1-eth4 1500 0 9 0 0 0 10 0 0 0 BMPRU
s1-eth5 1500 0 5592 0 0 0 11032 0 0 0 BMPRU
s2-eth1 1500 0 10 0 0 0 9 0 0 0 BMPRU
s2-eth2 1500 0 9 0 0 0 9 0 0 0 BMPRU
s2-eth3 1500 0 9 0 0 0 9 0 0 0 BMPRU
s2-eth4 1500 0 9 0 0 0 9 0 0 0 BMPRU
s2-eth5 1500 0 6 0 0 0 11 0 0 0 BMPRU
s3-eth1 1500 0 5594 0 0 0 11028 0 0 0 BMPRU
s3-eth2 1500 0 9 0 0 0 9 0 0 0 BMPRU
s3-eth3 1500 0 9 0 0 0 9 0 0 0 BMPRU
s3-eth4 1500 0 9 0 0 0 9 0 0 0 BMPRU
s3-eth5 1500 0 11027 0 0 0 5595 0 0 0 BMPRU
s4-eth1 1500 0 10 0 0 0 9 0 0 0 BMPRU
s4-eth2 1500 0 9 0 0 0 9 0 0 0 BMPRU
s4-eth3 1500 0 9 0 0 0 9 0 0 0 BMPRU
s4-eth4 1500 0 9 0 0 0 9 0 0 0 BMPRU
s4-eth5 1500 0 6 0 0 0 11 0 0 0 BMPRU
s5-eth1 1500 0 10 0 0 0 9 0 0 0 BMPRU
s5-eth2 1500 0 9 0 0 0 9 0 0 0 BMPRU
s5-eth3 1500 0 9 0 0 0 9 0 0 0 BMPRU
s5-eth4 1500 0 9 0 0 0 9 0 0 0 BMPRU
ここで、s3-eth1のインターフェースがダウンしたと仮定する。
以下の通りパスが切り替えられたことを確認した。
host01 - s1-eth5 - s1-eth4 - s5-eth1 - s5-eth3 - s3-eth4 - s3-eth5 - host02
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth1 1500 0 729 0 0 0 780 0 0 0 BMRU
eth2 1500 0 85946 0 0 0 72710 0 0 0 BMRU
lo 65536 0 47050 0 0 0 47050 0 0 0 LRU
s1-eth1 1500 0 11 0 0 0 12 0 0 0 BMPRU
s1-eth2 1500 0 11028 0 0 0 5594 0 0 0 BMPU
s1-eth3 1500 0 11 0 0 0 12 0 0 0 BMPRU
s1-eth4 1500 0 9027 0 0 0 4674 0 0 0 BMPRU
s1-eth5 1500 0 10255 0 0 0 20051 0 0 0 BMPRU
s2-eth1 1500 0 12 0 0 0 11 0 0 0 BMPRU
s2-eth2 1500 0 11 0 0 0 11 0 0 0 BMPRU
s2-eth3 1500 0 11 0 0 0 11 0 0 0 BMPRU
s2-eth4 1500 0 11 0 0 0 11 0 0 0 BMPRU
s2-eth5 1500 0 6 0 0 0 14 0 0 0 BMPRU
s3-eth2 1500 0 11 0 0 0 11 0 0 0 BMPRU
s3-eth3 1500 0 11 0 0 0 11 0 0 0 BMPRU
s3-eth4 1500 0 4672 0 0 0 9027 0 0 0 BMPRU
s3-eth5 1500 0 20048 0 0 0 10260 0 0 0 BMPRU
s4-eth1 1500 0 12 0 0 0 11 0 0 0 BMPRU
s4-eth2 1500 0 11 0 0 0 11 0 0 0 BMPRU
s4-eth3 1500 0 11 0 0 0 11 0 0 0 BMPRU
s4-eth4 1500 0 11 0 0 0 11 0 0 0 BMPRU
s4-eth5 1500 0 6 0 0 0 14 0 0 0 BMPRU
s5-eth1 1500 0 4674 0 0 0 9027 0 0 0 BMPRU
s5-eth2 1500 0 11 0 0 0 11 0 0 0 BMPRU
s5-eth3 1500 0 9027 0 0 0 4672 0 0 0 BMPRU
s5-eth4 1500 0 11 0 0 0 11 0 0 0 BMPRU
課題
OpenFlowのPort Statusメッセージがコントローラへ送信される範囲の障害であれば、
迂回経路を選択し通信を継続することができるが、Port Statusメッセージが届かない場合は、
迂回経路の選択ができず通信が出来なくなる。
対策としてはOAMのような仕組みを検討する必要があるが、現状全てのスイッチがOpenFlow、また同一OpenFlowコントローラ管理化にあることを前提にしている。
Hop-by-Hop方式でMPLSの利用方法としては概ねこのような形になるのではと考えている。
また、MPLSを用いることでMACベースよりフローエントリ数の削減も可能である※具体的には後日書きたい。
まだ明示的に経路選択を行う仕組みが実装できていないので、検討したい。
いろいろ課題と実験を溜め込んでしまっているので、定期的に更新していこうと思っている。
また、CloudySwitchも成長させたいのと、リファクタリングが遅れてしまっている。
インストーラも作る事も考えないと。。
Comments
Add Comment