web-dev-qa-db-ja.com

AlwaysOn SQL Server 2012-真のアクティブ/アクティブのオプションはありますか?

SQL Server 2008R2のグループを単一のSQL Server 2012にアップグレードおよび統合しようとしています。高可用性を備え、さまざまなオプションを探しています。データベースの数はかなり多い(150以上)ので、DBMirroringは問題外です。

現在、「AlwaysOn可用性グループ」と「AlwaysOnフェイルオーバークラスター」を調べていますが、どうすればよいのか本当にわかりません。

クラスタリングは良い方法かもしれませんが、大きなサーバーが何もせずにプライマリサーバーが失敗するのを待つのは本当に面倒です。

SQL Serverで実際のアクティブ/アクティブクラスタリング(実際の負荷分散)を行う方法はありますか?

5
NicolajB

Microsoft SQL Serverは、そのままでは「実際の」ロードバランシングスキームをサポートしていません。私の知る限り、これはSQL Server 2012にも当てはまります。(私が間違っていれば誰かが教えてくれます。)データベースミラーリング、AlwaysOn、またはクラスターについて話しているかどうかは関係ありません。

(そのポイントホームを打つために、MSは最近SQL Serverクラスターを「SQL Serverフェイルオーバークラスター」と呼んでいるようです。Pedanticsです。)

データベースの負荷を分散する場合は、何らかのシャーディング、フェデレーション、またはレプリケーションを使用して、自分でハードワークを行う必要があります。 (ビューによる)フェデレーションはSQL Server 2000以降の製品に含まれていることに注意してください。これはあまり人気がなかっただけです。もちろん、データベースまたはアプリ自体を変更することになります。多くの作業またはベンダー契約に違反します。 150のデータベースがあれば、それだけはるかに乗り越えられません。

アクティブ/アクティブクラスターを使用できますが、重要なのは、負荷を分散するためにノードにデータベースを慎重に分散する必要があることです。 150個のデータベースを使用すると、データベースが5個の場合よりもさらに細かくなりますが、1つのデータベースに大量の負荷がかかり、149個の軽量またはほとんど使用されない場合でも、1台のマシンが停止していて、他はそうではありません。また、一部のデータベースは時々ビジーで、他の時間にはほとんどビジーではありません。これは、ユーザーが重いプロセスを実行することを決定したときに、すべてがダウンする可能性があることを意味します。

もちろん、Windowsにパッチを当てるようなありふれたものであっても、何らかの理由で、フェイルオーバー時に単一ノードでそのすべての負荷をサポートできる必要があります。既知の遅いトラフィック期間中にのみパッチを適用する場合、それは素晴らしいことです。遅い期間がない場合、またはハードウェアに実際に障害があるためにフェイルオーバーが発生する場合、他のノードが負荷を引き受けない可能性があり、ユーザーは不運になります。そのように考えると、2台目のマシンが「何もしない」ことはそれほど苛立たしいことではありません。少なくとも、プライマリが通常行うすべてのトラフィックがかかることはわかっています。

7
darin strait

AlwaysOn可用性グループは、読み取り専用レプリカもサポートします。これにより、読み取りの負荷分散が可能になります。また、SQL Server 2012でこのような機能が利用できるようになったのは初めてです。

2012は、頻繁に参照されるクラシッククラスタアクティブ/アクティブもサポートします(2つ以上のノードを追加するとどうなりますか?アクティブ/アクティブ/アクティブヤック!)。一方がダウンすると、残りのもう一方のサーバーが2倍以上の負荷で非難される可能性があります。

負荷分散された読み取り専用レプリカに加えて、可用性グループは、特にリモートDRサイトにある可能性のある3番目の非同期監視サーバーで、はるかに高い柔軟性を提供します。

0
g18c

他にできることの1つは、各ノードに複数のSQLサーバーインスタンスをセットアップし、各インスタンスをクラスター化することです。各インスタンス間でデータベースを分割します。各インスタンス自体はアクティブ/パッシブですが、各インスタンスを別々のノードで実行すると、効果的に負荷が分散されます。フェイルオーバーした場合でも、単一のノードがリソースをサポートできることを確認する必要があります。

0
Jeremy