SlideShare a Scribd company logo
EC2でマルチキャスト
~VRRPが使えないなんて誰が言った?~
安川 健太
Solutions Architect
Amazon Data Services Japan
自己紹介
名前
• 安川 健太
• アマゾンデータサービスジャパン
ソリューションアーキテクト
好きなAWSのサービス
• CloudFormation
ソーシャル
• @thekentiest
• www.facebook.com/kenta.yasukawa
趣味
• 車いじり
• パケットキャプチャ
本日の発表
EC2の上でレイヤーの低いところでいろいろ試してみた
体験談を皆さんと共有
• せいぜいL3とかL2とかくらいです
• L1までは行きません
(行けません)
VPC使ってますか?
AWSパブリック
クラウド環境
Amazon Virtual Private
Cloud (VPC)環境
ユーザごとの
プライベート領域で
インスタンスを利用
Privateネットワークの為だけじゃないVPC
VPCでは出来て、EC2-Classicでは出来ないこと
• 静的IPアドレス設定
• 複数IPアドレス
• 複数ネットワークインターフェース
• セキュリティグループのメンバーシップの動的変更
• セキュリティグループによるOutboundフィルタリング
• NACL
• Subnetを区切って利用
• …
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.github.com/kntyskw/5231182
動作確認したのでカーネルで動かす方法を模
索
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:
同一サブネット内の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.24.1
Primary:
172.31.24.100
Primary:
172.31.24.101
VRRP
平常時 リクエストの流
れ
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
フェイルオーバー時 リクエストの流
れ
EC2でIPアドレスを引き継ぐには
VPCはARPベースで動いているわけではない
• 明示的なIPアドレスとENIの対応関係を要プロビジョニング
フェイルオーバ時にAWS APIを叩いてVIPをMasterに要再割当て
https://gist.github.com/kntyskw/5417140
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
}
LVSの利点
UDPのロードバランシングが出来る
TCPをTerminateする必要がない
• コネクション数の影響が小さい
L7を見ない&カーネルで処理が完結
• 低遅延
• 高スループット
簡単な性能比較
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
L2に依存する場合の注意点
VPC SubnetはAZを超えられない
違うAZのSubnetに接続されたENIはAttach出来ない
Availability Zone Availability Zone
VPC Subnet
Availability Zone Availability Zone
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
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
まとめ
VPCならL2まで自由が利く
• L2 NAT
• 擬似ブロードキャスト、などなど
擬似ブロードキャストを使えばVRRPも動く
• LVS + Keepalivedで検証
• 設定例や注意点など
LVSは用途が合えばよい選択肢
• Multi-AZ化も忘れずに
VPCを使ってより柔軟なシステム構築を!
EC2でマルチキャスト

More Related Content

PPTX
[社内勉強会]ELBとALBと数万スパイク負荷テスト
PDF
20190806 AWS Black Belt Online Seminar AWS Glue
PDF
20190522 AWS Black Belt Online Seminar AWS Step Functions
PDF
JenkinsとCodeBuildとCloud Buildと私
PDF
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
PDF
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
PDF
AWS Black Belt Techシリーズ リザーブドインスタンス & スポットインスタンス
PDF
AWSのログ管理ベストプラクティス
[社内勉強会]ELBとALBと数万スパイク負荷テスト
20190806 AWS Black Belt Online Seminar AWS Glue
20190522 AWS Black Belt Online Seminar AWS Step Functions
JenkinsとCodeBuildとCloud Buildと私
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Techシリーズ リザーブドインスタンス & スポットインスタンス
AWSのログ管理ベストプラクティス

What's hot (20)

PDF
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
PDF
Tackling Complexity
PDF
怖くないSpring Bootのオートコンフィグレーション
PPTX
20220409 AWS BLEA 開発にあたって検討したこと
PDF
実環境にTerraform導入したら驚いた
PDF
20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
PDF
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
DevOps with Database on AWS
PDF
AWS X-Rayによるアプリケーションの分析とデバッグ
PDF
モバイルアプリ向けAWSネイティブアーキテクチャ
PDF
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
PDF
これからのネイティブアプリにおけるOpenID Connectの活用
PDF
Effective Data Lakes - ユースケースとデザインパターン
PDF
AWS Black Belt Online Seminar 2016 AWS CloudFormation
PPTX
基礎から学ぶ? EC2マルチキャスト
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PPTX
Cloud Firestore を使って、Polling をやめたい話
PDF
EC2でkeepalived+LVS(DSR)
PDF
マルチテナント化で知っておきたいデータベースのこと
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Tackling Complexity
怖くないSpring Bootのオートコンフィグレーション
20220409 AWS BLEA 開発にあたって検討したこと
実環境にTerraform導入したら驚いた
20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
コンテナ未経験新人が学ぶコンテナ技術入門
DevOps with Database on AWS
AWS X-Rayによるアプリケーションの分析とデバッグ
モバイルアプリ向けAWSネイティブアーキテクチャ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
これからのネイティブアプリにおけるOpenID Connectの活用
Effective Data Lakes - ユースケースとデザインパターン
AWS Black Belt Online Seminar 2016 AWS CloudFormation
基礎から学ぶ? EC2マルチキャスト
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Cloud Firestore を使って、Polling をやめたい話
EC2でkeepalived+LVS(DSR)
マルチテナント化で知っておきたいデータベースのこと
Ad

EC2でマルチキャスト