オープンソースによるOpenFlow1.3環境の構築2013.5.27@ttsubo1- Group Tableの活用事例 -
自己紹介2・数年前は、通信事業者向けネットワークエンジニアでした。・最近は、データセンタ系ネットワークエンジニアに軸足のシフトを試みてます。IaaS管理基盤技術として、OpenStack等を勉強中。・さらに「これからの時代、ネットワーク屋も、プ...
効率的なトラフィックフロー制御を可能とするOpenFlow新技術が規定されているOpenFlow1.3がリリースされてから、1年が経過しました。でも、その新技術の活用方法などを、OpenFlowコミュニティで共有できる場がありません。OpenF...
4OpenFlow1.3では、OpenFlow1.0課題克服を念頭にしたプロアクティブベースのフローエントリ機構が強化されております。OpenFlowは、C-Plane/D-Plane分離技術と言われますが、D-Planeの効率化を図るためには...
OpenFlow環境構築にあたって• オープンソース活用を大前提にTryしてみる!• 最新のOpenFlow1.3で試してみる!• OpenFlowらしい特性を確認してみる!5OpenFlow新技術として、Multi Table、Group T...
OpenFlow1.3環境を作ってみました..6OFSHOST-1HOST-2HOST-3オープンソースな最新OpenFlow実装ソフトウェアって、まだまだ少ないですね...OFCOpenFlowメッセージCPqD/ofsoftswitch13...
OpenFlowによる負荷分散/冗長構成7ECMP,リンクアグリゲーションなど通信方式による冗長構成(負荷分散,ACT/SBY構成)の構築下において、 NW機器自らによるネットワーク稼働状況に応じた通信経路制御が実施されてきました。Inport...
GroupTable活用事例18Multicastな同報通信SenderSender(映像配信サーバ)よりReceiver(ライアントPC)へのMulticastルーティングを構築するモデル。同報通信なパケットコピー制御はOpenFlowのGr...
9FlowTableGroupTableOFCOpenFlowメッセージOFSInportOFC側からプロアクティブなFlowTable/GroupTableを設定することにより、OFSのInportで受信した通信パケットを、複数Outport...
Groupタイプ(All)を活用することにより、Senderから2台のReceiverに対して、Multicastな同報通信が動作可能であることを確認できた。10SenderReceiver1Receiver2239.255.0.1Groupタ...
GroupTable活用事例211サーバ冗長構成(フェイルオーバ)クライアントPCサーバ1サーバ2192.168.1.1192.168.1.1クライアントPCからサーバへのアクセス形態として、サーバ側でフェールオーバな冗長構成を構築するモデル。...
12FlowTableGroupTableOFCOpenFlowメッセージOFSInportOutportGroupタイプ(FastFailover)を用いたフロー制御Outportのリンク断(administrative down)時に、切り...
クライアントPCWebサーバ1Webサーバ213Groupタイプ(FastFailover)の動作確認Webサーバ1向けアクセス通信経路にて故障が発生した場合には、接続先をWebサーバ1からWebサーバ2に振替えることにより、クライアント∼We...
14NWロードバランサーによるサーバ負荷分散クライアントPCクライアントPCからサーバへのアクセス形態として、複数サーバ配備による負荷分散な環境を構築するモデル。サーバへの負荷分散なアクセス制御は、OpenFlowのGroupタイプ(Selec...
15FlowTableGroupTableOFCOpenFlowメッセージOFSInportOutportGroupタイプ(Select)を用いたフロー制御負荷分散の配分比率もパラメータ指定が可能OFC側からプロアクティブなFlowTable/...
16クライアントPC サーバ1サーバ2テキストICMP Echo req(以下、省略)2台のサーバでICMPパケットを交互に受信できた。Groupタイプ(Select) の動作確認(ICMPの場合)ICMP Echo reqICMP Echo ...
17「OFS側では、クライアントPCからのWeb閲覧のアクセス毎に、サーバ負荷分散が図れるように接続先Webサーバが交互に切り替わってトラフィックフローを制御する」ような動作を想定しておりました。クライアントPC Webサーバ1Webサーバ2W...
18しかしながら、実際、クライアントPCからWeb閲覧を行うと、「接続がリセットされました」というエラーメッセージが表示されてしまいました。クライアントPC Webサーバ1Webサーバ2テキストGroupタイプ(Select) の動作確認(We...
OFS側では、 TCPセッション管理を想定せず、単純なラウンドロビンによる負荷分散を実施しているのみであるため、Web閲覧に関わるhttp通信シーケンスが、プロトコル違反と判定されてしまった...19クライアントPCWebサーバ1Webサーバ2...
20OpenFlowといえば、ネットワーク挙動をプログラマブルに記述できるので、従来の通信技術では実現が難しかった柔軟なトラフィックフロー制御が可能となる技術と言われますよね。さらに、最近のSDN/OpenFlow業界でのWeb/雑誌記事では、...
おわりに...21一般に、OpenFlow技術ネタを取り上げたセミナ講演資料/Web記事を最近よく見掛けるようになりました。でも、そこでの記載内容を鵜呑みにしてもよいのでしょうか?(技術コンセプトと実装レベルに乖離があるかもしれません)そこで、...
22以下、補足情報
23FlowTableGroupTable123OFSInportOutport{table="0", match="oxm{eth_dst="01:00:5e:7f:00:01", in_port="1",ipv4_dst="239.255....
24FlowTableGroupTable123OFSInportOutportFlow/GroupTable(FastFailover)の設定サンプル{table="0", match="oxm{eth_dst="00:00:00:00:00...
25FlowTableGroupTable123OFSInportOutportFlow/GroupTable(Select)の設定サンプル{table="0", match="oxm{eth_dst="00:00:00:00:00:01", ...
Upcoming SlideShare
Loading in …5
×

OpenFlow Group Table

3,665 views
3,459 views

Published on

オープンソースによる OpenFlow1.3環境の構築
- Group Tableの活用事例 -

Published in: Technology

OpenFlow Group Table

  1. 1. オープンソースによるOpenFlow1.3環境の構築2013.5.27@ttsubo1- Group Tableの活用事例 -
  2. 2. 自己紹介2・数年前は、通信事業者向けネットワークエンジニアでした。・最近は、データセンタ系ネットワークエンジニアに軸足のシフトを試みてます。IaaS管理基盤技術として、OpenStack等を勉強中。・さらに「これからの時代、ネットワーク屋も、プログラミング 必要だよね。」という風潮に感化されて、OpenFlowプログラ ミングも勉強中。
  3. 3. 効率的なトラフィックフロー制御を可能とするOpenFlow新技術が規定されているOpenFlow1.3がリリースされてから、1年が経過しました。でも、その新技術の活用方法などを、OpenFlowコミュニティで共有できる場がありません。OpenFlow新技術が活用されていない状況は、もったいないと感じています。そこで、OpenFlow新技術の活用事例を、みなさんと共有したくて、OpenFlow1.3環境を構築してみました。 3動機付け
  4. 4. 4OpenFlow1.3では、OpenFlow1.0課題克服を念頭にしたプロアクティブベースのフローエントリ機構が強化されております。OpenFlowは、C-Plane/D-Plane分離技術と言われますが、D-Planeの効率化を図るためには、プロアクティブなフローエントリ機構の適用が必須だと思います。(さらに、リアクティブな特性を活用したC-Planeの自動化/自律化も必要ですね)効率的なトラフィックフロー制御とはリアクティブベース• OpenFlowスイッチ側での転送処理が完結せず、Packet-In動作によるコントローラへの問い合わせ処理がオーバヘッドとなり、NW全体のパフォーマンスが劣化する(=スケールしない)• 既存のネットワークとの相互接続時において、NWアドレス学習などC−Plane連携の活用事例が顕在化されつつある(ARP, BGP, OSPF, IGMP...)プロアクティブベース• OpenFlowスイッチ側での転送処理が完結するため、NW全体のパフォーマンス向上が期待できる• Multi Table、Group Tableなどの新技術が活用することにより、Flow数の肥大化を抑止することも可能となる
  5. 5. OpenFlow環境構築にあたって• オープンソース活用を大前提にTryしてみる!• 最新のOpenFlow1.3で試してみる!• OpenFlowらしい特性を確認してみる!5OpenFlow新技術として、Multi Table、Group Table、Meter、Multi Controller...などが挙げられますが、今回は、OpenFlowプロアクティブなフロー制御を実現する「GroupTable」を中心に、動作確認してみました。
  6. 6. OpenFlow1.3環境を作ってみました..6OFSHOST-1HOST-2HOST-3オープンソースな最新OpenFlow実装ソフトウェアって、まだまだ少ないですね...OFCOpenFlowメッセージCPqD/ofsoftswitch13Ver:1.9
  7. 7. OpenFlowによる負荷分散/冗長構成7ECMP,リンクアグリゲーションなど通信方式による冗長構成(負荷分散,ACT/SBY構成)の構築下において、 NW機器自らによるネットワーク稼働状況に応じた通信経路制御が実施されてきました。Inport Outport柔軟な負荷分散/冗長構成制御を実現できるようフロー設定を行うGroupTable従来ベースでの負荷分散/冗長構成OpenFlowベースでの負荷分散/冗長構成OpenFlowでも、柔軟なトラフィックフロー制御によるマルチパス環境構築が可能です。OpenFlowコントローラが、プロアクティブに負荷分散/冗長構成のフロー定義をGroupTableに設定することにより、ネットワーク稼働状況に応じた通信経路制御が可能となります。
  8. 8. GroupTable活用事例18Multicastな同報通信SenderSender(映像配信サーバ)よりReceiver(ライアントPC)へのMulticastルーティングを構築するモデル。同報通信なパケットコピー制御はOpenFlowのGroupタイプ(All)でトラフィクフローを制御する。Receiver1(クライアントPC)Receiver2(クライアントPC)OpenFlowスイッチがマルチキャストルーティングに従った同報通信の制御を実施するMulticastRouter
  9. 9. 9FlowTableGroupTableOFCOpenFlowメッセージOFSInportOFC側からプロアクティブなFlowTable/GroupTableを設定することにより、OFSのInportで受信した通信パケットを、複数Outportに同報送信するフロー制御を実現する仕組み OutportGroupタイプ(All)を用いたフロー制御Output毎にset fieldを用いたパケットヘッダの書き換えが可能!!
  10. 10. Groupタイプ(All)を活用することにより、Senderから2台のReceiverに対して、Multicastな同報通信が動作可能であることを確認できた。10SenderReceiver1Receiver2239.255.0.1Groupタイプ(All)の動作確認
  11. 11. GroupTable活用事例211サーバ冗長構成(フェイルオーバ)クライアントPCサーバ1サーバ2192.168.1.1192.168.1.1クライアントPCからサーバへのアクセス形態として、サーバ側でフェールオーバな冗長構成を構築するモデル。Act系からSby系への通信経路の振替え処理は、OpenFlowのGroupタイプ(FastFailover)でトラフィクフローを制御する。OpenFlowスイッチが冗長制御(Act/Sby)を実施するFailover192.168.0.1
  12. 12. 12FlowTableGroupTableOFCOpenFlowメッセージOFSInportOutportGroupタイプ(FastFailover)を用いたフロー制御Outportのリンク断(administrative down)時に、切り替えを実施するOFC側からプロアクティブなFlowTable/GroupTableを設定することにより、OFSのInportで受信した通信パケットを、動作可能なOutportに送信するフロー制御を実現する仕組み(OutPortが動作不可能と判断できるよう、故障検出もOFS側で行う) 
  13. 13. クライアントPCWebサーバ1Webサーバ213Groupタイプ(FastFailover)の動作確認Webサーバ1向けアクセス通信経路にて故障が発生した場合には、接続先をWebサーバ1からWebサーバ2に振替えることにより、クライアント∼Webサーバ間の通信処理が再開可能であることが確認できた。クライアントPCWebサーバ1Webサーバ2Webサーバ1向けアクセスの通信故障
  14. 14. 14NWロードバランサーによるサーバ負荷分散クライアントPCクライアントPCからサーバへのアクセス形態として、複数サーバ配備による負荷分散な環境を構築するモデル。サーバへの負荷分散なアクセス制御は、OpenFlowのGroupタイプ(Select)でトラフィクフローを制御する。サーバ1サーバ2LoadBalancerOpenFlowスイッチが負荷分散制御実施する192.168.1.1192.168.1.1192.168.0.1GroupTable活用事例3
  15. 15. 15FlowTableGroupTableOFCOpenFlowメッセージOFSInportOutportGroupタイプ(Select)を用いたフロー制御負荷分散の配分比率もパラメータ指定が可能OFC側からプロアクティブなFlowTable/GroupTableを設定することにより、OFSのInportで受信した通信パケットを、複数Outportに負荷分散的に送信するフロー制御を実現する仕組み(負荷分散は、ラウンドロビン方式) 
  16. 16. 16クライアントPC サーバ1サーバ2テキストICMP Echo req(以下、省略)2台のサーバでICMPパケットを交互に受信できた。Groupタイプ(Select) の動作確認(ICMPの場合)ICMP Echo reqICMP Echo replyICMP Echo replyICMP Echo reqICMP Echo replyICMP Echo reqICMP Echo replyICMP Echo reqICMP Echo replyICMP Echo reqICMP Echo replyICMP Echo reqICMP Echo replyICMP Echo reqICMP Echo reply
  17. 17. 17「OFS側では、クライアントPCからのWeb閲覧のアクセス毎に、サーバ負荷分散が図れるように接続先Webサーバが交互に切り替わってトラフィックフローを制御する」ような動作を想定しておりました。クライアントPC Webサーバ1Webサーバ2Web表示結果が毎回異なる?Groupタイプ(Select) の動作確認(Webアクセスの場合)動作確認前の仮説
  18. 18. 18しかしながら、実際、クライアントPCからWeb閲覧を行うと、「接続がリセットされました」というエラーメッセージが表示されてしまいました。クライアントPC Webサーバ1Webサーバ2テキストGroupタイプ(Select) の動作確認(Webアクセスの場合)
  19. 19. OFS側では、 TCPセッション管理を想定せず、単純なラウンドロビンによる負荷分散を実施しているのみであるため、Web閲覧に関わるhttp通信シーケンスが、プロトコル違反と判定されてしまった...19クライアントPCWebサーバ1Webサーバ2テキストSYN SYNSYN/ACKSYN/ACKACK ACKhttp(get) http(get)RST RST(以下、省略)「接続がリセットされました」の発生原因
  20. 20. 20OpenFlowといえば、ネットワーク挙動をプログラマブルに記述できるので、従来の通信技術では実現が難しかった柔軟なトラフィックフロー制御が可能となる技術と言われますよね。さらに、最近のSDN/OpenFlow業界でのWeb/雑誌記事では、「ネットワーク仮想アプライアンス的な技術領域への適用」も期待される旨の文面をよく拝見します。でも、現在のOpenFlow規格では、TCPセッション管理を踏まえたトラフィックフロー制御まで言及しておりません。よって、NWロードバランサーやDPI(Deep Packet Inspection)のようなネットワーク仮想アプライアンス実現には、OpenFlowでは対応が難しいのではないでしょうか。OpenFlowの技術課題(私見)
  21. 21. おわりに...21一般に、OpenFlow技術ネタを取り上げたセミナ講演資料/Web記事を最近よく見掛けるようになりました。でも、そこでの記載内容を鵜呑みにしてもよいのでしょうか?(技術コンセプトと実装レベルに乖離があるかもしれません)そこで、OpenFlow技術の目利き力を養うためにも、自分自身でOpenFlowを動かしてみると、いろいろな発見に遭遇できると思います.....
  22. 22. 22以下、補足情報
  23. 23. 23FlowTableGroupTable123OFSInportOutport{table="0", match="oxm{eth_dst="01:00:5e:7f:00:01", in_port="1",ipv4_dst="239.255.0.1", ipv4_src="192.168.0.1", eth_type="0x800"}", dur_s="334",dur_ns="306000", prio="255", idle_to="0", hard_to="0", cookie="0x0", pkt_cnt="12242",byte_cnt="16624636", insts=[apply{acts=[group{id="1"}]}]}{type="all", group="1", buckets=[{w="0", wprt="any", wgrp="any",acts=[out{port="2"}, set_field{field:eth_src="00:00:00:00:00:01"}]}, {w="0",wprt="any", wgrp="any", acts=[out{port="3"},set_field{field:eth_src="00:00:00:00:00:02"}]}]}]}FlowModGroupMod事前に、OpenFlowコントローラから、OFS側でのMulticastの同報通信に関わるフロー設定を以下のように行った。Flow/GroupTable(All)の設定サンプル
  24. 24. 24FlowTableGroupTable123OFSInportOutportFlow/GroupTable(FastFailover)の設定サンプル{table="0", match="oxm{eth_dst="00:00:00:00:00:01", in_port="1",ipv4_dst="192.168.1.1", eth_src="52:54:00:2b:f5:78", eth_type="0x800"}", dur_s="57",dur_ns="416000", prio="255", idle_to="0", hard_to="0", cookie="0x0", pkt_cnt="27", byte_cnt="2646",insts=[apply{acts=[set_field{field:eth_src="00:00:00:00:00:02"}, group{id="1"}]}]}{type="ff", group="1", buckets=[{w="0", wprt="2", wgrp="any",acts=[out{port="2"}, set_field{field:eth_dst="52:54:00:a3:72:0e"}]}, {w="0",wprt="3", wgrp="any", acts=[out{port="3"},set_field{field:eth_dst="52:54:00:06:96:d8"}]}]}]}FlowModGroupMod事前に、OpenFlowコントローラから、OFS側でのAct/Sby冗長に関わるフロー設定を以下のように行った。
  25. 25. 25FlowTableGroupTable123OFSInportOutportFlow/GroupTable(Select)の設定サンプル{table="0", match="oxm{eth_dst="00:00:00:00:00:01", in_port="1",ipv4_dst="192.168.1.1", eth_src="52:54:00:2b:f5:78", eth_type="0x800"}", dur_s="35",dur_ns="155000", prio="255", idle_to="0", hard_to="0", cookie="0x0", pkt_cnt="21", byte_cnt="2058",insts=[apply{acts=[set_field{field:eth_src="00:00:00:00:00:02"}, group{id="1"}]}]}{type="sel", group="1", buckets=[{w="50", wprt="2", wgrp="any",acts=[out{port="2"}, set_field{field:eth_dst="52:54:00:a3:72:0e"}]}, {w="50",wprt="3", wgrp="any", acts=[out{port="3"},set_field{field:eth_dst="52:54:00:06:96:d8"}]}]}]}FlowModGroupMod事前に、OpenFlowコントローラから、OFS側でのトラフィック負荷分散処理に関わるフロー設定を以下のように行った。

×