本ドキュメントでは、さまざまなビジネスニーズを満たすためのさまざまなシステム設計および製品構成の観点から、Server Load Balancer (SLB) の高可用性アーキテクチャーについて説明します。 SLB と併せて Alibaba Cloud の DNS を運用することによりリージョン間でのディザスタリカバリを実現できます。

SLB システムの高可用性

クラスターにデプロイされた Server Load Balancer (SLB) は、セッションを同期することにより、ECS インスタンスの単一障害点 (SPOF) を防ぎます。 セッション同期により、冗長性を高め、安定したサービスを提供することができます。 レイヤー 4 SLB は、オープンソースソフトウェアである Linux Virtual Server (LVS) と Keepalived の使用により、負荷分散を実現しています。 レイヤー 7 SLB は、Tengine の使用により負荷分散を実現しています。 Nginx をベースにした Web サーバープロジェクトである Tengine により、アクセス量の多い Web サイト用の高度な機能が提供されます。

インターネットからのリクエストは、ECMP ルーティングを介して LVS クラスターに到達します。 LVS クラスター内の各 LVS は、クラスター内の他の LVS マシンとマルチキャストパケットでセッションを同期します。LVS クラスター内の各マシンに、セッション同期が実装されています。 また、LVS クラスターは Tengine クラスターに対してヘルスチェックを実行し、正常でないマシンを Tengine クラスターより除外してレイヤー 7 SLB の可用性を確保します。

ベストプラクティス:

セッションを同期することにより、クラスター内のサーバー障害による長時間接続への影響を回避します。 しかし、短時間接続、あるいは、接続してもセッション同期ルールがトリガーされない場合 (3 ウェイハンドシェイクが完了しない)、クラスター内のサーバー障害がユーザーリクエストに影響する可能性は残ります。 サーバー障害によるセッション中断を防ぐには、再試行機能を付加して、ユーザーアクセスへの影響を抑えます。

単一 SLB インスタンスでの高可用性

より安定した、信頼性の高いサービスを提供できるように、SLB は多くのリージョンにおいて複数のゾーンに配備されています。 プライマリゾーンが利用できなくなると、SLB はすばやく (30 秒以内) セカンダリゾーンに切り替えてサービスを再開します。 なお、プライマリゾーンが再び利用できるようになると、SLB は自動的にプライマリゾーンに切り戻します。

ゾーンレベルでの耐障害性には、プライマリゾーンとセカンダリゾーンを用意します。 Alibaba Cloud では、インスタンスの障害ではなく、稼働したいたゾーンが停電や光ケーブルの故障により利用できないと検知された場合にのみ、セカンダリゾーンに切り替わります。

ベストプラクティス:

  1. 耐障害性を高めるには、複数ゾーンのあるリージョンに SLB インスタンスを作成することを推奨します。
  2. 必要に応じて、プライマリゾーンとセカンダリゾーンそれぞれに ECS インスタンスをデプロイします。 ECS インスタンスが最も多くデプロイされているゾーンをプライマリゾーンに設定することで、アクセスの遅延を最小限に抑えることができます。

    なお、1 つのゾーンにすべての ECS インスタンスをデプロイすることは推奨しません。 セカンダリゾーンにも ECS インスタンスをいくつかデプロイし、極限の状況下 (プライマリゾーンが利用不可) においてもセカンダリゾーンでリクエストが処理されるようにします。

複数の SLB インスタンスでの高可用性

可用性要件が非常に高い場合、単一の SLB インスタンスでは可用性を確保できない場合があります。 たとえば、ネットワーク攻撃や誤った設定によって SLB インスタンスが利用できなくなっても、ゾーンの切り替えはトリガーされません。ソーンレベルの障害が発生していないためです。 高可用性が必須な場合は、複数の SLB インスタンスを作成し、Alibaba Cloud DNS でリクエストをスケジュールするか、グローバル SLB でリージョン間でディザスタリカバリするようにします。

ベストプラクティス:

SLB インスタンスおよび ECS インスタンスは、リージョン内の複数のゾーンに、または複数のリージョンにデプロイします。また、Alibaba Cloud DNS でアクセスをスケジュールします。

バックエンド ECS インスタンスでの高可用性

Server Load Balancer は、ヘルスチェックを実行してバックエンド ECS インスタンスのサービス可用性を確認します。 ヘルスチェックを実行することにより、フロントエンドサービス全体の可用性は高まり、また、バックエンドサーバーに障害が発生した際のサービス可用性に与える影響を抑えます。

Server Load Balancer はインスタンスが正常でないと検知すると、他の正常な ECS インスタンスを割り振ります。なお、インスタンスが正常ステータスに戻った場合にのみ、再びそのインスタンスにリクエストを割り振ります。

ベストプラクティス:

ヘルスチェック機能を使用するには、ヘルスチェックを有効にして設定を行います。