@shinyaz

HikariCP は Blue/Green Switchover 後も旧 Writer に接続し続ける

Aurora の Blue/Green Switchover 後、HikariCP を使ったアプリケーションが旧 Writer(Reader に降格済み)に接続し続ける問題に遭遇した。成功した398回のクエリすべてが旧 IP に接続し続け、Green 環境の新 Writer には一度も切り替わらなかった。

AWS のドキュメントによると、Switchover 中に両環境の全接続が強制切断される。しかし、切断後に HikariCP が新規接続を作成する際、DNS キャッシュがまだ旧 Writer の IP を返していると旧環境(Reader に降格済み)に再接続してしまう。Aurora のクラスターエンドポイントは DNS TTL が 60秒のため、この間は旧環境に接続し続けるリスクがある。読み取りクエリは成功するが、書き込みクエリは read-only transaction エラーになる。

この問題は PostgreSQL でも MySQL でも同じで、エンジンに依存しない。DNS キャッシュとコネクションプールの再接続タイミングの問題であり、DNS の伝播タイミングによっては新しい Writer に接続できるケースもある。

対策としては以下がある。

  • AWS JDBC Driver の BG プラグインを使う(IP ベースのルーティングで DNS を回避)
  • HikariCP の maxLifetime を短く設定し、古い接続を定期的に破棄する
  • connectionTestQuery で接続の有効性を検証する(ただし新 Writer への切り替えは保証されない)

詳細な検証結果は Aurora Blue/Green 実践検証 第2回 を参照。

共有する

田原 慎也

田原 慎也

ソリューションアーキテクト @ AWS

AWS ソリューションアーキテクトとして金融業界のお客様を中心に技術支援を行っています。クラウドアーキテクチャや AI/ML に関する学びをこのサイトで発信しています。このサイトの内容は個人の見解であり、所属企業の公式な意見や見解を代表するものではありません。