Redunduncy of NAT instance on AWS/VPC
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Redunduncy of NAT instance on AWS/VPC

on

  • 2,860 views

 

Statistics

Views

Total Views
2,860
Views on SlideShare
1,630
Embed Views
1,230

Actions

Likes
5
Downloads
11
Comments
0

11 Embeds 1,230

http://d.hatena.ne.jp 1119
http://cloud.feedly.com 73
https://twitter.com 12
http://www.feedspot.com 7
http://newsblur.com 6
http://feedly.com 5
http://reader.aol.com 2
http://digg.com 2
http://www.newsblur.com 2
https://www.google.co.jp 1
http://www.google.co.jp 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

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

Redunduncy of NAT instance on AWS/VPC Presentation Transcript

  • 1. NATインスタンス 冗長化の深淵な話 AWS Casual Talks#1 2013-11-01 ひろせまさあき @hirose31 大剣使い
  • 2. VPCにおけるNAT冗長化の話 Internet GW VPC 10.0.0.0/16 VPC Router こ! こ Subnet 10.0.0.0/24 EC2 w/ EIP NAT w/ EIP EC2 w/o EIP
  • 3. NATの 冗長化 といえば
  • 4. 安心のCDP/Ninja of Three クオリティ
  • 5. 糸冬 了
  • 6. …とはいか ない深淵な 理由が…
  • 7. (再掲) Internet GW VPC 10.0.0.0/16 VPC Router Subnet 10.0.0.0/24 EC2 w/ EIP NAT w/ EIP EC2 w/o EIP
  • 8. (再掲) Internet GW VPC 10.0.0.0/16 VPC Router Subnet 10.0.0.0/24 EC2 w/ EIP NAT w/ EIP EC2 w/o EIP
  • 9. (再掲) Internet GW VPC 10.0.0.0/16 VPC Router Subnet 10.0.0.0/24 EC2 w/ EIP NAT w/ EIP EC2 w/o EIP
  • 10. _人人人人人人_ > publicサブ < > ネットのみ <  ̄^Y^Y^Y^Y^Y^ ̄
  • 11. _人人人人人人_ > まさに < > 公私混同 < > パターン <  ̄^Y^Y^Y^Y^Y^ ̄ (C) @Yuryu
  • 12. 第二部 唯一つの サブネットを胸に
  • 13. どうしてpublic, private、2つのサ ブネットを切らな かったのか?
  • 14. 深淵な理由 ↓
  • 15. 深淵な理由 ↓ めんどくさそう だったから      /⌒  ⌒\    /( ●)  (●)\   /::::::⌒(__人__)⌒::::: \  <で?   |    mj |ー'´      |   \  〈__ノ       /     ノ  ノ
  • 16. NATインスタンスってただ のNATしてるLinuxサー バーだしぃサブネットひと つの方がシンプルだしぃオン プレでもPublic/Private なんかでサブネットわけて ないしぃ
  • 17. 深淵な理由 ↓ ない!      /⌒  ⌒\    /( ●)  (●)\   /::::::⌒(__人__)⌒::::: \  <ふ〜ん   |    mj |ー'´      |   \  〈__ノ       /     ノ  ノ
  • 18. 第二部 唯一つの サブネットを胸に
  • 19. 1.構成・設定は? 2.どやってフェイル オーバーすんの? 3.なにを異常とみなすか?
  • 20. 構成図 VPC 10.0.0.0/16 VPC Router ! : 10.0.0.1 Subnet 10.0.0.0/24 EIP ! : 54.X.X.31 NAT Active NAT Standby Private IP ! : 10.0.0.21 Secondary IP!: 10.0.0.254 Private IP ! default GW ! : 10.0.0.1 default GW ! : 10.0.0.254 w/o EIP Private IP ! : 10.0.0.101 default GW ! : 10.0.0.254 : 10.0.0.22
  • 21. 設定 AWS Source / Dest Check OFF (standby, too) Secondary Private IP: $NAT_VIP (=10.0.0.254) Elastic IP Associate with $NAT_VIP (≠Primary Private IP) Allow Reassociation ちなみにAWS側の2nd IP設 Linux, sysctl 定せずにLinux側だけでIP Aliasした場合、arp解決がで きなくて疎通できません sysctl -w net.ipv4.ip_forward=1 sysctl -w net.netfilter.nf_conntrack_max=262144 Linux, iptables iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -o eth0 -j SNAT --to-source $NAT_VIP ip addr add $NAT_VIP dev eth0 label eth0:nat ip route add default via 10.0.0.1 dev eth0 src $NAT_VIP
  • 22. フェイルオーバーの流れ 新Active iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -o eth0 -j SNAT --to-source $NAT_VIP ip addr add $NAT_VIP/24 dev eth0 label eth0:nat ip route del default ip route add default via $I_GW dev eth0 src $NAT_VIP AWS API aws ec2 assign-private-ip-addresses --network_interface_id $ENI_ID_of_NEW_ACTIVE --private_ip_addresses $NAT_VIP --allow-reassignment 旧Active (if possible) iptables -t nat -F POSTROUTING ip addr del $NAT_VIP/24 dev eth0 label eth0:nat ip route del default ip route add default via $NAT_VIP dev eth0
  • 23. フェイルオーバー 没案
  • 24. 1. VIP使わずに、 NATが切り替わっ たらEIPなしインス タンスのデフォゲを 必死で変えてまわる
  • 25. _人人人人人人_ > ありえ < > ない <  ̄^Y^Y^Y^Y^Y^ ̄
  • 26. 2. ENIをも1こ つけて、それを VIP的に移動させ る
  • 27. Secondary IP+IP Alias でいけたしあんま調べてない けど、EIPをeth1にヒモ付 けた場合、自分が外へ出てい けなかった(ような気がす る)ポリシールーティングと か駆使すればいけるのかも
  • 28. なにを異常とみなすか? • 異常とは? • NATサーバーが生きてるかどうか、ではな い • フリーズしてSSHで入れなくてもパケッ ト転送ができてればいい • ☛非EIPインスタンスが外部へ疎通できな いのが異常である
  • 29. なにを異常とみなすか? • 外部の疎通対象をどうするか? • 自由に気兼ねなくping打っていいホストがあればい いのだけど… • 一応ある • ping.mesh.ad.jp JANOG28 到達性確認手段共有BoF http://tools.bgp4.jp/index.php?janog28 • とりあえず にpingを…
  • 30. なにを異常とみなすか? • が落ちたら? • 間隔置いて何回かリトライする はわりと一時的に不通になる • にょ • それでもダメなら別のところにセカンダ リーチェックする
  • 31. なにを異常とみなすか? • 監視元の非EIPインスタンスが落ちたら? • 複数インスタンスから外部への疎通監視 する
  • 32. なにを異常とみなすか? • 誤検知したら? • 監視(非EIPインスタンス)に加えて調停 役を立てて投票制(quorum)にする • 調停役がAWSのAPIを叩くなどしてF/O する • なので調停役はEIP付インスタンスで動 かす必要がある←意外とワナい
  • 33. なにを異常とみなすか? • 監視ノードのお仕事 • 調停役にステータスを送る • 起動時: JOINを送る • 定期的に: pingの結果を送る OK/NG • 終了時: LEAVEを送る • 送信データ=ステータス、自ホスト名、時刻 • 3台ぐらい立ててる • msgpack RPCで送ってる
  • 34. なにを異常とみなすか? • 調停役ノードのお仕事 • 監視ノードからデータが来たら • • 内部的に持ってる情報を更新 数秒間隔で定期的に • 突然死した監視ノードがいないかチェック • 最終更新時刻をみてしばらく更新されてないやつはLEAVE(投票数 にはカウントしない)とみなす • 上記でステータスがNG or LEAVEのがいたら • ステータスが全部NG(外部疎通できるやつがいない)かつ、稼働中 の監視ノード数が定足数以上なら、フェイルオーバー発動!!! • • PerlのAnyEvent::MPRPC::Serverで実装 今ならSerf http://www.serfdom.io/ でサクッと実現できるかもですね
  • 35. まとめ
  • 36. サブネット分けて CDPのように VPC Routerの設定を 変えてフェイルオーバー
  • 37. 深淵な理由でサブネット切っ てない場合は…
  • 38. 今回紹介した NAT VIPの移動
  • 39. ではなく!
  • 40. _人人人人人人_ >全インスタンスに< > EIPを付ける!!<  ̄^Y^Y^Y^Y^Y^ ̄
  • 41. ご清聴 ありがとう ございました