Amazon Route 53 でフェイルオーバーの問題を回避する方法 - Amazon Route 53

Amazon Route 53 でフェイルオーバーの問題を回避する方法

Route 53 に実装されたフェイルオーバーアルゴリズムは、正常なエンドポイントにトラフィックをルーティングするだけでなく、ヘルスチェックやアプリケーションの設定ミス、エンドポイントの過負荷、パーティションの障害などに起因する最悪のシナリオを回避するように設計されています。

Amazon Route 53 でカスケードの失敗を回避する方法

カスケードの失敗に対する第一の備えとして、すべてのリクエストルーティングアルゴリズム (加重やフェイルオーバーなど) には、最後の手段となるモードが用意されています。この特殊なモードでは、レコードがすべて異常と判断された場合に、Route 53 アルゴリズムは、再びすべてのレコードを正常と見なすようになります。

例えば、いくつかのホスト上で、アプリケーションの全インスタンスがヘルスチェックリクエストを拒否している場合、Route 53 の DNS サーバーは、DNS 応答を拒否したり NXDOMAIN (存在しないドメイン) 応答を返したりするのではなく、何等かの応答を返します。アプリケーションがユーザーに応答しても、ヘルスチェックには不合格になることがあるため、設定ミスから生じる問題をある程度防ぐことができます。

同様に、アプリケーションに過剰な負荷がかかっていて、3 つのエンドポイントのうち 1 つがヘルスチェックで不合格と判断され、Route 53 の DNS 応答から除外された場合、Route 53 は残りの 2 つのエンドポイントを使って応答を返します。残りのエンドポイントがそれ以上の負荷に耐えきれず障害が発生した場合、Route 53 は再度、3 つすべてのエンドポイントにリクエストを分配するようになります。

Amazon Route 53 でのインターネットの分断への対処方法

一般的ではありませんが、インターネットに重大な分断が生じる場合があります。つまり、大規模な地理的リージョン間でインターネット経由の相互通信ができなくなることがあります。インターネットに分断が生じている間、エンドポイントの正常性ステータスに関して導き出される結論が Route 53 の拠点によって違ったり、CloudWatch に報告されるステータスと異なることがあります。各 AWS リージョンの Route 53 ヘルスチェッカーは、すべての Route 53 拠点に対し、絶えずヘルスチェックステータスを送信しています。インターネットの分断が生じている間は、Route 53 の各拠点は、そうしたステータスの一部 (通常は最も近いリージョンのステータス) にしかアクセスできなくなります。

例えば、インターネットの分断で南米との接続に影響が生じているとします。その間、 南米 (サンパウロ) にある Route 53 DNS サーバーは、AWS リージョンの南米 (サンパウロ) にあるヘルスチェックエンドポイントには問題なくアクセスできますが、その他のエンドポイントには正常にアクセスできない可能性があります。同時に、米国東部 (オハイオ) の Route 53 は、南米 (サンパウロ) リージョンのヘルスチェックエンドポイントへのアクセスに支障があるとして、対応するレコードを異常と判断することが考えられます。

こうした分断によって、Route 53 の各拠点が、それぞれ域内のエンドポイントの可視性によってエンドポイントの正常性ステータスを判断するようになり、最終的に拠点ごとにその結論が異なる、という状況に発展する可能性があります。そのため、Route 53 の各拠点は、到達可能なごく一部のヘルスチェッカーがエンドポイントを正常と判断していれば、そのエンドポイントを正常と見なします。