web-dev-qa-db-ja.com

自動サービス起動によるコールドスタンバイの高可用性ロードバランシング

実行しているアプリケーション用にAWSで高可用性クラスターをセットアップしようとしています。アプリケーションは、OracleRDSの前にあるEC2インスタンス上にあります。従来の負荷分散を使用していて、2つのインスタンスを同時に実行している場合、2つのインスタンスがデータベースに変更を加えるが、お互いを認識しないため、データベースが破損するため、アクティブ/パッシブの負荷分散を行う必要があります。 。

私が抱えている問題は、パッシブインスタンスがアプリケーションを実行している場合、トラフィックが入らない場合でも、約0.1%の時間でデータベースに変更を加えることです。これは、プライマリノードが正常なときにバックアップノードでアプリケーションサービスが実行されていないことを確認する必要があることを意味します。

私の理想的なシナリオは、次のことを実行できるアクティブ/パッシブフェイルオーバーを実行するものを用意することです。

  1. プライマリノードのヘルスチェック
  2. プライマリノードが正常な場合は、トラフィックをプライマリノードに転送します
  3. プライマリノードが正常でない場合は、サービスを起動するスクリプトを実行してから、トラフィックをセカンダリに転送します

私はHAProxyを調べてきましたが、プライマリノードで障害が発生した場合にHAProxyにバックアップサーバーで任意のスクリプトを実行させる方法を見ていません。

Keepalivedの使用に関するいくつかの議論を見てきました。私が提案していることはkeepalivedで可能ですか?これを行うことができる他の何かがありますか?

2
RikSaunderson

Route53を使用してアクティブ-パッシブフェイルオーバーを実行できます(トラフィックを均等に分散するALBを使用したロードバランシングとは対照的です)。

アクティブ-パッシブフェイルオーバーを使用すると、コールドスタンバイで1つ(または複数)のセカンダリを持つプライマリアクティブサービスを持つことができます。プライマリでヘルスチェックが失敗すると、すべてDNSを使用してセカンダリにリダイレクトされます。これは必ずしもHAProxyの堅牢性を提供するわけではありませんが、基本的には目的の機能を実現します(フェイルオーバー遅延の重要度とシームレス性によって異なりますが、チェック間隔を速くすると、カットオーバー遅延が発生する可能性があります。 60秒)。

AWSによるこのガイドでは、Route53DNSフェイルオーバーについて説明しています。

アクティブ-アクティブおよびアクティブ-パッシブフェイルオーバー

1
Miles Gillham