これは簡単な解決策だと確信していますが、DNS がどのように機能するか、あるいはそれがこの問題に関係するかどうかについてはあまり詳しくありません。
多数のインスタンスに分散された Amazon EC2 上で Web サービスを実行している場合、時々変更されるサーバーのプール全体にアクセスするために単一のドメイン名を使用できるようにするにはどうすればよいでしょうか。
インスタンスは 1 秒前には存在していても、次の秒前には消えている (またはその逆) 可能性があるため、ルーティング先のクラスターのアクティブなメンバーをランダムに選択する方法が必要です。更新は瞬時に行う必要があります。DNS キャッシュなどを使用しても、これは可能ですか?
答え1
これにはいくつかのアプローチがあり、そのうちのいくつかはあなたの手の届く範囲にあります。
あなたの場合、私は単純に複数の DNS レコードを用意し、TTL を比較的短くすることをお勧めします。分散は最適ではなく、クライアントは最もレイテンシの低いノードを選択しない可能性があります。ただし、これは非常に簡単です。必要なのは DNS レコードを追加できることだけです。これは広く使用され、テストされた手法です。
プールからサーバーを削除する必要がある場合は、DNS レコードを削除するだけで、TTL の有効期限が切れた後、ほとんどのクライアントはサーバーの使用を停止します。新しいサーバーを追加する場合も同様です。サーバーを追加すると、TTL の有効期限が切れた後、クライアントはサーバーの使用を開始します。
たとえば、Google はバランス調整テクニックの一部としてこれを使用しています。
$ dig A google.com
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 297 IN A 74.125.77.99
google.com. 297 IN A 74.125.77.104
google.com. 297 IN A 74.125.77.147
Google はこれを拡張し、ユーザーが Google の Web サイトにアクセスすると、ユーザーがいると推測される国に基づいて、ユーザーの近くでホストされているバージョン (ユーザーの言語でホストされているバージョン) にリダイレクトします。ただし、これは多くの場合、必要のないレベルです。
答え2
更新は瞬時に行う必要があります。DNS キャッシュなどを使用しても、これは可能ですか?
いいえ、DNS では不可能です。DNSレコードにはTime To Live(TTL)が付与されており、キャッシュがレコードを使用できる時間を指定します。それなし権威DNSサーバーに再度確認します。そして、さまざまな理由から、DNS TTLは実質的に10分未満にすることはできません。DNSラウンドロビングはない負荷分散の解決策、少なくともサービスの稼働時間が必要な場合はそうではありません。fxを参照してください。ジェフ・アトウッドによる古い質問。
あなたできる使用DNSラウンドロビンとプロアクティブな監視を組み合わせたサードパーティのDNSサービスサーバーの監視と、DNS からデッド サーバーを自動的に削除します。これは良い解決策ではありませんが、重要度の低いサイトには十分であり、DNSMadeEasy または EdgeDirector を使用して簡単に設定できます。
ウェブサーバーの可用性を管理する業界標準の方法は、レイヤー4またはレイヤー7のロードバランサーウェブサーバーの前で。
多数のインスタンスに分散された Amazon EC2 上の Web サービスで、単一のドメイン名を使用してサーバーのプール全体にアクセスできるようにするにはどうすればよいでしょうか。
Amazonはこれに対してプラグアンドプレイサービスを提供しています。アマゾンと呼ばれる弾性負荷分散基本的にこれは Amazon のマネージド サービスであり、EC2 Web サーバーの前にレイヤー 7 (HTTP) またはレイヤー 4 (TCP) ロード バランサーを設定します。
もう 1 つの一般的なオプションは、nginx、HAProxy、Apsis Pound、Apache 2.2、Zeus Load Balancer などの L7 ロード バランサーを使用して EC2 インスタンスをセットアップすることです (いくつかあります)。ただし、この方法を選択する場合は、OS + ロード バランシング ソフトウェアを自分で管理し、EC2 ロード バランサー インスタンス自体を十分に高可用性にする方法を検討する必要があります。