可用性グループはシームレスなフェイルオーバー(クエリの失敗なし)を提供できますか?


9

SQL Server 2012で可用性グループ機能をテストしており、プライマリサーバーがセカンダリサーバーにフェールオーバーするときに、約15秒のダウンタイムがあることがわかりました。この間に実行されたすべてのSQLクエリは、フェイルオーバーの移行が完了するまで失敗します。

これを0秒にして、フェールオーバーの移行中にクエリが失敗しないようにする方法はありますか?

言い換えると、失敗中に実行中のクエリを失敗せずにプライマリサーバーにリダイレクトする方法はありますか。フェイルオーバーの移行中に接続しますか?

現在、可用性グループに2台のサーバーをセットアップしています。


1
この質問(と回答)を確認してください:dba.stackexchange.com/questions/25124/...
マックス・ヴァーノン

これを実行できるのはOracle RACだけです。
Richard Brown

または、HAproxyのように、SQLサーバーの前の適切な設定でLinux loadballancerを使用する必要があります。
kakaz

回答:


9

いいえ、AlwaysOn(またはSQL Server全般では、私の知る限り)でゼロダウンタイムフェールオーバーを実行する方法はありません。そのためには、接続しているSQL Serverがクエリの途中で別のノードに状態を転送する必要があります。多くのフェイルオーバーは予期しないものであるため、それは不可能です。

ただし、AlwaysOnで「読み取り専用のセカンダリ」を有効にすると、プライマリサーバーがフェイルオーバーしたときにリーダーのダウンタイムがゼロになります-とにかく、セカンダリコピーに接続してSELECTクエリを実行しているためフェイルオーバーにも気付くでしょう。「書き込み」接続を開いているユーザーには引き続き中断がありますが、ユーザーベースの少なくとも一部は中断されません。


「読み取り専用セカンダリ」が有効になっている場合、読み取り要求はプライマリで発生しますか、それとも常にセカンダリで実行されますか?そして、その状況でセカンダリサーバーに障害が発生した場合はどうなりますか?
John

セカンダリに対する読み取りは、セカンダリに接続するようにクライアントを構成した場合にのみ発生します。
Max Vernon

1
なるほど、よりスマートなクライアントアプリが必要です。
John

@JohnHughes:このMicrosoftドキュメント(5ページの中央)を確認してください:tinyurl.com/9dtvndvとこのブログ投稿:tinyurl.com/8cyr9za。よりスマートなアプリは必ずしも必要ではありません。この機能を有効にすると、すべてのアプリケーションが読み取り可能なセカンダリに接続できるように指定できますが、DDL / DMLトランザクションを実行しようとすると失敗します。新しいネイティブクライアントを使用している場合は、「ReadIntent」を指定できます。つまり、新しいクライアントはセカンダリから読み取り、古いクライアントは引き続きプライマリに対してすべてのトランザクションを実行します。オプションですが、ある程度の読み取りが必要です。
SqlRyan、

SqlRyanは正しいです。クライアントを切断せずに、AlwaysOn可用性グループを使用してSQL Serverインスタンスをフェイルオーバーする方法はありません。
mrdenny 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.