このトピックでは、過負荷保護機能の仕組みと使用方法について説明します。
背景情報
販促イベントなどの高同時実行シナリオでは、プライマリノードの CPU リソースが過負荷になりやすくなります。この問題に対処するため、通常はデータベースのスケールアップ (アップグレード) が必要です。ただし、仕様変更の実行中に一時的な中断やパフォーマンスがゼロに低下する場合があります。この場合、すべてのリクエストがプライマリノードにルーティングされ、プライマリノードの CPU が過負荷になり、サービスの継続性と安定性にさらに影響を及ぼす可能性があります。こうした状況を緩和するため、PolarDB for MySQL はデータベースプロキシ層に過負荷保護機能を導入しています。この機能は、すべての読み取り専用ノードが異常な場合に同時リクエスト数を制限してプライマリノードを保護し、サービス可用性全体に影響が及ばないようにします。
制限事項
-
この機能は PolarProxy 2.8.1 以降が必要で、PolarDB for MySQL 5.6、5.7、および 8.0 をサポートします。
-
この機能は現在、読み書きエンドポイントのみをサポートします。
-
過負荷保護は、すべての読み取り専用ノードが異常 (クラッシュした、またはプライマリデータベースとのレプリケーションが中断された) な場合にのみトリガーされます。その他のシナリオは現時点ではサポートされていません。
注意事項
[概要] ページの [クラスターエンドポイント] セクションで 設定 をクリックし、ノードの設定 ページを開きます。ここで 過負荷保護 を有効化できます。
リーキーバケットアルゴリズムに基づき、PolarProxy はクラスター内のすべての読み取り専用ノードが異常であることを検知すると、プライマリデータベースを保護するためにクラスターへの同時リクエストをプロアクティブに制限します。読み取り専用ノードが回復した場合、または制限時間が経過した場合 (デフォルトでは 60 秒) に、制限は解除されます。
スロットリング制限については、PolarDB for MySQL クラスターが履歴データに基づいて適切な範囲を選択します。クラスターが通常どおりに処理している間、PolarProxy は過去 24 時間にわたるプライマリノードの同時リクエスト数のサンプルを記録します。
過負荷保護がトリガーされると、PolarProxy は履歴データの中央値を上限として使用し、アクティブな接続をスロットリングします。
例
テスト中に、すべての読み取り専用ノードでレプリケーションが中断され、過負荷保護がトリガーされます。この期間中もトラフィックは流れ続けますが、これ以上スパイクしません。
読み取り専用ノードが回復すると、過負荷保護は終了し、トラフィックは通常どおりに転送されます。
