• Save
AWS移行に向けたクックパッドの取り組み+α
Upcoming SlideShare
Loading in...5
×
 

AWS移行に向けたクックパッドの取り組み+α

on

  • 10,378 views

 

Statistics

Views

Total Views
10,378
Views on SlideShare
7,468
Embed Views
2,910

Actions

Likes
20
Downloads
0
Comments
0

18 Embeds 2,910

http://techlife.cookpad.com 2302
http://blog.livedoor.jp 481
http://slide.yoshiday.net 62
http://search2memo.net 27
http://cookpadtech.wordpress.com 8
http://webcache.googleusercontent.com 6
https://twitter.com 5
url_unknown 5
https://www.chatwork.com 3
https://si0.twimg.com 2
http://www.slideshare.net 2
https://twimg0-a.akamaihd.net 1
https://cookpadtech.wordpress.com 1
http://d.hatena.ne.jp 1
https://kcw.kddi.ne.jp 1
https://www.google.co.jp 1
http://10.47.216.210 1
http://a0.twimg.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

AWS移行に向けたクックパッドの取り組み+α AWS移行に向けたクックパッドの取り組み+α Presentation Transcript

  • AWS移行に向けたクックパッドの取り組み+α
    クックパッド株式会社
    菅原元気
  • 自己紹介
    クックパッドでのお仕事
    インフラ担当(最近は主にAWSまわり)
    ミッションは「スピード・スケール・可用性・バックアップ・セキュリティ」を押さえたインフラの構築・運用
    オープンソース活動
    AWSのツールの開発
    elasticfox-ec2tag、IAM Fox、R53 Fox
    Rubyライブラリの開発
    zipruby、libarchive、rua…etc
  • アジェンダ
    AWSのサーバ・ネットワーク構成
    分散DNSの話
  • サーバ・ネットワーク構成
  • サーバ・ネットワーク構成
    現在のネットワーク
    ネットワーク
    セキュリティDNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    シンプルな三層構造
    それぞれの階層でネットワークが分離されている
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    EC2のネットワーク
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    全てのサーバが同じセグメント上に存在する
    ネットワークを分離する代わりに、セキュリティグループを利用する
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    インスタンスには二つのセキュリティグループを設定する
    Basic
    各ロールのセキュリティグループ
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    セキュリティグループ構成
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    Basicでは基本的なポートについて、相互に通信することを許可する
    ping(icmp)
    http
    特定のセキュリティグループからのアクセスを許可する
    生存監視ツール(Nagiosなど)
    性能監視ツール(Muninなど)
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    セキュリティグループ構成
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    各ロールのセキュリティグループ
    ロール同士の通信を許可
    Basicとロールので通信を許可
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    AppからDBへのアクセスを許可
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    BasicからDNSへの問い合わせを許可
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    基本的に許可するアクセス元にIPアドレスは指定しない
    Elastic Load Balancingからアクセスされるロールは、例外的に10.0.0.0/8のアクセスを許可
    ソースIPを指定できない
    セキュリティグループを指定できない
    すべてのサーバでiptablesを起動
    人的なミスを防ぐため
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    EC2では内部IPアドレスを固定できない
    停止、再開などで内部IPアドレスが変更される
    内部DNSを使って、IPアドレスを意識しない状態にする
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    DNSはActive-Active構成の2台
    それぞれにElastic IPをアサイン
    各サーバはresolv.confで2台を参照
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    DNSはNameタグの情報を取得して、ドメインの情報を構成
    例) Name:dev
    -> dev.ap-northeast-1.compute.internal
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    resolv.confは定期的にcronで更新
    内部IPアドレスが変わったらresolv.confを更新
    DNSの片方が停止したらresolv.confから除外
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    cronはDNSのPublic DNS Nameを問い合わせる(Public DNS NameはElastic IPのアサインで固定されている)
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    Public DNS NameにひもづくIPアドレスとしてDNSの内部IPを取得
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    取得した内部IPをresolv.confに書き込む
    問い合わせが返らなかった場合は、resolv.confから除外する
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    CentOS5.5をクリーンインストール
    ルートデバイスはEBS
    現在は32bitと64bitが混在しているが、64bitに統一する予定
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    ベースとなるAMIから各ロールのAMIを作成
    それぞれのAMIはバージョンをつてけ管理している
    システム管理ツール(Chef等)の導入も進めている
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    システムネットワークの生存監視
    Nagios + nrpe
    性能監視
    Munin
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    Nagiosはサーバの生存状態を監視
    Muninはサーバの性能情報(CPU使用率やロードアベレージ)を記録
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    起動されたインスタンスは自動的にNagios・Muninの監視対象となる
    各インスタンスにはタグをつけて、どのような監視対象であるかを識別できるようにする
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    可用性向上のための方策
    Elastic IPを使用した相互監視
    Nagiosを使ったAMIからの復旧
    Heartbeatを使ったフェイルオーバー
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    Elastic IPを使用した相互監視
    NagiosやLDAPの冗長化に使用
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    それぞれElastic IPのPublic DNS Nameを監視
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    返ってきた内部IPアドレスが自分のアドレスの場合、ヘルスチェックは行わない
    自分のアドレスと異なる場合、ヘルスチェックを行う
    ->常にバックアップがマスタのヘルスチェックを行う
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    マスタのヘルスチェックに失敗した場合、バックアップは自分にElastic IPをアサインする
    Elastic IPがマスタからバックアップに移って、フェイルオーバーされる
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    Nagiosを使ったAMIからの復旧
    Nagiosがへルスチェックに失敗したタイミングで、AMIからの復旧をする
    Munin等などで使用
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    Heartbeatを使ったフェイルオーバー
    基本的にはcronを使った方法と同じ
    EIPを仮想IPの代わりに使う
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    Heartbeatで相互に監視
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    フェイルオーバーしたら、リソースエージェントとEIPをアサイン
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    Elastic IPを使用した相互監視
    Heartbeatを使った方法に置き換え中
    Nagiosを使ったAMIからの復旧
    5〜10分程度のダウンタイムが許容されるサーバに適用
    LDAPの故障するとnrpeがおかしくなるので、今は使っていない状態…
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    Heartbeatを使ったフェイルオーバー
    ダウンタイムは一番短い
    LVS/keepalivedに比べると劣る…
    マルチキャストを使えないのが痛い
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    EC2上にはSlaveのみ
    データはEBS上に置いている
    データは日次でSnapshotを作成
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • サーバ・ネットワーク構成
    Snapshotから新しいスレーブを作る
    ネットワーク
    セキュリティ
    DNS
    AMI
    監視
    冗長化
    MySQL
  • 分散DNSの話
  • 分散DNSの話
    内部DNSは最重要サーバ
    resolv.confで一応、複数のDNSを参照
  • 分散DNSの話
    内容がキャッシュされる
    フェイルオーバー時にApache等のリロードが必要
    timeoutが1s以下にできない
    先頭のネームサーバが死ぬとクエリがいちいち引っかかる
    cronで監視
    ダウンタイムが分単位
    管理がめんどくさい
  • 分散DNSの話
    なので分散DNSというものを作りました
  • 分散DNSの話
    自分のホスト名を指定して各インスタンスでノードを起動
  • 分散DNSの話
    ホスト名とIPアドレスの情報はGossipプロトコルで各ノードに拡散される
  • 分散DNSの話
    アプリケーションは自インスタンスのノードに問い合わせ
  • 分散DNSの話
    死んだノードはクラスタから外れる
    各ノードの情報は自動的に更新される
  • 分散DNSの話
    DEMO
  • ご静聴ありがとうございました