使用率の高いASP.NETアプリケーション用にSQL Server 2008の負荷を分散する方法は?


12

ASP.NETとIIS 7を使用する成功したWebアプリケーションがあると想像してください。SQLServer 2008データベースへの多くの呼び出しを生成し、99.9%のアップタイム(8時間のダウンタイム、年)。

私たちの目標は:

  • お客様にダウンタイムを引き起こすことなく、サーバーにWindows Updateをインストールします
  • タイムアウトのためにサーバー上のハードウェアクラッシュがASP.NETアプリケーションの速度を低下させないようにする

ASP.NETアプリケーションの負荷分散とは異なり、SQLの負荷分散ははるかに難しいようです。Microsoftスタックを使用するMicro-ISV用に、単純な負荷分散されたSQL Server 2008 R2クラスターをセットアップするためのベストプラクティスは何ですか?


いくつかのコメント:接続がタイムアウトしたときにデータベースに接続せずに「オフライン」モードで動作できるASP.NETアプリケーションを作成しました。完全に機能するアプリではなく、「基本」サービスに低下します。また、インスピレーションを与えるNetflix Chaos Monkeyアプローチについても読みました。readwriteweb.com

あなたの状況は?限られたサーバーでホストされている環境にいますか、それとも、現金とサーバー数を増やす能力を備えた独自のものをホストしていますか?

@Jay:多くのMicro-ISVと同様に、2つの専用サーバーがあり、Rackspace Cloudホスティングに移行しています。必要に応じて2つの専用SQL Serverボックスを購入する余裕がありますが、より良いアプローチがあるかどうか疑問に思っています。

データベースをSQL Azureに移動します。その後、サーバー障害、調達、および更新の悪夢から解放されます。データは、作業コピーに加えて2回複製され、負荷分散の側面も、ハードウェア、ソフトウェアライセンス、サーバーサポート時間など、SQL Serverの実装/管理の実際のコストのほんの一部で処理されます。 。
ブレット・リグビー

回答:


4

高可用性が必要な場合は、Windows / SQL ServerクラスタリングまたはSQL Serverデータベースミラーリングがソリューションを提供します。クラスタリングは、これまでに行ったことがない場合、多くの計画と慣れを必要としますが、アプリケーションに対して透過的です。

SQL Serverでは負荷分散が可能ですが、気弱な人向けではありません。これは、SQL Serverの前でWindowsネットワーク負荷分散(NLB)を使用するソリューションです。NLB内のSQL Server自体は、読み取り専用である場合は管理が容易ですが、更新可能なサブスクライバーでトランザクションレプリケーションを使用する場合は読み取り/書き込みが可能です。ただし、このタイプのレプリケーションは、将来のバージョンで廃止される予定です。

最後の可能性の1つは、スケーラブルな共有データベースですが、間違いなく読み取り専用です。

もっと読む:

SQL Server 2005高可用性、およびApressからのPro SQL Server 2005/2008 Replicationに関するAllan HirtのApressの書籍をご覧ください。

スケーラブルな共有データベース:http : //technet.microsoft.com/en-us/library/ms345392.aspx


2

リレーショナルデータベースシステムは、Webサーバーと同じ方法で負荷分散されることはほとんどありません。負荷分散への古典的なアプローチの問題は、すべてのデータベースが常に同期している必要があることです。ある時点で2つのサーバーの状態が同一でない場合、リレーショナルモデルは価値がありません。

あなたの質問から、あなたがロードバランシングを達成しようとしているようには見えません。これは主に、そのサーバーが処理できる限り多くのユーザーのみが各サーバーをヒットすることを保証するパフォーマンス測定です。高可用性設定が必要なようです。あなたはSQL Serverを使用していると言っているので、フェイルオーバーを検討します。つまり、プライマリデータベースが利用できない場合、クライアントはフェールオーバーサーバーにアクセスしようとします。SQL Serverは、プライマリインスタンスと各フェールオーバーの同期を維持し、プライマリがオフラインからオンラインに戻ったときに、プライマリインスタンスをフェールオーバーに再同期します。


0

さあ、行きましょう。できません。アプリの変更がないわけではありません。

  • 更新プログラムのインストール-クラスタリングまたはミラーリングのいずれかを使用して、2つのデータベースが機能していること、または別のコンピューターにフェールオーバーできることを確認します。ミラーリングを強くお勧めします。
  • それを処理するようにアプリケーションを書き換えます(つまり、接続に失敗し、透過的に再接続してからコピーに接続する必要があります)。

新しいコピーを展開したり、dbスキーマを変更したりする場合、メンテナンスのためにアプリを停止する必要があることを理解してください。


0

ここでの費用効果の高い答えは、データベースリソースを拘束するロジック処理とデータストレージを提供するアプリケーションサービスをホストする安価な汎用サーバー層でデータベースをバッファリングすることです。明らかに、これにはデータのボラティリティとキャッシュ戦略に関するいくつかの考えが必要です。


-1

ジュラ紀の答えをさせてください。「Windows更新プログラムのインストール」が目標に含まれている場合、あなたは救いようがありません。

私はあごひげに灰色があり、アプリケーションが「オペレーティングシステムの更新」を受けなくても10年間実行できることを思い出すことができます。アプリの有効寿命は、数年ではなく数十年で測定されました。

したがって、私のアドバイスは次のとおりです。SQLServerデータベース+アプリケーションの作業バージョンを確立し、Microsoft Updateからデータベースサーバーを分離します。破損していない場合は、修正しないでください。

ホットスワップ可能なRAIDディスクを使用します。

ハードウェアが破損した場合に備えて、ミラーイメージデータベースサーバー(TomTomの提案による)を用意してください。


3
ティム、それは、結果をExcelファイルに保存できるのに、なぜデータベースを使用するのかと言っているようなものですか?OSには多数の脆弱性があります。定期的な更新プログラムをインストールしない/ウイルス対策/ファイアウォールルールを最新に保つことは、不十分なアドバイスです。どのレベルでもお勧めできません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.