SDN/Openflowって、いろいろ出ているけど、
どういうケースにおいて、どういう製品を組み合わせたら
実現できるのか?っていうのが、よくわからないよね。
で、ソフトウェアには、共通問題というのがある。
酒屋倉庫問題、図書館問題、話題沸騰ポットなど・・・
共通の問題をいろいろな手法・言語・方法論で解くことによって、
比較ができるわけです。
ということで、
SDN/Openflowの共通問題
といいますか、こういうことできるの?と考える、共通問題を作ってみた。
■SDN/Openflowの共通問題を作ってみた!
そこで、SDN/Openflowの共通問題を作ってみた!
【お題】
スイッチに2台にそれぞれPCが繋がっていて、
それらをまとめるルーターが1台ある。
普段は、
のように、左のスイッチから右のスイッチにトラフィックは流れる。
(ルーター→右側のスイッチは使っていない。
また、スイッチ間に2本の線が繋がっているが、trunkで、一方は予備。
使っていない)
ルーターは、外部のインターネットに繋がっている。
ここで、以下のように、
PCそれぞれにスイッチが繋がっているのだから、
ルーターで、スイッチのパケットを振り分けてほしい。
ただし
【条件】
(1)普段は、はじめのように
・左のスイッチから右のスイッチにトラフィックは流れ
・ルーター→右スイッチの線、スイッチ間の一方の線は予備
(2)回線が混んできたら(ということを誰かが認識する)
ルーターが左スイッチ、右スイッチを切り分け、
ルーター→各スイッチ→PCに流れることにする
(このとき、スイッチ間の2本の線は使わない)
混雑が解消したら、元の(1)に戻す。
(3)回線の混み具合に関係なく、ブラウザからの指示で、
強制的に(1)のルートから(2)のルートに移行する
あるいは(2)のルートから(1)のルートに移行する
なお、図は、ルーター、スイッチを分かりやすくしているために、
その形で書いているのであって、実際には、そこにPCを置いても、
PCは1台で、仮想的に(virtual boxとかで)複数のノードを作成しても
かまわない。
これ以外に必要なものは(監視用PCなど)、適宜付け加えてよい。
■こんな構成を考えた
できるかな・・・?
赤字が役割、青字がオープンソースでやった場合のソフト名
きっと、コントローラーとスイッチがいるんだよ。
コントローラーは、流行のtremaにして、スイッチも流行のOpen vSwitchにしてみた
接続方法は、
Trema 日記 Openvswitch を OpenFlow スイッチとして使う
http://trema.hatenablog.jp/entry/20120403/1333451177
参照
で、きっと回線の混み具合とかは、それぞれのスイッチのトラフィック量が
ある一定値以上だったら、SNMPトラップで、なにか上げてもらう・・・
という考えもありかもしれないけど、
ここはZABBIXから、SNMPポーリングでトラフィック量をもらうことにした
ということで、SNMPも、スイッチ側にいれてみた。
SNMP を使用した帯域幅使用率の計算方法
http://www.cisco.com/cisco/web/support/JP/100/1000/1000551_calculate_bandwidth_snmp.html
で、どのくらいのトラフィック量だとまずいかは計算できる
で、監視用にZABBIXをおく。
なぜ、SNMPトラップを使わず、トラフィック量を常に求めているかというと、
・混雑しているときはSNMPトラップでできるかもしれない。
・しかし、混雑→平常にもどすとき、左と右の両方の容量がわからないと、
平常時に戻したと単に、また混雑に切り替わり・・・
とかいうこともあるかもしれない。
十分に混雑が収束したということを検知するには、たぶん、常に
双方のトラフィック量を監視していないと分からないだろうということで、
今回はSNMPトラップでなく、ZABBIXのSNMPポーリングにした。
ということで、監視用にZABBIXをいれる。
ZABBIXで監視、問題が起こったら、ZABBIXからシェルがたたける・・・とたしか思った。
でシェルをたたく。
そうすると、そのシェルから、REST APIを使って、trema(SDNコントローラー)を
制御する。tremaのREST APIは、
Sliceable Switch を使う (その2)
http://trema.hatenablog.jp/entry/20120713/1342172735
に書いてある。Apache(というかHTTPサーバー)がいりますね。
さらに、HTML+Javascriptを使って、強制変更(ブラウザからの指示で
回線操作、【条件】の(3))を行う。
こんなかんじでできるかなあ。。。?
どういうケースにおいて、どういう製品を組み合わせたら
実現できるのか?っていうのが、よくわからないよね。
で、ソフトウェアには、共通問題というのがある。
酒屋倉庫問題、図書館問題、話題沸騰ポットなど・・・
共通の問題をいろいろな手法・言語・方法論で解くことによって、
比較ができるわけです。
ということで、
SDN/Openflowの共通問題
といいますか、こういうことできるの?と考える、共通問題を作ってみた。
■SDN/Openflowの共通問題を作ってみた!
そこで、SDN/Openflowの共通問題を作ってみた!
【お題】
スイッチに2台にそれぞれPCが繋がっていて、
それらをまとめるルーターが1台ある。
普段は、
のように、左のスイッチから右のスイッチにトラフィックは流れる。
(ルーター→右側のスイッチは使っていない。
また、スイッチ間に2本の線が繋がっているが、trunkで、一方は予備。
使っていない)
ルーターは、外部のインターネットに繋がっている。
ここで、以下のように、
PCそれぞれにスイッチが繋がっているのだから、
ルーターで、スイッチのパケットを振り分けてほしい。
ただし
【条件】
(1)普段は、はじめのように
・左のスイッチから右のスイッチにトラフィックは流れ
・ルーター→右スイッチの線、スイッチ間の一方の線は予備
(2)回線が混んできたら(ということを誰かが認識する)
ルーターが左スイッチ、右スイッチを切り分け、
ルーター→各スイッチ→PCに流れることにする
(このとき、スイッチ間の2本の線は使わない)
混雑が解消したら、元の(1)に戻す。
(3)回線の混み具合に関係なく、ブラウザからの指示で、
強制的に(1)のルートから(2)のルートに移行する
あるいは(2)のルートから(1)のルートに移行する
なお、図は、ルーター、スイッチを分かりやすくしているために、
その形で書いているのであって、実際には、そこにPCを置いても、
PCは1台で、仮想的に(virtual boxとかで)複数のノードを作成しても
かまわない。
これ以外に必要なものは(監視用PCなど)、適宜付け加えてよい。
■こんな構成を考えた
できるかな・・・?
赤字が役割、青字がオープンソースでやった場合のソフト名
きっと、コントローラーとスイッチがいるんだよ。
コントローラーは、流行のtremaにして、スイッチも流行のOpen vSwitchにしてみた
接続方法は、
Trema 日記 Openvswitch を OpenFlow スイッチとして使う
http://trema.hatenablog.jp/entry/20120403/1333451177
参照
で、きっと回線の混み具合とかは、それぞれのスイッチのトラフィック量が
ある一定値以上だったら、SNMPトラップで、なにか上げてもらう・・・
という考えもありかもしれないけど、
ここはZABBIXから、SNMPポーリングでトラフィック量をもらうことにした
ということで、SNMPも、スイッチ側にいれてみた。
SNMP を使用した帯域幅使用率の計算方法
http://www.cisco.com/cisco/web/support/JP/100/1000/1000551_calculate_bandwidth_snmp.html
で、どのくらいのトラフィック量だとまずいかは計算できる
で、監視用にZABBIXをおく。
なぜ、SNMPトラップを使わず、トラフィック量を常に求めているかというと、
・混雑しているときはSNMPトラップでできるかもしれない。
・しかし、混雑→平常にもどすとき、左と右の両方の容量がわからないと、
平常時に戻したと単に、また混雑に切り替わり・・・
とかいうこともあるかもしれない。
十分に混雑が収束したということを検知するには、たぶん、常に
双方のトラフィック量を監視していないと分からないだろうということで、
今回はSNMPトラップでなく、ZABBIXのSNMPポーリングにした。
ということで、監視用にZABBIXをいれる。
ZABBIXで監視、問題が起こったら、ZABBIXからシェルがたたける・・・とたしか思った。
でシェルをたたく。
そうすると、そのシェルから、REST APIを使って、trema(SDNコントローラー)を
制御する。tremaのREST APIは、
Sliceable Switch を使う (その2)
http://trema.hatenablog.jp/entry/20120713/1342172735
に書いてある。Apache(というかHTTPサーバー)がいりますね。
さらに、HTML+Javascriptを使って、強制変更(ブラウザからの指示で
回線操作、【条件】の(3))を行う。
こんなかんじでできるかなあ。。。?