PolarProxy は、アプリケーションと PolarDB クラスターの間に配置される組み込みプロキシレイヤーです。すべてのインバウンドリクエストをインターセプトし、プライマリノードおよび読み取り専用ノード間でインテリジェントにルーティングすることで、アプリケーションの接続文字列を変更することなく、自動読み書き分離、負荷分散、接続プール、設定可能な整合性レベル、および過負荷保護機能を提供します。
PolarProxy の機能を利用するには、クラスターエンドポイントに接続します。
利用シーン
PolarProxy は、以下の 3 つの一般的な運用課題に対応します:
読み取りトラフィックが高負荷である場合:複数の読み取り専用ノードに読み取りリクエストをルーティングし、負荷を分散してプライマリノードへの負担を軽減します。
接続ストームが発生する場合:接続プールを活用して、数千のアプリケーション接続を少数のデータベース接続に多重化し、トラフィックスパイク時の過負荷を防止します。
混合ワークロードの隔離が必要な場合:読み書きモードまたは読み取り専用モードのクラスターエンドポイントを複数作成し、異なるアプリケーションやトラフィックタイプを物理的に分離します。たとえば、レポート処理ジョブ専用に 2 つの読み取り専用ノードを読み取り専用エンドポイントに割り当て、残りのノードはトランザクション処理用に確保します。
アーキテクチャ

PolarDB Cluster Edition クラスターは、1 つのプライマリノードと複数の読み取り専用ノードで構成されます。クラスターでは、デフォルトで以下の 2 種類のエンドポイントタイプが提供されます:
プライマリエンドポイント:すべてのトラフィックをプライマリノードに直接ルーティングします。
クラスターエンドポイント:PolarProxy が提供するエンドポイントです。読み書きモード(自動読み書き分離)および読み取り専用モードをサポートします。
PolarProxy Enterprise Edition
PolarProxy Enterprise Edition は、クラスタータイプに応じて 2 種類のエディションから選択できます。
Standard Enterprise Edition は、汎用クラスターで使用されます。共有物理 CPU リソース上で実行され、スマートな弾力的スケーラビリティを備えています。デフォルトでは、クラスター内のすべてのノードの合計 CPU コア数の 1/6 に相当する CPU コアが割り当てられます。
Dedicated Enterprise Edition は、専用クラスターで使用されます。パフォーマンスの安定性を高めるため、排他的な物理 CPU リソース上で実行されます。デフォルトでは、クラスター内のすべてのノードの合計 CPU コア数の 1/4 に相当する CPU コアが割り当てられます。
いずれのエディションでも、PolarProxy の CPU リソースはクラスターのコンピュートノードとは独立して割り当てられます。
以下の表に、2 つのエディションの相違点を示します。
| 機能 | Standard Enterprise Edition | Dedicated Enterprise Edition |
|---|---|---|
| リソースタイプ | 弾力的スケーラビリティを備えた共有物理 CPU | 安定したパフォーマンスを実現する排他的物理 CPU |
| コンピュートノードのスケールアウト | 数秒以内で弾力的に実行可能 | リソース予約により可用性を保証 |
両エディションで共通する機能は以下のとおりです:
無料
高可用性冗長アーキテクチャ
最小クラスタースペック:2 コア
クラスターエンドポイントへの接続数に制限はありません
従来のエディションと比較して、クラスターのストレージ IOPS 最大値が 50 % 向上(スペックごとの上限については、「PolarDB for MySQL Enterprise Edition のコンピュートノードスペック」をご参照ください)
読み取り専用ノードの構成はプライマリノードと一致させる必要はありません。業務負荷に応じて読み取り専用ノードのスペックをダウングレードし、コスト削減を図ることができます
最大 15 台の読み取り専用ノードをサポート
1つのプライマリエンドポイントと7つのクラスターエンドポイント
ホットスタンバイによるフェイルオーバー:接続は一時的に 5~10 秒間ブロックされますが、切断されることはありません
整合性レベル:結果整合性、セッションの一貫性、グローバル整合性
接続プール、トランザクション分割、中断保護(接続保持)、データマスキング、構成変更時の業務安定性、マルチマスタークラスター(データベース/テーブル)、およびプロキシスロットリング保護(近日公開予定)
課金
PolarProxy Enterprise Edition は無料です。
以下の表に、既存クラスターの PolarProxy Enterprise Edition への移行方法を示します。
| 購入タイプ | 切り替えポリシー |
|---|---|
| 新規購入クラスター | 2021 年 12 月 9 日以降に新規購入されたすべてのクラスターは、PolarProxy Enterprise Edition を使用します。 |
| 既存の従量課金クラスター | 2021 年 12 月 9 日に自動的に PolarProxy Enterprise Edition に切り替えられました。 |
| 既存のサブスクリプションクラスター | 2021 年 12 月 9 日に自動的に PolarProxy Enterprise Edition に切り替えられました。 |
制限事項
クラスターエンドポイントおよび PolarProxy は、PolarDB Cluster Edition クラスターのみでサポートされます。
注意事項
読み書き分離の動作
トランザクション分割が有効になっていない場合、トランザクション内のすべてのリクエストはプライマリノードに転送されます。
複数ステートメントクエリの実行またはストアドプロシージャの呼び出しを行うと、その接続上の後続のすべてのリクエストがプライマリノードに転送されます。読み書き分離を再開するには、接続を閉じて再接続してください。
複数ステートメントバッチ内(例:
SET NAMES utf8mb4;SELECT * FROM t1;)でSET NAMES utf8mb4などの環境変数を変更しないでください。この操作により、プライマリノードと読み取り専用ノード間でデータの不整合が発生する可能性があります。クラスターエンドポイント経由で
SHOW PROCESSLISTを実行すると、クラスター内のすべてのノードからの結果が返されます。
新規追加または再起動後の読み取り専用ノードへの接続ルーティング
読み取り専用ノードの追加または再起動後に作成されたセッションは、自動的にそのノードへ読み取りリクエストをルーティングします。追加または再起動前に作成されたセッションは、引き続き以前のノードセットへルーティングされます。新規または再起動済みのノードを含めるには、既存の接続を閉じて再接続してください(例:アプリケーションを再起動する)。
接続数制限
クラスターエンドポイント自体には接続数のハード制限はありません。実効的な最大接続数は、コンピュートノードのスペックによって決まります:
読み取り / 書き込み分離モード:アプリケーションがクラスター内の各ノードに個別に接続するため、最大接続数は単一コンピュートノードの最大接続数と等しくなります。
読み取り専用モード:最大接続数は、そのエンドポイントに関連付けられたすべての読み取り専用ノードの最大接続数の合計となります。
読み取り / 書き込み分離モードにおける実効的な接続数制限を増加させるには、トランザクションレベルの接続プールを有効化してください。詳細については、「接続プール」の「トランザクションレベルの接続プール」セクションをご参照ください。
圧縮プロトコル
PolarProxy は、デフォルトまたはカスタムクラスターエンドポイントに対して圧縮プロトコルをサポートしていません。
アプリケーション側接続プールのタイムアウトパラメーター
アプリケーション側接続プールを使用する際に、パケット損失やその他のネットワーク障害により接続がハングするのを防ぐため、接続 URL に connectTimeout および socketTimeout を追加してください。パラメーターの詳細については、「Parameters」をご参照ください。
Java 用 URL の例:
jdbc:mysql://ip:port/db?connectTimeout=60000&socketTimeout=300000PolarProxy のスペックアップ
PolarProxy Enterprise Edition のデフォルトスペックは、ほとんどのワークロードで十分です。観測された負荷に基づいてリアルタイムで自動的にスケールアップされるため、通常は手動での操作は不要です。
以前の PolarProxy バージョンを実行しているクラスターの場合、手動によるスペックアップもサポートされています。
PolarProxy のスペックアップは、PolarProxy が独立したリソース上で実行されるため、クラスターのコンピュートノードに割り当てられた CPU コア数を消費または削減しません。追加の課金は発生せず、PolarProxy Enterprise Edition は無料です。
アップグレード手順については、「PolarProxy のスペックアップ」をご参照ください。
API リファレンス
| 操作 | 説明 |
|---|---|
| CreateDBEndpointAddress | PolarDB クラスター向けのパブリックエンドポイントを作成します。 |
| CreateDBClusterEndpoint | PolarDB クラスター向けのカスタムエンドポイントを作成します。 |
| DescribeDBClusterEndpoints | PolarDB クラスターのエンドポイント情報を照会します。 |
| ModifyDBClusterEndpoint | クラスターエンドポイントの構成を変更します。 |
| ModifyDBEndpointAddress | クラスターエンドポイント(カスタムエンドポイントを含む)のアドレスを変更します。 |
| DeleteDBEndpointAddress | クラスターエンドポイントを削除します。ただし、非公開のカスタムクラスターエンドポイントの削除には使用できません。 |
| DeleteDBClusterEndpoint | カスタムクラスターエンドポイントを削除します。 |