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

Redunduncy of NAT instance on AWS/VPC

on

  • 2,728 views

 

Statistics

Views

Total Views
2,728
Views on SlideShare
1,513
Embed Views
1,215

Actions

Likes
5
Downloads
11
Comments
0

11 Embeds 1,215

http://d.hatena.ne.jp 1104
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 Redunduncy of NAT instance on AWS/VPC Presentation Transcript

    • NATインスタンス 冗長化の深淵な話 AWS Casual Talks#1 2013-11-01 ひろせまさあき @hirose31 大剣使い
    • 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
    • NATの 冗長化 といえば
    • 安心のCDP/Ninja of Three クオリティ
    • 糸冬 了
    • …とはいか ない深淵な 理由が…
    • (再掲) 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
    • (再掲) 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
    • (再掲) 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
    • _人人人人人人_ > publicサブ < > ネットのみ <  ̄^Y^Y^Y^Y^Y^ ̄
    • _人人人人人人_ > まさに < > 公私混同 < > パターン <  ̄^Y^Y^Y^Y^Y^ ̄ (C) @Yuryu
    • 第二部 唯一つの サブネットを胸に
    • どうしてpublic, private、2つのサ ブネットを切らな かったのか?
    • 深淵な理由 ↓
    • 深淵な理由 ↓ めんどくさそう だったから      /⌒  ⌒\    /( ●)  (●)\   /::::::⌒(__人__)⌒::::: \  <で?   |    mj |ー'´      |   \  〈__ノ       /     ノ  ノ
    • NATインスタンスってただ のNATしてるLinuxサー バーだしぃサブネットひと つの方がシンプルだしぃオン プレでもPublic/Private なんかでサブネットわけて ないしぃ
    • 深淵な理由 ↓ ない!      /⌒  ⌒\    /( ●)  (●)\   /::::::⌒(__人__)⌒::::: \  <ふ〜ん   |    mj |ー'´      |   \  〈__ノ       /     ノ  ノ
    • 第二部 唯一つの サブネットを胸に
    • 1.構成・設定は? 2.どやってフェイル オーバーすんの? 3.なにを異常とみなすか?
    • 構成図 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
    • 設定 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
    • フェイルオーバーの流れ 新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
    • フェイルオーバー 没案
    • 1. VIP使わずに、 NATが切り替わっ たらEIPなしインス タンスのデフォゲを 必死で変えてまわる
    • _人人人人人人_ > ありえ < > ない <  ̄^Y^Y^Y^Y^Y^ ̄
    • 2. ENIをも1こ つけて、それを VIP的に移動させ る
    • Secondary IP+IP Alias でいけたしあんま調べてない けど、EIPをeth1にヒモ付 けた場合、自分が外へ出てい けなかった(ような気がす る)ポリシールーティングと か駆使すればいけるのかも
    • なにを異常とみなすか? • 異常とは? • NATサーバーが生きてるかどうか、ではな い • フリーズしてSSHで入れなくてもパケッ ト転送ができてればいい • ☛非EIPインスタンスが外部へ疎通できな いのが異常である
    • なにを異常とみなすか? • 外部の疎通対象をどうするか? • 自由に気兼ねなくping打っていいホストがあればい いのだけど… • 一応ある • ping.mesh.ad.jp JANOG28 到達性確認手段共有BoF http://tools.bgp4.jp/index.php?janog28 • とりあえず にpingを…
    • なにを異常とみなすか? • が落ちたら? • 間隔置いて何回かリトライする はわりと一時的に不通になる • にょ • それでもダメなら別のところにセカンダ リーチェックする
    • なにを異常とみなすか? • 監視元の非EIPインスタンスが落ちたら? • 複数インスタンスから外部への疎通監視 する
    • なにを異常とみなすか? • 誤検知したら? • 監視(非EIPインスタンス)に加えて調停 役を立てて投票制(quorum)にする • 調停役がAWSのAPIを叩くなどしてF/O する • なので調停役はEIP付インスタンスで動 かす必要がある←意外とワナい
    • なにを異常とみなすか? • 監視ノードのお仕事 • 調停役にステータスを送る • 起動時: JOINを送る • 定期的に: pingの結果を送る OK/NG • 終了時: LEAVEを送る • 送信データ=ステータス、自ホスト名、時刻 • 3台ぐらい立ててる • msgpack RPCで送ってる
    • なにを異常とみなすか? • 調停役ノードのお仕事 • 監視ノードからデータが来たら • • 内部的に持ってる情報を更新 数秒間隔で定期的に • 突然死した監視ノードがいないかチェック • 最終更新時刻をみてしばらく更新されてないやつはLEAVE(投票数 にはカウントしない)とみなす • 上記でステータスがNG or LEAVEのがいたら • ステータスが全部NG(外部疎通できるやつがいない)かつ、稼働中 の監視ノード数が定足数以上なら、フェイルオーバー発動!!! • • PerlのAnyEvent::MPRPC::Serverで実装 今ならSerf http://www.serfdom.io/ でサクッと実現できるかもですね
    • まとめ
    • サブネット分けて CDPのように VPC Routerの設定を 変えてフェイルオーバー
    • 深淵な理由でサブネット切っ てない場合は…
    • 今回紹介した NAT VIPの移動
    • ではなく!
    • _人人人人人人_ >全インスタンスに< > EIPを付ける!!<  ̄^Y^Y^Y^Y^Y^ ̄
    • ご清聴 ありがとう ございました