カテゴリー別アーカイブ: ELB

Route53だけでロードバランシング

久々の投稿です。

技術的なメモ書きをEvernoteにメモるようにして、

そこからブログにまとめてみることにしました。

会社だったり家だったり出先だったりで思いついたことは基本Evernoteにメモる。

なんか最近記憶に頼り過ぎで、忘れてて調べ直すことが多くなった気がするというのもあり…

ともあれ、これで三日坊主が直ることを期待しますw

 

諸事情でELBが使えないかもしれない案件があったので検証しました。

ELBのどこがダメだったかというと、

IPアドレスが固定ではない

ということでした。

 

とはいえ、商用LBは高いし、HAProxyとかNginxとかで作るとSPOFにならないように配慮するのが大変だし・・・

 

そこで思いついたのが、

Route53によるDNSロードバランサです。

 

DNSラウンドロビンによるDNSロードバランサは一般的に使われる方法ではありますが、

Route53ならヘルスチェック機能があるため、かなり本格的にロードバランサ的な使い方が可能です!

 

全部落ちた時のソーリーページも設定可能です。

DNSの枠に収まらないRoute53素敵!w

 

概要図↓

picture745-1

 

設定方法↓

  1. まずはHealthCheckを作成(振り分け対象分)
    picture497-2
  2. レコードを設定して作成したヘルスチェックを割り当てる
    Routing Policyは「Weighted」
    重み(Weight)は均等に振り分けるなら全て「1」
    picture497-3
  3. 重み(Weight)「0」でAlias AレコードでS3とかを指せば全部落ちた時のFailover先も設定できちゃう!

 

注意事項等↓

  • 振り分けはラウンドロビンのみ。
    Stikky Session(振り分けの固定)はできません。
  • ヘルスチェックの間隔やNG基準の変更はできません。
    30秒間隔でヘルスチェックが行われ、3回連続で30秒以内にHTTPレスポンスコード「200」が返らなかった場合、NGとなります。
  • 中継するDNSやクライアントサイドのプロキシ等のキャッシュによって、
    ヘルスチェックNGとなっているIPアドレスへのアクセスがある程度の期間継続的に行われる可能性があります。

 

最近、AWSメインで集中させてもらえる環境ができつつあるので、

大分モチベーションが上がってきました!w

 


ELBで二重リクエスト!?

先月、子供が産まれました。
男の子です。
可愛い過ぎて仕事とブログの更新に身が入ってませんw

さて、最近本格的に業務でAWSでのインフラ構築を行うようになったのですが、
ELBを通したHTTPリクエストにて、
謎の現象に悩まされたのでメモしておきます。
大量のデータ更新を行う時間のかかる処理がありまして、
その処理へのリクエストを受け付けてから、
決まって1分を過ぎた頃にもう一度全く同じリクエストが投げられて、
二重実行になってしまうという現象です。

  1. JavaScriptイベントの実装が悪いとブラウザによって二重リクエストが起こることかありますが、今回はその類では無いこと
  2. ELBを通さないとどうやっても発生しないこと

以上のことからELBに原因があると推測してサポートに問い合わせてみました。

回答は、
ELBのリクエストタイムアウトは60秒となっており、
60秒を超えてレスポンスが無い場合は、レスポンスコード408(Request Timeout)を返す。
408が返るとブラウザによっては再度リクエストを送信しなおす。

という現象が発生するそうです。

あ、ちなみに僕には調査のお鉢が回ってきただけなので、
Webシステムでレスポンスを返すまでにそんなにかかる処理を同期で行う時点で間違い。
という突っ込みは無しでお願いしますw

本当は先日JAWS Days 2013に参加してきたので、
それについて書きたいんですけど、
書きたいことがありすぎ&帰ってきて早速の激務でまとめきれないです…orz
いや、全く無いわけじゃないんですけど、そこは息子と奥さんのために使いたいわけで…
このまま旬を過ぎちゃって書けなくなりそうな予感がしてますwww