Apache - 高可用性

Apache - 高可用性

Apache を高可用性として設定する方法を探しています。アイデアとしては、同じ Web サイトを提供する 2 台以上の Apache サーバーのクラスターを用意することです。各サーバーの IP アドレスをラウンドロビン DNS で設定して、各リクエストがクラスター内のサーバーの 1 つにランダムに送信されるようにします (現時点では負荷分散についてはあまり気にしていませんが、後で関係してくるかもしれません)。

私はすでに、Web サイトを提供する複数の Apache VM サーバー (複数の物理サーバーに分散) とラウンドロビン DNS をセットアップして動作させており、これは問題なく動作しています。SQL データベースは高可用性クラスターで MariaDB を使用してセットアップされ、Web データ (HTML、JS、PHP スクリプト、画像、その他のアセット) は LizardFS 内に保存され、セッションも共有の場所に保存されます。これは、クラスター内のサーバーの 1 つが何らかの理由でアクセスできなくなるまで、すべて正常に動作します。その後、リクエストの一定割合 (ダウンしたサーバーの数をクラスター内のサーバーの総数で割った値) が応答されなくなります。私が検討したオプションは次のとおりです。

自動DNS更新

Web サーバーの機能を監視し、ダウンしたサーバーを DNS から削除するプロセスを用意します。これには 2 つの問題があります。

  • まず、TTL を非常に低い数値 (5 秒など) に設定できるにもかかわらず、少数の DNS サーバーが当社よりも高い最小 TTL を強制すると聞いています。また、一部のブラウザー (Chrome など) は、TTL 設定に関係なく、DNS を 60 秒以上キャッシュします。そのため、当社側では問題がなくても、DNS 更新が発生した場合、一部のクライアントはしばらくの間サイトにアクセスできない可能性があります。

  • 第二に、クラスタの機能を監視し、DNSレコードを更新するプログラムが、
    新たな単一障害点となります。
    複数のクラスタにまたがる複数のモニタを配置することで、この問題を回避できる可能性があります。

両方のシステムで問題が検出され、両方で同じ DNS 変更が行われた場合、問題は発生しないはずです。

uCarp/ハートビート

アクセスされ、ラウンドロビン DNS にある IP アドレスを仮想化し、サーバーがダウンした場合には、ダウンしているサーバーからアップしているサーバーに再割り当てします。たとえば、server1 の VIP は 192.168.0.101 で、server2 の VIP は 192.168.0.102 です。server1 がダウンすると、192.168.1.102 は server2 の追加 IP になります。これには 2 つの問題があります。

  • まず、私の知る限り、uCarp/Heartbeat はピアがアクセス不能かどうか、たとえばピアが ping できない場合に特にピアを監視します。その場合、ダウンしたピアの IP を引き継ぎます。これは問題です。なぜなら、Web サーバーが要求に応えられない理由は、ネットワーク上でアクセス不能になっていること以外にもあるからです。Apache がクラッシュした、構成エラーが発生している、またはその他の理由がある可能性があります。基準は「サーバーが ping できない」ではなく「サーバーが要求どおりにページをサービスしていない」にしたいのですが、uCarp/Heartbeat ではそれを定義できないと思います。

  • 2 番目に、これはデータ センター間では機能しません。データ センター間の各サーバー セットには異なる IP アドレス ブロックがあるためです。データ センター間で仮想 IP をフロートさせることはできません。データ センター間で機能するという要件 (はい、分散ファイル システムとデータベース クラスターはデータ センター間で利用可能です) は必須ではありませんが、あれば良いでしょう。

質問

では、この問題に対処する方法について何かお考えはありますか? 基本的に、高可用性の究極の目標は、単一障害点 (サーバー、ロード バランサー、データ センターのいずれにも) がなく、切り替え時にダウンタイムが実質的に発生しないことです。

答え1

HA と負荷分散が必要な場合は、keepalived を使用して 2 つの VIP を設定します。デフォルトでは、VIP1 は server1 に割り当てられ、VIP2 は server2 に割り当てられます。いずれかのサーバーがダウンすると、他のサーバーが両方の VIP を取得します。

Keepalived は他のサーバーを監視することで HA を管理します。サーバーが到達不能またはいずれかのインターフェースがダウンしている場合、状態が変わります。VIP は他のサーバーに引き継がれます。サービスを監視するには、オプションFAULTを使用できます。track_script

別のデータセンターに別のクラスターを追加する場合は、さらに 2 台のサーバーを追加して、同じ構成を行うことができます。これで、DNS ラウンドロビンを使用して、データセンター間でトラフィックを負荷分散できます。この場合、DNS の更新は必要ありません。

関連情報