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 !
: ...
設定
AWS
Source / Dest Check OFF (standby, too)
Secondary Private IP: $NAT_VIP (=10.0.0.254)
Elastic IP
Associate with $NAT_...
フェイルオーバーの流れ
新Active
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -o eth0
-j SNAT --to-sour...
フェイルオーバー
没案
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://tool...
なにを異常とみなすか?

•

が落ちたら?

• 間隔置いて何回かリトライする
はわりと一時的に不通になる
•
にょ

• それでもダメなら別のところにセカンダ
リーチェックする
なにを異常とみなすか?

• 監視元の非EIPインスタンスが落ちたら?
• 複数インスタンスから外部への疎通監視
する
なにを異常とみなすか?

• 誤検知したら?
• 監視(非EIPインスタンス)に加えて調停
役を立てて投票制(quorum)にする

• 調停役がAWSのAPIを叩くなどしてF/O
する

• なので調停役はEIP付インスタンスで動
かす必要が...
なにを異常とみなすか?

• 監視ノードのお仕事
• 調停役にステータスを送る
• 起動時: JOINを送る
• 定期的に: pingの結果を送る OK/NG
• 終了時: LEAVEを送る
• 送信データ=ステータス、自ホスト名、時刻
• 3...
なにを異常とみなすか?
•

調停役ノードのお仕事

•

監視ノードからデータが来たら

•
•

内部的に持ってる情報を更新

数秒間隔で定期的に

• 突然死した監視ノードがいないかチェック
• 最終更新時刻をみてしばらく更新されてないや...
まとめ
サブネット分けて
CDPのように
VPC Routerの設定を
変えてフェイルオーバー
深淵な理由でサブネット切っ
てない場合は…
今回紹介した
NAT VIPの移動
ではなく!
_人人人人人人_
>全インスタンスに<
> EIPを付ける!!<
 ̄^Y^Y^Y^Y^Y^ ̄
ご清聴
ありがとう
ございました
Upcoming SlideShare
Loading in...5
×

Redunduncy of NAT instance on AWS/VPC

2,849

Published on

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

No Downloads
Views
Total Views
2,849
On Slideshare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
12
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Redunduncy of NAT instance on AWS/VPC

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

    Clipping is a handy way to collect important slides you want to go back to later.

×