43
クックパッド株式会社 インフラストラクチャー部 部長 菅原 元気

クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

クックパッド株式会社

インフラストラクチャー部 部長

菅原 元気

Page 2: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

自己紹介

菅原元気 (@sgwr_dts)

クックパッド(株) / インフラエンジニア データセンターからAWSへの移行を担当しました

OSS公開してます AWSツール

elasticfox-ec2tag(VPC対応済み!)、IAM Fox、R53 Fox

Rubyライブラリ各種 http://rubygems.org/profiles/winebarrel

Page 3: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし
Page 4: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

クックパッドについて

2,000万人以上が利用するレシピサイト

120万品以上のレシピが公開されている

PV/月は5億PV

Rails+MySQL

Page 5: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

クックパッドについて

すべてAWS上で運用

サーバ台数は400台以上

インフラエンジニアは6人

Page 6: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

クックパッドについて

2010年

AWSの検証開始

2011年8月〜10月

データセンターからAWSに移行

2012年8月

VPCに移行

Page 7: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし
Page 8: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし
Page 9: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

VPCのメリット

非VPCにはない機能

IPアドレスの固定

○ インスタンスをStop/StartしてもIPアドレスは変わらない

○ 任意のIPアドレスをつけることができる

ENI (Elastic Network Interface)

Internal ELB

稼働中のインスタンスのセキュリティグループが変更可能

Page 10: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

VPCのメリット

セキュリティ

デフォルトでインターネットと通信ができない

同じセグメントにほかのユーザがいない

ELBへのセキュリティグループの適用

Page 11: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし
Page 12: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

VPC・サブネット構成

Page 13: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

VPC・サブネット構成

あえて名前をつけると『Flat Subnetパターン(平たいサブネット)』…とか

Page 14: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

VPC・サブネット構成

VPC

レンジ: 10.0.0.0/16

サブネット1

レンジ: 10.0.0.0/17

ゾーン: ap-northeast-1a

サブネット2

レンジ: 10.0.128.0/17

ゾーン: ap-northeast-1b

Page 15: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

VPC・サブネット構成

所謂『プライベートサブネット』は利用しない

同じレイヤで複数のゾーンを使いたい

○ 冗長性の確保、ではなくキャパシティの確保

○ さらに上下に分割すると2×2=4つのサブネットが必要→管理コストの増大

セキュリティはセキュリティグループで担保

Page 16: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

VPC・サブネット構成

サブネットは2つ

3つ以上のサブネット

→管理コストの増大を懸念

ゾーンCができたら?できましたね…

→…あきらめます(´・ω・`)

Page 17: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

VPC・サブネット構成

ELB用のサブネットは作らない

基本的にIPアドレスに依存しないようにしているので、ELBがどのIPアドレスを使っても問題ない

10.0.*.0/17なので、ELBでIPアドレスが枯渇することは考えにくい

ELB用にサブネットを作ることで、アドレスのレンジが断片化することを懸念

Page 18: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

ネットワーク構成

Page 19: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

ネットワーク構成

VPCのゲートウェイ サブネットのレンジの先頭(10.0.0.1、

10.0.128.1)

VPCのRoute Tablesに従ってルーティングを行う

インターネットとの通信にはEIPが必要

NAPTはできない(…と思います)

VPCのDNS VPCのレンジの先頭(10.0.0.2)

○ なぜかサブネットごとにはない

外部のサーバのホスト名を管理

○ 内部のサーバのホスト名は保持していない

Page 20: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

ネットワーク構成

内部ゲートウェイ

IPアドレスを(ユーザが使える)サブネットのレンジの先頭に固定(10.0.0.4、10.0.128.4)

eth0と別にENIを差してEIPをアサイン

IPマスカレードで他のインスタンスからインターネットへの通信を中継

Page 21: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

ネットワーク構成

内部のインスタンスのRouting Table

ゾーン: ap-northeast-1b

Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 169.254.169.254 * 255.255.255.255 UH 0 0 0 eth0 10.0.128.0 * 255.255.128.0 U 0 0 0 eth0 10.0.0.0 10.0.128.1 255.255.128.0 UG 0 0 0 eth0 default 10.0.128.4 0.0.0.0 UG 0 0 0 eth0

Page 22: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

ネットワーク構成

ルート 同一サブネット内 →ゲートウェイを経由しない

隣のサブネット →AWSのゲートウェイを経由

インターネット →内部ゲートウェイを経由

インスタンスの起動時に自身のIPアドレスからサブネットを判別し、Routing Tableを設定

Page 23: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

ネットワーク構成

内部DNS

PowerDNS+MySQL

IPアドレスを内部ゲートウェイの隣のアドレスに固定(10.0.0.5、10.0.128.5)

独自のスクリプトでNameタグとホスト名をひも付け

Page 24: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

ネットワーク構成

インスタンスの初期化スクリプト実行時に、自身のIPアドレスからサブネットを判別し、resolv.confを設定 search ... options timeout:2 attempts:1 nameserver 10.0.128.5 # 自身のサブネットの内部DNS nameserver 10.0.0.5 # 隣のサブネットの内部DNS nameserver 10.0.0.2 # VPCのDNS

Page 25: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

セキュリティグループ構成

Page 26: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

セキュリティグループ構成

『Functional Firewallパターン(階層的アクセス制限)』と『Operational

Firewallパターン(機能別アクセス制限)』の組み合わせ

Page 27: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

セキュリティグループ構成

セキュリティグループは3種類

すべてのインスタンスに適用される『default』

レイヤごとに適用される『front-internet /

front-elb』『middle』『back』

一部の特殊なインスタンスごとのロール(例: DNS、Gateway)

Page 28: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

セキュリティグループ構成

『default』 インスタンス間のICMP、全インスタンスからの

DNSへの問い合わせ、監視サーバからの全インスタンスへの問い合わせなどを許可

『front-internet / front-elb』 インターネット / ELBからproxyへのアクセスを許可

『middle』 proxyからappへのアクセスを許可

『back』 appからDBへのアクセスを許可

Page 29: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

セキュリティグループ構成

サブネット間での通信制限はなし

セキュリティグループ間の通信可能ポートは制限

基本的な構成は非VPCと同じ ただし200近くあったセキュリティグループをある程度統一

AWSの方から『VPCで一定以上のセキュリティグループを作成した場合に通信が遅くなる可能性がある』との指摘をいただいたため(実際遅くなるかは不明)

Page 30: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

ENIと内部ELBについて

ENI (Elastic Network Interface)

Heartbeatとの組み合わせで冗長構成が可能

単一インスタンスに複数のIPを付与することも可能だが、結局APIをたたくことになるのでENIを利用

ダウンタイムはEIPを使った仕組みよりもかなり短い(10〜20s)

スプリットブレインを考える必要がない

ただし同じセグメントに複数のNICを刺すため、パケットの出入りに注意が必要

Page 31: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

ENIと内部ELBについて

Internal ELB 一部サービスで試験的に導入

基本的な仕組みが通常のELBと同じなので、内部向けとしては使いにくい部分がある ○ ELB内部のインスタンスの増加によってスケールアウトするので、ホスト名をキャッシュしたりコネクションが維持されていると、帯域のスケールアウトが難しい

○ 接続先については同じIPアドレスを使っていてもバックエンドに均等に分散される(が重み付けはない)

○ 帯域のスケールアウト不要でもう少し賢い振り分けが必要なら、冗長化したHAProxyの方が使い勝手が良い

Page 32: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

ENIと内部ELBについて

Internal ELB

帯域は内部のインスタンスに依存と思われる

○ アクセス量が多くなると単一のIPアドレスでも帯域が広がる

○ ただし、ウォームアップしても直接通信するより若干帯域が狭い

60秒間通信がないとコネクションが切断される

○ MySQL等の前に置く場合に注意が必要

MySQLの前に置いた場合、TCPポートチェックで接続エラーが増える

○ xinetdを使ったHTTPでのチェックの方が良い

Page 33: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし
Page 34: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

移行手順

移行手順はデータセンター→AWSと同様

『Weighted Transitionパターン(重みづけラウンドロビンDNSを使った移行)』の変形

Page 35: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

1. VPCにインスタンスを用意

Page 36: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

2. Proxyでの振り分けによる負荷試験

Page 37: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

3. Route53での振り分けによる動作確認

Page 38: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

4. メンテナンスでマスタDBを移行

Page 39: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

5. ドメインのIPアドレスを変更

Page 40: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

補足

非VPCとVPCの間の通信はSSHによるトンネル

autosshと独自スクリプトによりデーモン化

パケットがインターネットを通らないせいか、非常に安定していた

各所に内部ELBを配置していたが、パフォーマンスの低下が見られたため直前に撤去

Page 41: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし
Page 42: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

所感

IPアドレスが固定されているのがとてもありがたい

『稼働中はセキュリティグループを変更できない』というプレッシャーがなくなった

冗長化の手段がいくつかあるので、可用性を確保しやすくなった

パフォーマンスの変化は特に見られない

Page 43: クックパッド株式会社 ...d36cz9buwru1tt.cloudfront.net/jp/summit2012/pdf/aws-summit-cdp-… · vpc・サブネット構成 elb用のサブネットは作らない 基本的にipアドレスに依存しないようにし

結果的なメリット

CentOSのバージョンアップ

全インスタンスの64bit化

設計のリファクタリング

セキュリティグループの見直し

サーバ種別ごとにAMIあったが『Base

AMI+puppet』に統一され、管理がしやすくなった