すべてのプロダクト
Search
ドキュメントセンター

PolarDB:接続保持

最終更新日:Mar 29, 2026

スペックアップ、スイッチオーバー、マイナーバージョンアップグレードなどの O&M アクティビティや、プライマリノードの障害などの予期せぬイベントにより、ご利用のアプリケーションと PolarDB との接続が切断されることがあります。接続保持機能がない場合、アプリケーション側で切断を検出し、再接続する必要があります。これにより、サービスが中断されたり、コード内に再接続ロジックを実装する必要が生じたりします。接続保持機能を有効にすると、PolarProxy はこれらのイベントが発生してもフロントエンド接続を維持し、セッション状態を透過的に復元するため、アプリケーション側では中断を意識することはありません。

サポートされる構成

接続保持機能には、以下の要件があります:

  • PolarProxy バージョン 2.4.7 以降。バージョンの確認とアップグレードについては、「マイナーバージョンのアップグレード」をご参照ください。

  • PolarDB for MySQL 5.6、5.7、または 8.0 (Cluster Edition)。

  • サポートされているエンドポイントタイプ (下表をご参照ください)。

サポートされているエンドポイントタイプ:

エンドポイントタイプ負荷分散ポリシー接続保持のサポート
デフォルトのクラスターエンドポイント任意はい
カスタムエンドポイントアクティブリクエストベースの負荷分散はい
カスタムエンドポイント接続ベースの負荷分散いいえ — ノードを削除すると、そのノード上のすべての接続が切断されます
読み取り専用ノードへの直接接続N/Aいいえ — ノード削除時に常に切断されます

仕組み

プライマリノードのスイッチオーバー

各データベースセッションには、2 つのレイヤーがあります:

  • ご利用のアプリケーションと PolarProxy 間のフロントエンド接続

  • PolarProxy とプライマリノードまたは読み取り専用ノード間のバックエンド接続

接続保持機能がない場合、プライマリノードのスイッチオーバーによって両方のレイヤーが中断され、ご利用のアプリケーションは再接続する必要があります。接続保持機能を有効にすると、PolarProxy はフロントエンド接続を維持したまま、古いプライマリノードから切断し、新しいプライマリノードに接続してセッション状態を復元します。このスイッチオーバーは、ご利用のアプリケーションに対して透過的に行われます。

12

セッション状態の復元

MySQL セッションには、スイッチオーバー後も維持する必要がある状態情報が含まれています。これには、システム変数、ユーザー変数、一時テーブル、文字セットエンコーディング、トランザクションステータス、プリペアドステートメントステータスなどがあります。PolarProxy が新しいプライマリノードに接続すると、この状態を再実行して、ご利用のアプリケーションのセッション設定が変更されないようにします。

たとえば、set names utf8; が実行されると、セッションは names=utf8 の状態になります。PolarProxy はこのエンコーディングを新しいプライマリノードで復元するため、文字セットのエラーは発生しません。

スイッチオーバー中のタイミング

新しいプライマリノードが引き継ぐ際、元のデータベースと新しいデータベースの両方が一時的にアクセスできなくなります。この持続時間は、データベースの負荷によって異なります。

  • 新しいプライマリノードが 60 秒以内に回復した場合、PolarProxy はリクエストをそのノードにルーティングし、セッションは継続されます。

  • 新しいプライマリノードが 60 秒以内に回復しない場合、PolarProxy は接続を切断します。ご利用のアプリケーションは再接続する必要があります。この動作は、接続保持機能が有効であるかどうかに関わらず発生します。

読み取り専用ノードの削除

PolarProxy が読み取り専用ノードの削除リクエストを受信すると、すべての新しい接続とアイドルリクエストは、直ちにそのノードからリダイレクトされます。

削除対象のノードでリクエストがすでに実行中の場合、PolarProxy は最大 60 秒間、その完了を待ちます。リクエストがその時間内に完了した場合、接続は維持されます。60 秒経過してもリクエストが実行中の場合、接続は切断されます。

[接続数ベースの負荷分散] ポリシーを使用するエンドポイントから読み取り専用ノードを削除すると、そのノード上のすべての接続(ノードへの直接接続を含む)が切断されます。

制限事項

以下の状況では、接続保持機能はセッションを維持できません:

状況説明
アクティブな一時テーブルスイッチオーバー開始時に、セッションに一時テーブルが存在する場合。
部分的な結果配信スイッチオーバー時にクエリ結果が PolarProxy に部分的にしか配信されていない場合。たとえば、SELECT 文が 100 MB のデータを返しますが、スイッチオーバーがトリガーされた時点で 10 MB しか受信されていない場合などです。
進行中のトランザクションスイッチオーバー開始時にアクティブなトランザクションが存在する場合。たとえば、begin; insert into ... のような場合です。
カーソルまたは stmt_send_long_data が利用中の場合カーソルまたは stmt_send_long_data メソッドが利用中で、スイッチオーバー開始時にリクエストが完了していない場合。
スイッチオーバーまたはノードの削除が開始されると、PolarProxy はアクティブな接続がアイドル状態になるまで最大 60 秒間待機します。アイドル状態とは、すべてのリクエストが応答を返すか、トランザクションが終了した状態を指します。この時間内にアイドル状態になった接続は維持されます。

パフォーマンステスト

以下の結果は、さまざまな O&M シナリオにおける接続維持率を示しています。

テスト環境:

パラメーター
クラスターPolarDB for MySQL 8.0、プライマリノード 1 台、読み取り専用ノード 2 台
ノード仕様4 コア 16 GB (polar.mysql.x4.large)
テストツールSysbench
テストデータテーブル数 20、各テーブルの行数 10,000、並列度 20

手順: 各 O&M アクティビティの前後で接続維持率を測定します。

結果:

シナリオ接続維持率条件
新しいプライマリノードへの切り替え100%
データベースカーネルエンジンのマイナーバージョンアップグレード100%データベースプロキシのマイナーバージョンアップグレードは対象外です。これらのアップグレードはネットワーク中断を引き起こす可能性があります。
クラスター仕様のアップグレード100%段階的なアップグレード (例:4 コアから 8 コアへ) にのみ適用されます。段階を飛ばしたアップグレード (例:4 コアから 16 コア以上へ) は、サービス中断を引き起こす可能性があります。
ノードの追加または削除100%読み取り専用ノードの削除中にデータベースプロキシノードがスペックダウンされた場合、一部の接続が閉じられることがあります。