web-dev-qa-db-ja.com

Apache-高可用性

Apacheを高可用性としてセットアップする方法を探しています。アイデアは、同じWebサイトにサービスを提供する2つ以上のApacheサーバーのクラスターを持つことです。各サーバーのIPアドレスをラウンドロビンDNSで設定して、各要求がクラスター内のサーバーの1つにランダムに送信されるようにすることができます(負荷分散についてはまだあまり気にしていませんが、後で再生します)。

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

自動DNS更新

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

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

  • 第二に、クラスターの機能を監視するプログラム
    およびDNSレコードの更新は、新しい単一障害点になります。我々
    複数のモニターを複数のモニターに分散させることで、これを回避できる場合があります

システムは、両方が問題を検出し、両方が同じDNS変更を行った場合、問題が発生することはないはずです。

Carp/Heartbeat

アクセスされ、ラウンドロビン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でそれを定義することはできないと思います。

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

質問

それで、これに対処する方法について何か考えはありますか?基本的に、高可用性の聖杯:単一障害点(サーバー、ロードバランサー、またはデータセンターのいずれか)がなく、スイッチオーバー時のダウンタイムも事実上ありません。

2
Nick Coons

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

Keepalivedは、他のサーバーを監視することでHAを処理します。サーバーに到達できない場合、またはインターフェイスがダウンしている場合、サーバーはFAULT状態に変わります。 VIPは他のサーバーによって取得されます。サービスを監視するには、track_scriptオプションを使用できます。

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

3
Khaled