リスナーは、設定された転送ルールに基づいて、サービス要求を指定されたサーバーグループにルーティングします。サーバーグループは、スケジューリングアルゴリズムに基づいて、サービストラフィックを対応するバックエンドサーバーに分散します。
仕組み
サーバーグループの種類
サーバーグループの種類 | デフォルトサーバーグループ | 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 つのリスナーを関連付けられるサーバーグループは 1 つだけです。
CLB のレイヤー 4 リスナーでは、バックエンドサーバーとして機能すると同時にクライアントとしても機能する ECS インスタンスはサポートされていません。このような構成が必要な場合は、レイヤー 7 リスナーをご利用ください。
バックエンドサーバーの追加:
CLB では、同一アカウントおよび同一リージョンからバックエンドサーバーを追加できます。
プライベートネットワーク CLB インスタンス:CLB インスタンスと同じ VPC 内にあるバックエンドサーバーのみを追加できます。
パブリックネットワーク CLB インスタンス:複数のバックエンドサーバーを追加する場合、それらはすべて同一 VPC に所属している必要があります。
すべての CLB サーバーグループの種類で、以下のリソースをバックエンドサーバーとして追加できます:ECS インスタンス、Elastic Network Interfaces (ENI)、Elastic Container Instance (ECI)。
すでに ECS インスタンスにアタッチされている ENI のみを追加できます。ENI のプライマリプライベート IP アドレスおよびセカンダリプライベート IP アドレスの両方を追加できます。
バックエンドサーバーとして機能する ECS インスタンスがホットマイグレーションを実行すると、CLB との持続的接続が切断される場合があります。再接続後に接続は復旧します。アプリケーションには自動再接続機構を備える必要があります。
構成可能性:
設定可能性
サーバーグループの追加/削除
ポートの変更
重みの変更
デフォルトサーバーグループ
最初にリスナーを作成して関連付けた後、ポートは変更できません。
vServer グループ
プライマリ/セカンダリサーバーグループ
プライマリ/セカンダリの役割は変更できません。
サーバーグループの構成
コンソール
デフォルトサーバーグループ
デフォルトサーバーグループは作成する必要はありません。各 CLB インスタンスにはデフォルトサーバーグループが含まれています。
サーバーの追加:
またはCLB インスタンス管理ページに移動します。対象のインスタンス ID をクリックし、デフォルトのサーバーグループタブを選択します。追加をクリックします。
利用可能なリソースを絞り込むために、サーバータイプおよびリソースグループを設定します。
Elastic Network Interface (ENI) を追加するには、[詳細モード] を有効化します。ENI が関連付けられた ECS インスタンスの横にあるプラス記号アイコンをクリックします。目的の ENI を見つけ、選択してバインドし、その後IPを選択します。
ポートおよび重みの構成:
ポートの構成: リスナータブを選択します。リスナーの作成をクリックします。バックエンド サーバーウィザードページで、デフォルトサーバーグループ内のサーバーのポートを設定します。同一リスナー配下のデフォルトサーバーグループ内のすべてのサーバーは、同一ポートを使用する必要があります。
ポートはリスナーを追加する際にのみ指定できます。後から変更することはできません。
選択したサーバーの重みを構成します。
vServer グループ
またはCLB インスタンス管理ページに移動します。対象のインスタンス ID をクリックし、仮想サーバーグループを選択します。VServer Group の作成をクリックします。
追加 サーバー:
利用可能なリソースを絞り込むために、サーバータイプおよびリソースグループを設定します。
Elastic Network Interface (ENI) を追加するには、[詳細モード] を有効化します。ENI が関連付けられた ECS インスタンスの横にあるプラス記号アイコンをクリックします。目的の ENI を見つけ、選択してバインドし、その後IPを選択します。
選択したサーバーのポートおよび重みを構成できます。ポートの追加を選択することで、同一バックエンドサーバーに対して複数の異なるポートを構成できます。
プライマリ/セカンダリサーバーグループ
またはCLB インスタンス管理ページに移動します。対象のインスタンス ID をクリックし、マスタースレーブサーバグループを選択します。マスタースレーブサーバーグループを作成するをクリックします。
追加 サーバー:
利用可能なリソースを絞り込むために、サーバータイプおよびリソースグループを設定します。
Elastic Network Interface (ENI) を追加するには、[詳細モード] を有効化します。対象の ECS インスタンスの横にあるプラス記号アイコンをクリックします。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) を展開します。詳細については、「Global Traffic Manager」をご参照ください。
Application Load Balancer (ALB) または Network Load Balancer (NLB) を使用します。これらはどちらもクロスリージョンのバックエンドサーバーをサポートしています。詳細については、「Application Load Balancer ALB」または「Network Load Balancer NLB」をご参照ください。
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 インスタンスを使用し、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)をサポートします。1 つの TCP 接続を再利用して複数の要求を処理できます。永続的接続を有効化することで、接続の切断回数が減少し、結果として TIME-WAIT 接続の数も減少します。
バックエンドサーバー間でトラフィックが均等に分散されないのはなぜですか?
一般的な原因 | 説明 | トラブルシューティングおよび解決策 |
セッション維持 | セッション維持が有効になっている場合、同一クライアントからの要求は常に同一のバックエンドサーバーに送信されます。ストレステストのように少数のクライアントからトラフィックが生成される場合、トラフィックが少数のサーバーに集中してしまうことがあります。 | セッション維持が有効になっているかどうかを確認し、ビジネス要件に本当に必要かどうかを検討してください。 |
持続的接続 | 既存の持続的接続は、重みを変更しても再分散されません。そのため、重みを調整した後も、トラフィックの分散は徐々に変化します。 |
|
ヘルスチェックの失敗またはフリッピング | 一部のバックエンドサーバーがヘルスチェックに失敗し、トラフィックの受付を停止しています。あるいは、ヘルス状態が健全/不健全を頻繁に切り替わっており、不安定なトラフィック分散を引き起こしています。 |
|
全体の要求量が少ない | CLB のモニタリングメトリックを確認できます。要求総数が少ない場合、トラフィック分散のわずかな不均衡は正常です。 | 要求量が増加した後のトラフィック分散を観察できます。高負荷下でも不均衡が継続する場合は、他の原因を調査する必要があります。 |
重みの構成が不適切 | サーバーの重みが実際の処理能力と一致していません。その結果、一部のサーバーが過負荷になり、他のサーバーはアイドル状態になります。 |
|