web-dev-qa-db-ja.com

「AlwaysOn」は常に「Always On」ではありませんか?

Windowsフェールオーバークラスターを作成し、SQL Serverの2つのインスタンスをSQL Serverフェールオーバークラスターのノードとして追加しました。

SQL構成マネージャーで「AlwaysOn可用性グループ」を使用するようにサーバーを設定します。

フェールオーバーをテストするために、長いクエリを読み込んで実行し、フェールオーバークラスターマネージャーを使用してアクティブノードを停止し、アクティブノードのクラスターサービスを停止しました。

クエリは接続なしで壊れ、ノードがドレインされて新しいノードが引き継ぐ前に、サーバーは約20秒間使用不可と表示されました。

私はこれを間違っていましたか?接続がほとんどまたはまったく失われないように、これをどのように構成する必要がありますか?

AlwaysOnは常にオンではありませんか?

8
Dave Clary

ここにはさまざまな質問がたくさんあります。

Q:「Always On」とは何ですか?

Microsoftはそのブランド名(2016年までにスペースなしで書かれた)を使用して、2つの異なる機能を説明しています。

  • フェイルオーバークラスターインスタンス(FCI)-おじいちゃんがアクティブ/パッシブクラスターと呼んでいたもの
  • 可用性グループ(AG)-データベースミラーリングと似ていますが、場合によってはデータベースのグループで機能します(システムデータベースでは機能しません)。

それらの用語を使用して、使用している特定のAlways On機能を説明します。

Q:フェイルオーバーでは、常にオンになりますか?

FCIもAGも常にオンになっているわけではありません。フェイルオーバー中、実行中のトランザクションは失敗し、接続の再試行は5〜60秒(またはそれ以上)失敗する可能性があります。アプリケーションに適切な再試行ロジックを組み込むか、または Stack Overflowのような機能低下ツールに組み込む を使用するかは、あなた次第です。

Q:Always Onを構成するにはどうすればよいですか?

それは以下に基づいて劇的に変化します:

  • 使用しているAO機能(FCIまたはAG)
  • クラスター内のノードの数
  • クォーラムの処理方法(投票)
  • リスナー経由の自動フェイルオーバーを使用しているか、仮想コンピューター名を使用しているか

これらは、多くの建築作業を伴う大きな決定です。詳細については、上記の詳細を含めてください。設定方法について詳しく説明します。

Q:「常にオン」のチェックボックスをオンにするだけで問題ではないですか?

いいえ。

19
Brent Ozar

"Always ON" AG(可用性グループ)とFCI(フェールオーバークラスターインスタンス)を混同している可能性があります。どちらもWSFC(Windowsサーバーフェールオーバークラスター)に依存しています。

[常にオン]をクリックしても、AG構成になっているとは限りません。非同期、同期、読み取り専用/フェイルオーバーのレプリカを設定し、優先順位を設定し、アプリがこの構成をサポートするかなど、その他の考慮事項を行う必要があります。たとえば、アプリがクロスデータベースMSDTCトランザクションを使用する場合があります。これはサポートされておらず、バックアップの復元を必要とする回復不可能な破損を引き起こす可能性があります。

現在、発生しているのはFCIフェイルオーバーです。これは正常です。これにより、一方のノードでサービスが停止し、もう一方のノードでサービスが開始されます。これはINSTANCEレベルで機能します。 AGソリューションはデータベースごとにセットアップされ、サービスは両方のノードで実行されています。 SQLはWSFC APIを使用してレプリカ上のデータの同期を維持し、データベースはそのレプリカにフェイルオーバーします。インスタンスではないことに注意してください。

本番環境にデプロイする前に、これについて多くのテストを行うことをお勧めします。

3
Ali Razeghi

AGでフェイルオーバーをテストするための私の好ましい方法は、単に現在のプライマリを切断することです。切断して、コンソールから電源を切り、ネットワークをヤンクし、SQLサービスを銀の弾で殺します。 GUIのようなものの中からそれをテストするべきではありません。それはカオスが機能しない方法だからです。

1
RelativitySQL

コミュニティwikiの回答

これは、クラスタの通常の予想される動作です。

切断を適切に処理するのはアプリケーションの責任です。 commitedトランザクションのみがサーバー間で複製されるため、処理中のトランザクションは失われます。

0
user126897