リスナーは、設定された転送ルールに基づいて、ビジネスリクエストを指定されたサーバーグループにルーティングします。その後、サーバーグループはスケジューリングアルゴリズムを用いて、トラフィックをバックエンドサーバーに分散します。
仕組み
サーバーグループの種類
サーバーグループの種類 | デフォルトサーバーグループ | vServer グループ | プライマリ/セカンダリサーバーグループ |
説明 | 各 CLB インスタンスには、デフォルトサーバーグループが 1 つ含まれます。 (正確に 1 つ) | ユーザーが作成および管理します | このサーバーグループを作成および管理します。 |
バックエンドサーバー数 | 1 台以上 | 1 台以上 | 2つ(1つはプライマリ、1つはセカンダリ) |
特徴 |
|
|
|
ユースケース | すべてのリクエストを同一のバックエンドサーバーグループに転送するシンプルなアーキテクチャ。 | ドメイン名やポートによるリクエスト分散など、複雑なアーキテクチャ。 | データベースやコア API など、固定のプライマリセカンダリモードを必要とするサービス。 |
対応するリスナータイプ | TCP/UDP/HTTP/HTTPS | TCP/UDP/HTTP/HTTPS | TCP/UDP のみ |
重みの設定
スケジューリングアルゴリズムは、CLB が複数のバックエンドサーバーに対して着信リクエストをどのように分散するかを決定します。重みは、「重み付き」アルゴリズムを使用する場合に、各サーバーに割り当てるトラフィックの割合を制御します。
適用範囲:重み付きスケジューリングアルゴリズムを使用する場合のみ有効です。ラウンドロビン方式では無効です。
有効値:0 ~ 100。デフォルト値は 100 です。
重みを 0 に設定した場合:サーバーは新しいリクエストの受付を停止します。既存の接続は通常終了まで継続されます。ヘルスチェックは引き続き実行されます。これは、グレースフルシャットダウンに一般的に使用されます。
重み変更の影響:変更は新規接続にのみ適用されます。既存の接続には影響しません。持続的接続のシナリオでは、重みを調整した後にトラフィックが徐々に移行します。
サービスの高可用性
CLB のヘルスチェックを有効化すると、定期的にリクエストを送信してサーバーの状態を検証できます。
ヘルスチェックが成功した場合:サーバーは正常です。CLB はそのサーバーにトラフィックを転送します。
ヘルスチェックが失敗した場合:サーバーは異常です。CLB はサーバーが回復するまで、新しいリクエストを送信しません。
CLB のヘルスチェックは 100.64.0.0/10 CIDR ブロックを使用します。バックエンドサーバーのセキュリティグループルールが、この CIDR ブロックからのトラフィックを許可していることを確認してください。許可されていない場合、ヘルスチェックが失敗し、サービス中断を引き起こす可能性があります。プライマリ/セカンダリサーバーグループは、自動フェールオーバーのためにヘルスチェックに依存します:
プライマリサーバーのヘルスチェックが失敗した場合、トラフィックはセカンダリサーバーに切り替わります。デフォルトでは、セカンダリサーバーに対するヘルスチェックは実行されません。フェールオーバー前に、セカンダリサーバーが利用可能であることを確認する必要があります。
フェールオーバー時間は「ヘルスチェック応答タイムアウト」設定に依存します。プライマリサーバーが回復した後、トラフィックは自動的に元のプライマリサーバーに戻ります。
適用範囲
関連付け:
リスナーおよびサーバーグループは、CLB インスタンスにスコープが限定されるリソースです。異なる CLB インスタンス間でリスナーまたはサーバーグループを共有することはできません。
1 つのサーバーグループを複数のリスナーに関連付けることはできますが、1 つのリスナーを複数のサーバーグループに関連付けることはできません。
CLB のレイヤー 4 リスナーでは、ECS インスタンスをバックエンドサーバーとクライアントの両方として使用することはサポートされていません。必要な場合は、代わりにレイヤー 7 リスナーをご利用ください。
バックエンドサーバーの関連付け:
CLB では、同一の Alibaba Cloud アカウントおよび同一リージョン内のバックエンドサーバーのみを関連付けることができます。
プライベートネットワーク CLB インスタンスの場合:CLB インスタンスと同じ VPC 内のバックエンドサーバーのみを関連付けることができます。
インターネット向け CLB インスタンスの場合:関連付けるすべてのバックエンドサーバーは、同一 VPC に所属している必要があります。
すべての CLB サーバーグループの種類で、以下のリソースをバックエンドサーバーとして関連付けることができます:Elastic Compute Service (ECS) インスタンス、Elastic Network Interfaces (ENI)、Elastic Container Instances (ECI)。
ENI を追加するには、あらかじめ ECS インスタンスにアタッチ済みの ENI のみを指定できます。ENI のプライベート IP アドレス(プライマリおよびセカンダリ)の両方を追加できます。
ECS インスタンスがバックエンドサーバーとして稼働中にホットマイグレーションを実行すると、CLB との持続的接続が切断される場合があります。接続を復元するには、アプリケーションで自動再接続機能を実装してください。
構成の変更可否:
構成の変更可否
サーバーグループの追加/削除
ポートの変更
重みの変更
デフォルトサーバーグループ
リスナーを作成して関連付けた後、ポートは変更できません。
vServer グループ
プライマリ/セカンダリサーバーグループ
プライマリ/セカンダリの役割は変更できません。
サーバーグループの構成
コンソール
デフォルトサーバーグループ
作成は不要です。各 CLB インスタンスには、正確に 1 つのデフォルトサーバーグループが含まれます。
サーバーの追加:
CLB - インスタンス管理ページに移動します。対象のインスタンス ID をクリックし、デフォルトのサーバーグループ タブを選択します。追加 をクリックします。
利用可能なリソースを絞り込むために、サーバータイプ および リソースグループ を設定します。
ENI を追加するには、まず「詳細モード」を有効化します。次に、ENI がアタッチされている ECS インスタンスの横にあるプラス記号アイコンをクリックし、対象の ENI を選択します。関連付ける ENI をチェックし、IP を選択します。
ポートおよび重みの構成:
ポートの構成: リスナー タブに移動し、リスナーの作成 をクリックします。バックエンド サーバー ステップで、デフォルトサーバーグループの ポート を設定します。同一リスナーのデフォルトサーバーグループに属するすべてのサーバーは、同一ポートを使用する必要があります。
ポートはリスナー追加時のみ指定可能です。後から変更することはできません。
重みの構成:選択したサーバーの 重み を設定します。
vServer グループ
CLB - インスタンス管理ページに移動します。対象のインスタンス ID をクリックし、仮想サーバーグループ を選択します。VServer Group の作成 をクリックします。
追加 サーバー:
利用可能なリソースを絞り込むために、サーバータイプ および リソースグループ を設定します。
ENI を追加するには、まず「詳細モード」を有効化します。次に、ENI がアタッチされている ECS インスタンスの横にあるプラス記号アイコンをクリックし、対象の ENI を選択します。関連付ける ENI をチェックし、IP を選択します。
選択したサーバーの ポート および 重み を構成します。ポートの追加 をクリックして、同一バックエンドサーバーに複数のポートを割り当てます。
プライマリ/セカンダリサーバーグループ
CLB - インスタンス管理ページに移動します。対象のインスタンス ID をクリックし、マスタースレーブサーバグループ を選択します。マスタースレーブサーバーグループを作成する をクリックします。
追加 サーバー:
利用可能なリソースを絞り込むために、サーバータイプ および リソースグループ を設定します。
ENI を追加するには、まず「詳細モード」を有効化します。次に、ENI がアタッチされている ECS インスタンスの横にあるプラス記号アイコンをクリックし、対象の ENI を選択します。関連付ける ENI をチェックし、IP を選択します。
バックエンドサーバーは、正確に 2 台追加できます。
選択したサーバーの ポート を構成します。ポートの追加 をクリックして、同一バックエンドサーバーに複数のポートを割り当てます。その後、サーバー を選択して、プライマリ/セカンダリの関係を定義します。
API
デフォルトサーバーグループ
AddBackendServers を呼び出して、バックエンドサーバーを追加します。
SetBackendServers を呼び出して、バックエンドサーバーの重みを設定します。
RemoveBackendServers を呼び出して、バックエンドサーバーを削除します。
vServer グループ
CreateVServerGroup を呼び出して、vServer グループを作成し、バックエンドサーバーを追加、ポートおよび重みを構成します。
AddVServerGroupBackendServers または RemoveVServerGroupBackendServers を呼び出して、指定された vServer グループからバックエンドサーバーを追加または削除します。
DeleteVServerGroup を呼び出して、vServer グループを削除します。
プライマリ/セカンダリサーバーグループ
CreateMasterSlaveServerGroup を呼び出して、プライマリ/セカンダリサーバーグループを作成します。
DeleteMasterSlaveServerGroup を呼び出して、プライマリ/セカンダリサーバーグループを削除します。
よくある質問
CLB インスタンスの稼働中に、ECS インスタンスの台数を調整できますか?
デフォルトサーバーグループおよび vServer グループ:いつでもバックエンド ECS インスタンスの台数を増減できます。また、異なる ECS インスタンスへの切り替えも可能です。サービスの安定性を確保するため、これらの操作を実行する前にヘルスチェックを有効化し、少なくとも 1 台のバックエンド ECS インスタンスが正常であることを確認してください。
プライマリ/セカンダリサーバーグループ:対応していません。
バックエンド ECS インスタンスで異なるオペレーティングシステムを実行できますか?
異なる場合があります。
CLB はバックエンド ECS インスタンスのオペレーティングシステムを制限していませんが、アプリケーションサービスおよびデータが各インスタンス間で一貫している必要があります。ただし、管理およびメンテナンスの簡素化のため、同一のオペレーティングシステムの使用を推奨します。
異なるリージョンの ECS インスタンスをバックエンドサーバーとして使用できますか?
CLB は、クロスリージョンのバックエンドサーバーの関連付けをネイティブでサポートしていません。クロスリージョンデプロイメントを実現するには、以下のいずれかのオプションをご利用ください:
複数のリージョンに展開された CLB インスタンスの前方に Global Traffic Manager (GTM) を配置します。GTM がトラフィックを異なる CLB インスタンスにルーティングすることで、クロスリージョンのロードバランシングを実現します。詳細については、「Global Traffic Manager」をご参照ください。
Application Load Balancer (ALB) または Network Load Balancer (NLB) をご利用ください。これらは、クロスリージョンのバックエンドサーバーの関連付けをサポートしています。詳細については、「Application Load Balancer」または「Network Load Balancer」をご参照ください。
100 で始まる IP アドレスが頻繁に私の ECS インスタンスにアクセスするのはなぜですか?
これらのリクエストは、CLB のヘルスチェックおよび可用性監視から発生しています。
ソース: 予約済みの Alibaba Cloud CIDR ブロック
100.64.0.0/10。セキュリティ:この CIDR ブロックは、Alibaba Cloud の内部用途専用に予約されています。他のユーザーはこの範囲の IP アドレスを割り当てることができないため、セキュリティ上のリスクはありません。
推奨事項:サービスの可用性を確保するため、セキュリティグループルールでこの CIDR ブロックからのトラフィックを許可してください。
ECS インスタンスで圧縮を構成していないのに、CLB からの HTTP 応答が圧縮されるのはなぜですか?
原因:CLB リスナーの構成で Gzip 圧縮が有効になっており、クライアントブラウザが圧縮をサポートしています。
対処方法:CLB コンソールのリスナー構成で Gzip 圧縮を無効化するか、TCP リスナーをご利用ください。
HTTP 1.0 を使用する ECS インスタンスは、チャンク転送エンコーディングをサポートしますか?
サポートしています。
CLB インスタンスのバックエンド ECS インスタンスが、User-Agent 「KeepAliveClient」で多数のリクエストを頻繁に受信するのはなぜですか?
症状:バックエンド ECS インスタンスが、Alibaba Cloud の内部 IP アドレスから多数の GET リクエストを受信し、User-Agent が
KeepAliveClientとなっています。原因:リスナーのプロトコルが TCP ですが、ヘルスチェックのプロトコルが HTTP です。TCP リスナーで HTTP ヘルスチェックを使用すると、デフォルトで GET リクエストが送信されます。
解決策:リスナーとヘルスチェックで同一のプロトコル(TCP または HTTP)をご利用ください。
デフォルトサーバーグループのサーバーポートを変更できますか?
直接変更することはできません。
制限事項:ポートはリスナー作成時にのみ設定可能です。同一リスナーのデフォルトサーバーグループに属するすべてのバックエンドサーバーは、同一ポートを使用する必要があります。
解決策:同一リスナーで異なるバックエンドポートを構成するには、vServer グループをご利用ください。
CLB のレイヤー 4 リスナーは、ECS インスタンスをバックエンドサーバーおよびクライアントの両方として使用することをサポートしますか?
いいえ。この構成はループバック状態を引き起こします。
代替ソリューション:
CLB のレイヤー 7 リスナー(HTTP または HTTPS)をご利用ください。
NLB インスタンスをご利用になり、サーバーグループの「クライアント IP の保持」機能を無効化してください。詳細については、「NLB インスタンスで、サーバーグループ内の ECS インスタンスをバックエンドサーバーおよびクライアントの両方として動作させるにはどうすればよいですか?」をご参照ください。
CLB のバックエンドでは TIME-WAIT 接続が多く見られるのに、ALB のバックエンドでは少ないのはなぜですか?
CLB と ALB は、バックエンドサーバーとの通信において異なる接続メカニズムを採用しています。
CLB:デフォルトで短命の HTTP 接続を使用します。CLB がリクエストをバックエンドサーバーに転送する際、HTTP ヘッダーに
Connection: closeフィールドを挿入します。バックエンドサーバーがリクエストを処理した後、このヘッダーに基づいて FIN パケットを送信して接続を閉じます。接続が閉じるたびに、TIME-WAIT 状態(デフォルトで 60 秒)に入ります。高並列処理のシナリオでは、多数の TIME-WAIT 接続が急速に蓄積する可能性があります。ALB:デフォルトで永続的な HTTP 接続(keep-alive)をサポートします。単一の TCP 接続を再利用して複数のリクエストを処理できます。永続的な接続を有効化すると、接続の切断回数が減少し、結果として TIME-WAIT 接続の数も減少します。