Atom Login Admin

Above the clouds

RyuコントローラでMPLSをつかった経路制御(2)

written on Sunday,November 24,2013

今回はMPLSを使った経路制御で障害発生時の迂回について考察してみた。
OpenFlowコントローラはRyuを使用し、
ネットワークシュミレーションにはMininetを使用した。
コントローラは開発中のCloudySwitchを使用した。

目標

スイッチ間のリンクに障害が発生した場合、最小限のフローエントリ更新で、障害点を迂回し、通信が可能になること。

構想

図のように予め全経路のパスを構築しておくことで、
送信元のスイッチで経路を選択できる。
障害発生時に送信元のスイッチのみにフローエントリの更新が必要であるが、最小限にとどめることが可能である。
なお、送信元のスイッチの各パスへのラベルはグループテーブルのFast Failoverタイプとなっていて、自スイッチのポートに障害があった場合にFail Overできるようになっている。

OpenFlow MPLS1

【障害発生時】

OpenFlow MPLS2

障害発生時は影響するパスを算出し、送信元スイッチへ使用する経路を更新するフローエントリをコントローラから送出する。
影響するパスは使用されないこととなり、通信が可能となる。

結果

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

Login
This entry was tagged #OpenFlow #Ryu #MPLS