Your SlideShare is downloading. ×
EC2でマルチキャスト
~VRRPが使えないなんて誰が言った?~
安川 健太
Solutions Architect
Amazon Data Services Japan
自己紹介
名前
• 安川 健太
• アマゾンデータサービスジャパン
ソリューションアーキテクト
好きなAWSのサービス
• CloudFormation
ソーシャル
• @thekentiest
• www.facebook.com/kenta...
本日の発表
EC2の上でレイヤーの低いところでいろいろ試してみた
体験談を皆さんと共有
• せいぜいL3とかL2とかくらいです
• L1までは行きません
(行けません)
VPC使ってますか?
AWSパブリック
クラウド環境
Amazon Virtual Private
Cloud (VPC)環境
ユーザごとの
プライベート領域で
インスタンスを利用
Privateネットワークの為だけじゃないVPC
VPCでは出来て、EC2-Classicでは出来ないこと
• 静的IPアドレス設定
• 複数IPアドレス
• 複数ネットワークインターフェース
• セキュリティグループのメンバーシップの動的変更...
EC2インスタンスから見たL2の違い
EC2-Classicの場合
• どんなARPリクエストを送ってもいつも同じ答え
EC2-VPCの場合
• 見慣れた出力結果!
VPCならいろいろL2を使ったトリックが使
えそう
L2 NAT (ebtablesとか)
L2のアドレッシングに頼るソフトウェア (LVSとか)
なんちゃってIPブロードキャスト/マルチキャスト
これデモしてみます
擬似L2ブロードキャストの原理
VPC Subnet
IPマルチキャス
ト
Dst: Ethernetブロードキャストアドレ
ス
Src: 送信者のMACアドレス
コピー
ユニキャスト化!
注:ENIのSrc/Destチェックは無効化すること
まずはProof of Concept
パケットキャプチャによる実装なら簡単
• 通過パケットの少ないENIで動かせば実用的にもそんなに問題ない
• supervisordなどでデーモンとして動かせばそこそこ使える
https://gist.g...
動作確認したのでカーネルで動かす方法を模
索
tc mirred + pedit + csumでできます
Tcをその目的で使うためにコンフィグするシェルスクリプト
https://gist.github.com/kntyskw/5633755
...
同一サブネット内のENIのMACアドレス取
得
AWS APIを使えば取得可能
• 例:
https://gist.github.com/kntyskw/5413698
実際役に立つのか?
受信者分コピーするオーバー
ヘッドは無視できないよね
けど低頻度のメッセージング
用途ならいけるのでは?
その通り。
IPTVみたい
のは厳しい
確かに
ってことはみんな使いたがっ
てたけどマルチキャスト出来
ないから諦めて...
みんな大好きVRRPを動かそう!
Virtual Router Redundancy Protocol (VRRP)とは?
• 仮想IPアドレスを使ったL3ノードの冗長化のためのプロトコル
• グループ内のノードはIPマルチキャストでハートビート
LVS + Keepalivedで検証してみた
VPC Subnet
LVS +
keepalived
LVS +
keepalived
WebWebWeb
172.31.0.0/20
Elastic IP
Secondary:
172.31....
LVS + Keepalivedで検証してみた
VPC Subnet
LVS +
keepalived
LVS +
keepalived
WebWebWeb
172.31.0.0/20
Elastic IP
Secondary:
172.31....
EC2でIPアドレスを引き継ぐには
VPCはARPベースで動いているわけではない
• 明示的なIPアドレスとENIの対応関係を要プロビジョニング
フェイルオーバ時にAWS APIを叩いてVIPをMasterに要再割当て
https://gis...
Keepalivedの設定例
Master昇格時に実行するスクリプトを指定
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 100
a...
LVSの利点
UDPのロードバランシングが出来る
TCPをTerminateする必要がない
• コネクション数の影響が小さい
L7を見ない&カーネルで処理が完結
• 低遅延
• 高スループット
簡単な性能比較
LVS v.s. HAProxy
• 両者ともにm1.small
• BeesWithMachineGunsで4 KB程度のHTMLファイルの取得テス
ト
• Each of 8 bees will fire 2000 roun...
L2に依存する場合の注意点
VPC SubnetはAZを超えられない
違うAZのSubnetに接続されたENIはAttach出来ない
Availability Zone Availability Zone
VPC Subnet
Availabi...
Multi AZの場合の構成案
VPC Subnet
LVS +
keepalived
LVS +
keepalived
WebWebWeb
172.31.0.0/20
Elatic IP
Secondary:
172.31.24.1
Prim...
Multi AZの場合の構成案
VPC Subnet
LVS +
keepalived
LVS +
keepalived
WebWebWeb
172.31.0.0/20
Elatic IP
Secondary:
172.31.24.1
Prim...
まとめ
VPCならL2まで自由が利く
• L2 NAT
• 擬似ブロードキャスト、などなど
擬似ブロードキャストを使えばVRRPも動く
• LVS + Keepalivedで検証
• 設定例や注意点など
LVSは用途が合えばよい選択肢
• Mu...
EC2でマルチキャスト
Upcoming SlideShare
Loading in...5
×

EC2でマルチキャスト

4,889

Published on

Published in: Technology

Transcript of "EC2でマルチキャスト"

  1. 1. EC2でマルチキャスト ~VRRPが使えないなんて誰が言った?~ 安川 健太 Solutions Architect Amazon Data Services Japan
  2. 2. 自己紹介 名前 • 安川 健太 • アマゾンデータサービスジャパン ソリューションアーキテクト 好きなAWSのサービス • CloudFormation ソーシャル • @thekentiest • www.facebook.com/kenta.yasukawa 趣味 • 車いじり • パケットキャプチャ
  3. 3. 本日の発表 EC2の上でレイヤーの低いところでいろいろ試してみた 体験談を皆さんと共有 • せいぜいL3とかL2とかくらいです • L1までは行きません (行けません)
  4. 4. VPC使ってますか? AWSパブリック クラウド環境 Amazon Virtual Private Cloud (VPC)環境 ユーザごとの プライベート領域で インスタンスを利用
  5. 5. Privateネットワークの為だけじゃないVPC VPCでは出来て、EC2-Classicでは出来ないこと • 静的IPアドレス設定 • 複数IPアドレス • 複数ネットワークインターフェース • セキュリティグループのメンバーシップの動的変更 • セキュリティグループによるOutboundフィルタリング • NACL • Subnetを区切って利用 • …
  6. 6. EC2インスタンスから見たL2の違い EC2-Classicの場合 • どんなARPリクエストを送ってもいつも同じ答え EC2-VPCの場合 • 見慣れた出力結果!
  7. 7. VPCならいろいろL2を使ったトリックが使 えそう L2 NAT (ebtablesとか) L2のアドレッシングに頼るソフトウェア (LVSとか) なんちゃってIPブロードキャスト/マルチキャスト これデモしてみます
  8. 8. 擬似L2ブロードキャストの原理 VPC Subnet IPマルチキャス ト Dst: Ethernetブロードキャストアドレ ス Src: 送信者のMACアドレス コピー ユニキャスト化! 注:ENIのSrc/Destチェックは無効化すること
  9. 9. まずはProof of Concept パケットキャプチャによる実装なら簡単 • 通過パケットの少ないENIで動かせば実用的にもそんなに問題ない • supervisordなどでデーモンとして動かせばそこそこ使える https://gist.github.com/kntyskw/5231182
  10. 10. 動作確認したのでカーネルで動かす方法を模 索 tc mirred + pedit + csumでできます Tcをその目的で使うためにコンフィグするシェルスクリプト https://gist.github.com/kntyskw/5633755 パケットキャプチャベースに比べて高い性能、プロセス監視不要 若干わかりにくい構成に Tc mirredがパケットループが起こる可能性のある構成を許さないので2つの ENIを用意して、パケットのコピー元とコピー先が異なるような設定が必要 # ec2_multicast.sh <interface to grab multicast packets from> <interface to send modified packets to> [target MAC address 1] [target MAC address 2] ... # ec2_multicast.sh eth0 eth1 00:11:22:33:44:55 66:77:88:99:aa:bb Example: Usage:
  11. 11. 同一サブネット内のENIのMACアドレス取 得 AWS APIを使えば取得可能 • 例: https://gist.github.com/kntyskw/5413698
  12. 12. 実際役に立つのか? 受信者分コピーするオーバー ヘッドは無視できないよね けど低頻度のメッセージング 用途ならいけるのでは? その通り。 IPTVみたい のは厳しい 確かに ってことはみんな使いたがっ てたけどマルチキャスト出来 ないから諦めてたアレがいけ る? 確かに、ア レいけるか も ある日の自問自答の様子
  13. 13. みんな大好きVRRPを動かそう! Virtual Router Redundancy Protocol (VRRP)とは? • 仮想IPアドレスを使ったL3ノードの冗長化のためのプロトコル • グループ内のノードはIPマルチキャストでハートビート
  14. 14. LVS + Keepalivedで検証してみた VPC Subnet LVS + keepalived LVS + keepalived WebWebWeb 172.31.0.0/20 Elastic IP Secondary: 172.31.24.1 Primary: 172.31.24.100 Primary: 172.31.24.101 VRRP 平常時 リクエストの流 れ
  15. 15. LVS + Keepalivedで検証してみた VPC Subnet LVS + keepalived LVS + keepalived WebWebWeb 172.31.0.0/20 Elastic IP Secondary: 172.31.24.1 Primary: 172.31.24.100 Primary: 172.31.24.101 VRRP フェイルオーバー時 リクエストの流 れ
  16. 16. EC2でIPアドレスを引き継ぐには VPCはARPベースで動いているわけではない • 明示的なIPアドレスとENIの対応関係を要プロビジョニング フェイルオーバ時にAWS APIを叩いてVIPをMasterに要再割当て https://gist.github.com/kntyskw/5417140
  17. 17. Keepalivedの設定例 Master昇格時に実行するスクリプトを指定 vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.31.24.1 dev eth0 } notify_master /etc/keepalived/assign_vip.sh }
  18. 18. LVSの利点 UDPのロードバランシングが出来る TCPをTerminateする必要がない • コネクション数の影響が小さい L7を見ない&カーネルで処理が完結 • 低遅延 • 高スループット
  19. 19. 簡単な性能比較 LVS v.s. HAProxy • 両者ともにm1.small • BeesWithMachineGunsで4 KB程度のHTMLファイルの取得テス ト • Each of 8 bees will fire 2000 rounds, 10 at a time. 0 500 1000 1500 2000 2500 3000 3500 4000 4500 LVS HAProxy Requestperseconds Throughput 0 10 20 30 40 50 60 Average tp50 tp90 ResponseTimein[ms] Response Time LVS HAProxy
  20. 20. L2に依存する場合の注意点 VPC SubnetはAZを超えられない 違うAZのSubnetに接続されたENIはAttach出来ない Availability Zone Availability Zone VPC Subnet Availability Zone Availability Zone
  21. 21. Multi AZの場合の構成案 VPC Subnet LVS + keepalived LVS + keepalived WebWebWeb 172.31.0.0/20 Elatic IP Secondary: 172.31.24.1 Primary: 172.31.24.100 Primary: 172.31.24.1 01 VRRP 複数IPアドレスでサービス出来る場合 • DNS RRでリクエストを振り分け • Route53のHealth Checkを組み合わせて健全性を維持 リクエストの流 れ VPC Subnet LVS + keepalived LVS + keepalived WebWebWeb 172.31.64.0/20 Secondary: 172.31.78.1 Primary: 172.31.78. 100 Primary: 172.31.78.101 VRRP Availability Zone Availability Zone Amazon Route 53
  22. 22. Multi AZの場合の構成案 VPC Subnet LVS + keepalived LVS + keepalived WebWebWeb 172.31.0.0/20 Elatic IP Secondary: 172.31.24.1 Primary: 172.31.24.100 Primary: 172.31.24.1 01 VRRP 単一のIPアドレスに限る必要がある場合 • VRRPのマスターノード間で別途VIPを使ったハートビートを行なっ てEIPをフェイルオーバ • 普段はスタンバイ側はVRRPマスタのみで、フェイルオーバ時にバッ クエンドやVRRPバックアップを起動 リクエストの流 れ Availability Zone Availability Zone VPC Subnet LVS + keepalived WebWebWeb 172.31.64.0/20 Primary: 172.31.78.101 VRRP LVS + keepalived Secondary: 172.31.78.1 Primary: 172.31.78. 100
  23. 23. まとめ VPCならL2まで自由が利く • L2 NAT • 擬似ブロードキャスト、などなど 擬似ブロードキャストを使えばVRRPも動く • LVS + Keepalivedで検証 • 設定例や注意点など LVSは用途が合えばよい選択肢 • Multi-AZ化も忘れずに VPCを使ってより柔軟なシステム構築を!

×