web-dev-qa-db-ja.com

EC2インスタンス用にAmazonでフェイルオーバーを使用してUDPロードバランサーを作成する

タスク:

EC2インスタンス用にAmazonでフェイルオーバーを使用してUDPロードバランサーを作成します。

問題:

以下の説明に基づいて、私は次の問題を抱えています:

  • AWS EC2には、IPv4トラフィックとIPv6トラフィックの両方で機能するパブリックDNS名がありません。
  • 現在のIPv6アドレスを別のアベイラビリティーゾーンの新しいインスタンスに再割り当てできません。

説明:

フェイルオーバーとは、何らかの理由でインスタンスがダウンした場合に、新しいインスタンスを起動して置き換えることを意味します。それが存在するアベイラビリティーゾーンがダウンしている場合は、別のアベイラビリティーゾーンで新しいインスタンスをスピンアップして置き換えます。

Elastic IPアドレスを使用すると、アベイラビリティーゾーンに関係なく、既存のElasticIPアドレスを新しいインスタンスに再割り当てできます。

IPv6アドレスを使用すると、同じサブネットにないため、新しいインスタンスが別のアベイラビリティーゾーンで作成された場合、私は既存のIPv6アドレスを再割り当てできませんになります。アベイラビリティーゾーンとは、us-west-2a、us-west-2b、us-west-2cなどのAmazonのアベイラビリティーゾーンを指します。

これを解決する方法を知っている唯一の方法は、レジストラ(私の場合はGodaddy)のホストレコードを新しいIPv6アドレスで更新することです。 GodaddyにはAPIがあり、プログラムでホストレコードを更新できると思います。ただし、Godaddyには最小600秒のTTLがあります。つまり、IPv6トラフィックがサーバーに到達できない可能性があります伝播に基づいて10分以上

通常のTCPトラフィックを実行している場合、Amazonにはすばらしいロードバランサーシステムがあります。その場合、この問題は存在しません。UDPトラフィックの負荷を分散する必要があるため、実行しています。 AWS ELB(Amazon Elastic Load Balancer)は、すべてのトラフィックをTCPトラフィックに向けることができるCNAMEを提供します。したがって、心配する必要はありません。 IPv4トラフィックとIPv6トラフィックを分離します。AmazonがELBで提供するDNS名をCNAMEに直接指定できます。

AmazonはEC2用のパブリックDNSも提供していますが、これはIPv4トラフィック専用です。つまり、これはIPv4トラフィックでは機能しますが、IPv6トラフィックでは機能しません。

私が考えることができる唯一のオプションは、ソフトウェアベースのロードバランサー(私の場合はEC2インスタンス上のNGINX)をセットアップすることです。次に、ドメインをNGINXロードバランサーのIPv4およびIPv6アドレスにポイントします。次に、ゾーンがクラッシュすると、別のゾーンで新しいAWSEC2インスタンスを起動します。次に、GodaddyのAPIを使用して、IPv6アドレスを新しいインスタンスのIPv6アドレスに更新します。

リクエスト

AWS ELBなしでEC2インスタンスにCNAMEを割り当てる方法を知っている人はいますか?インスタンスは、CNAMEでIPv4トラフィックとIPv6トラフィックの両方を受信できる必要があります。

私がそれを行うことを考えることができる唯一の方法は、私のドメインレジストラでのDNS変更の伝播の問題のためにダウンタイムを引き起こすでしょう。

AmazonでRoute53オプションを調べてきましたが、同じ伝播遅延があるようです。

ドメイン用に独自のDNSサーバーを設定することを考えました。次に、IPアドレスが変更された場合、Godaddyを使用するよりも速くDNSエントリを変更できる可能性があります。ただし、DNS伝搬の問題は、DNSの変更に伴う問題になります。

6
Daryl

[私の答えを考えてから編集]

私が言及しなかった1つの項目は、Route53が単純なロードバランシングとフェイルオーバーをサポートしていることです。以下の私の回答では2つのシステムが必要になるため、サービス用に2つのEC2インスタンスを起動し、Route 53とのラウンドロビン負荷分散を行い、フェイルオーバーレコードを追加します。 CloudWatchアラームを作成して、インスタンスの1つに障害が発生したときに、手動で置き換えることができるようにします。これにより、UDP用の「貧乏人」のロードバランサーが提供されます。

DNSフェイルオーバーの構成

[編集終了]

まず、GoDaddyDNSからRoute53に移動します。GoDaddyDNSエントリのプログラミングの経験はありませんが、Route53のAPIは優れています。

GoDaddyは、ゾーン頂点のCNAMEレコード(example.com)をサポートしていません。 IPv4AレコードとIPv6AAAAレコードを使用する必要があります。これは問題ではないはずです。 AWS EIPレコードを使用して、新しいインスタンスを起動するときに、少なくともIPv4DNSエントリがDNS遅延を必要としないようにします。

自分のDNSサーバーをセットアップしません。最初にRoute53に切り替えます。伝播遅延について言及するときは、TTLを意味します。 TTLを短くするように変更できます。Route53は1秒のTTLエントリをサポートしますが、ほとんどのDNSクライアントは短いTTL値なので、これをほとんどまたはまったく制御できません。TTLが短いと、DNS要求が増えることも意味します。

AWSはUDPロードバランシングを提供していませんが、AWSで実行されるサードパーティの製品とサービスがあります。サービスが重要であるか、収益を生み出す場合は、十分にテストされたソリューションを使用してください。

私は車輪の再発明を試みません。ただし、実際のシステムがどのように機能するかをよりよく理解するために、これを行うのが楽しい場合があります。

ステップ1:インスタンスに障害が発生したことを検出するための戦略を設計する必要があります。ロードバランサーが実行するヘルスチェックを複製してから、アクションをトリガーする必要があります。

ステップ2:Route 53(GoDaddy)DNSエントリを更新できるコードを作成する必要があります。

ステップ3:EC2インスタンスを起動し、古いインスタンスを終了できるコードを作成する必要があります。

ステップ4:新しいインスタンスの新しいアドレスを検出し、Route 53(GoDaddy)を更新する必要があります。

上記の手順では、信頼性の高いインターネット接続を備えた専用の常時接続コンピューターが必要です。モニタリングシステムにはEC2を使用します。 T2-microはおそらく問題ありません。

ただし、この新しいシステムの開発とテストにかかる時間を見てください。戻って戦略を考え直してください。

4
John Hanley