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 ベースの Tengine Web サーバープロジェクトにより、トラフィック量の多い 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 インスタンスにリクエストを割り振ります。なお、インスタンスが正常ステータスに戻った場合にのみ、再びそのインスタンスにリクエストを割り振ります。

ベストプラクティス:

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