SQLミラーリングと監視サーバーを使用した自動フェイルオーバー用に3台のサーバーをセットアップしています。これは期待どおりに機能します。
これで、データベースに接続するアプリケーションで、フェイルオーバーが発生したときに問題が発生したようです。再度接続するには、手動で介入して接続文字列を変更する必要があります。私がこれまでに見つけた最善の解決策Failover Partner
は、接続文字列のパラメーターを使用することですが、直感的でも完全でもありません。Data Source="Mirror";Failover Partner="Principal"
ここにあります。
上記のブログの例(シナリオ#3)から、最初のフェイルオーバーが発生し、プリンシパル(フェイルオーバーパートナー)が使用できない場合、代わりにデータソース(新しいプリンシパル)が使用されます。再度失敗した場合(そして限られた期間内にのみ試した場合)、エラーメッセージが表示されます。これは、接続文字列がキャッシュされているために発生します。したがって、これが更新されるまで、エラーが発生し続けます(接続文字列は、エラーが発生してから約5分後に更新されるようです)。フェイルオーバー後にデータソースとフェイルオーバーパートナーを交換すると、もう1つサイレントフェイルオーバーが発生します。
ミラーリングデータベースを使用するアプリケーションでも(エラーが発生することなく)完全自動フェイルオーバーを実現する方法はありますか?
現在アクティブなデータベースノード名をポーリングし、それに応じて接続文字列を調整するカスタムスクリプトを使用して、潜在的な回避策を確認できますが、現時点ではやり過ぎのようです。