アイキャッチ

設計・テスト・レビュー

MicrosoftのMSSQLで特定の構成の場合はフェールオーバーができないの要注意

このページに書いてあること

SQL Serverのピアツーピア(P2P)レプリケーション構成で、アプリのDB接続先をどう切り替えるかを調べた記録です。データを複製する構成と、障害時に接続先を切り替える構成を分けて確認します。

前提

Webアプリから複数のSQL Serverインスタンスへ接続できる構成を想定します。図は当時検討した構成例です。実環境の確認では、SQL Server・接続ドライバーのバージョン、DBの冗長方式、接続文字列を控えます。

WebアプリとSQL Serverを複数台ずつ配置した当時の構成例

問題と解決

当時のP2P構成では、接続文字列に failoverPartner を指定しても、期待した接続先切り替えが起きませんでした。Microsoft JDBC Driverのこのプロパティは、データベースミラーリングのパートナーを指定するためのものです。

可用性グループを使う場合は、リスナー経由で接続し、同期状態・フェールオーバーモードなど自動切り替えの条件を確認します。P2Pと可用性グループを組み合わせる構成もあるため、採用バージョンで利用条件とサポート範囲を確認します。

アプリ側で接続先を切り替える設計では、接続前の失敗と、書き込みの結果が確認できない失敗を分けます。接続が切れた時点でDBに書き込みが済んでいる可能性があるため、再送すると重複する処理は業務キーなどで二重適用を防ぎます。

Webアプリから利用するDB経路を系統ごとに分けた当時の構成例

切り替え試験では、通常時の書き込み、DBを停止した直後の新規接続、処理途中で通信が切れた場合の再接続を分けて観測します。切り替え先だけでなく、保存結果も再取得して確認します。

出典 Microsoft JDBC Driverのミラーリング仕様、P2Pと可用性グループの構成例、自動フェールオーバーの条件

-設計・テスト・レビュー
-,