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

10,520 views
10,395 views

Published on

Published in: Technology
0 Comments
23 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
10,520
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
0
Comments
0
Likes
23
Embeds 0
No embeds

No notes for slide

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

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

×