1つのサーバーマシンに障害が発生した場合でも、データベースバックエンドがSQL Server 2012に依存しているアプリケーションが24時間体制で利用できることを確認する必要があると仮定します。
DBAではなく開発者として、フェイルオーバー/高可用性にどのシナリオをいつ使用するかを理解するのに苦労しています。
これらのシナリオのどれがどのような種類のワークロードで機能し、これらのシナリオでどのような種類の障害/停止を処理できますか?それらは比較可能/交換可能ですか?
高可用性ソリューションを常に視覚化する方法は次のとおりです。
高可用性とは何ですか?インスタンス全体。これには、すべてのサーバーオブジェクト(ログイン、SQL Serverエージェントジョブなど)が含まれます。これには、データベースとそれらを含むエンティティも含まれます。これは、この特定のソリューションでの封じ込めのレベルになるため、高可用性SQL Serverインスタンスに最適なソリューションです。
レポートについてはどうですか?なし、NULL、存在しません。フェイルオーバークラスターインスタンスには、インスタンスやVNNなどを含むクラスターグループを配信するアクティブノードがあり、他のすべてのノードは(現在のクラスターグループに関する限り)アイドル状態であり、フェイルオーバーを待機しています。
フェイルオーバーが発生するとどうなりますか?FCIのダウンタイムは、パッシブノードがクラスターリソースを取得するのにかかる時間によって決まりますSQL Serverインスタンスを実行状態にします。これは通常、時間は最小限です。
クライアントの抽象化はありますか?はい、これは、フェールオーバークラスターインスタンスの仮想ネットワーク名で本来組み込まれます。これは常に、現在SQL Serverクラスターリソースを提供しているアクティブノードを指します。
高可用性とは何ですか?可用性グループは、ここでは高可用性の論理的な封じ込めになりますが、可用性グループはいくつかのデータベースと仮想ネットワーク名(リスナー、オプションのクラスターリソース)。ログインやSQL ServerエージェントジョブなどのサーバーオブジェクトはHAソリューションの一部ではないことに注意してください。これらが可用性グループで適切に実装されていることを確認するには、特別な考慮が必要です。過度に負担のかかる要件ではありませんが、注意する必要があります。
レポーティングはどうですか?これはレポーティングに最適なソリューションですが、レポーティングインスタンスとして同期レプリカを使用することはおそらくないでしょう。同期と非同期の2つのコミット関係があります。私の意見では、実際に私が見たところ、同期セカンダリレプリカが障害を待っているということです。問題が発生した場合にデータ損失のないフェイルオーバーを実行する準備ができているレプリカと考えてください。次に、そのレポートワークロードを処理できる非同期レプリカがあります。このレプリカを前述のソリューションとして使用しているのではなく、レポート作成などにも使用しています。レポートのワークロードは、このレプリカを指すことができます(リスナーを介した読み取り専用ルーティングを介して、直接的または間接的に)。
フェイルオーバーが発生するとどうなりますか?自動フェイルオーバーとペアになっている同期コミットセカンダリレプリカの場合、これはSECONDARY_NORMALからPRIMARY_NORMALへのレプリカロール状態の変更になります。 。自動フェイルオーバーが存在するためには、現在同期されている同期セカンダリレプリカが必要です。実装されているのは Flexible Failover Policy であり、実際にこのフェイルオーバーが発生するタイミングを決定します。そのポリシーは確かに構成可能です。
Any client abstraction?はい、オプションでAlwaysOn可用性グループリスナーを構成できます。これは基本的には、現在のプライマリレプリカを指す仮想ネットワーク名(AGのクラスターグループ内のクラスターリソースとしてWSFCから見ることができる)にすぎません。これは、レポートのワークロードをシフトする上で重要な部分であり、ReadOnlyトラフィックをリダイレクトするサーバーに読み取り専用ルーティングリストを設定する(これは、SQLの.NET Frameworkプロバイダーを使用して、接続文字列を介して設定されます)サーバー、これはApplication Intentパラメーターになり、ReadOnly)に設定されます。また、セカンダリレプリカの役割で、このレポートワークロードを受信するレプリカごとに、読み取り専用のルーティングURLを設定する必要があります。
高可用性とは何ですか?これは議論の余地がありますが、私は何も言いません。レプリケーションを高可用性ソリューションとしてはまったく見ていません。はい、データの変更はサブスクライバーにプッシュされていますが、ここではパブリケーション/記事レベルで話しています。これはデータのサブセットになります(すべてのデータを含めることができますが、強制されません。つまり、パブリッシャーデータベースに新しいテーブルを作成すると、サブスクライバーに自動的にプッシュされません)。 HAに関する限り、これは基本的なものであり、堅固なHAソリューションでグループ化することはしません。
レポートについてはどうですか?データのサブセットについてレポートするための優れたソリューションです。トランザクション数の多い1 TBデータベースがあり、そのレポートのワークロードをOLTPデータベースから除外したい場合、トランザクションレプリケーションはプッシュする優れた方法です。レポートワークロードのサブスクライバー(または複数のサブスクライバー)へのデータのサブセット。1TBデータのレポートワークロードが約50 GBだけの場合、これはスマートソリューションです)また、ビジネスニーズに合わせて比較的設定可能です。
まとめると、(一部はビジネスによって)回答する必要があるいくつかの質問があります。
Windowsフェールオーバークラスター内の2つ(またはそれ以上)のサーバー、クラスター化されたインスタンスとしてのSQL Server
どのような種類のワークロードですか?「状況によって異なります」-しかし、真剣に、これはデータセンターの高可用性でローカルを必要とするオンラインアプリケーションに役立ちます。 1つのマシンまたは1つのオペレーティングシステムの障害から保護されます。ログイン、ジョブ、新しいデータベース、メンテナンスなどは、同じストレージを共有するまったく同じ2つのノードを持つクラスターであり、すべて同じシステムデータベースを持っているため、すべて自動的に同期されます。フェイルオーバーは非常に高速ですが、フェイルオーバーが発生したときにSQL Serverが再起動したように見える一時的な障害がまだあります。
短所/懸念-単一障害点は、ストレージとそのすべてのコンポーネントです。 SANベンダーは常に「SANは失敗しない」と言っていますが、ストレージエリアネットワークには多くの可動部分があり、私がブログ こちら で説明しているように、可能です。 -あなたは何もすることができないセカンダリサーバーにお金を払っていますが、待機して待機します。これで、アクティブ/アクティブ/マルチノードを実行し、どちらの方向にもフェイルオーバーして2番目のノードを使用できる2つのアクティブなインスタンスを作成できます。
自動フェイルオーバー「最も」自動。目撃者は必要ありません、それはクラスターです。これは、可能な限りシームレスにするためのクラスターの役割です。これらのいずれかを使用すると、フェイルオーバーが発生すると、SQLを起動する必要があるか、接続をポイントする必要があるため、フェイルオーバーが発生することになります。ここでそれが発生すると、基本的にSQLの再起動のように感じられ、DBが復旧してリカバリなどを実行します。
ダウンタイムに対する許容度が非常に低いため、ローカルデータセンターの高可用性環境で「すべてのデータベース、すべてのログインなどで完全に稼働したい」というクライアントがある場合、フェールオーバークラスターインスタンスを検討します(ただし、あなたが言及する最後のオプションは強力な候補であり、いくつかの管理オーバーヘッドを行う必要がありません)。サイトの障害またはSAN障害から保護するために、おそらくローカルFCIおよびAG非同期セカンダリを実行します。
トランザクションレプリケーションで最新の状態に維持される2つ(またはそれ以上)のSQL Serverインスタンス
同期コミットモードで構成されたSQL Server可用性グループ内の2つ(またはそれ以上)のSQL Server
これは、最近ますます人々が実装するのを助けてきたものですが、時々私はまだクラスタリングに行きます。
まとめ
HAとDRは異なります。そして、これらのテクノロジーは、どちらかを提供するのに役立ちます。高可用性とは(1つのマシンで)何か問題が発生した場合に迅速に回復できることを意味し、短い復旧ポイント目標と復旧時間目標を達成します。それがクラスタリングと同期AGです。
災害復旧とは、「HAソリューションでも障害が発生したときに立ち上がることができます。別のデータセンターに移動したり、ミラーリングしたり、レプリケーションしたりするときにAGになる可能性があります。
sharedとは何かを考慮することも重要です。
フェールオーバークラスタリングは、oneディスクアレイを共有する2つ以上のサーバーノードを使用します。ディスクアレイがダウンすると、サーバーノードの数に関係なく、サービスが失われます。そのディスクアレイが配置されているサーバールームが火災や洪水に遭遇すると、サービスが利用できなくなります。
AlwaysOn可用性グループとデータベースミラーリングは、「シェアードナッシング」クラスタリングテクノロジーです。データベースは、複数のサーバーの複数のディスクアレイに存在します。良好なネットワークリンクがある場合、複数のサーバーが複数のサーバールームにあり、火災や洪水から保護されます。
完全を期すために、プレーンな古いミラーリングを使用するオプションがあります。ここでの利点には、可用性グループを使用する複雑さがなく、フェールオーバークラスタリング用の共有ストレージを必要としない、データベースの2つのコピーがあることが含まれます。短所はありますが、ミラーリングは非推奨です。
ミラーリングを使用したフェイルオーバー時間は約10秒ですが、アプリケーションコードはフェイルオーバー時に発生しているトランザクションを再試行できる必要があります。