
私たちは現在、今後のWeb製品のための運用環境を構築中です。このスタックでは、プライマリSQL Server 2008がライブデータベース操作に使用され、セカンダリSQL Server 2008はプライマリSQL Serverからデータをミラーリングします(SQL Serverの組み込みのミラーリング機能)。プライマリ SQL Server が使用できなくなった場合にホット スタンバイを備えながら、レポート サービスをセカンダリ SQL Server に対して実行します。
アプリケーション レベルでは、次の 2 つのオプションがあります。
- アプリケーション層に障害検出を実装して、プライマリ SQL Server が応答しない場合は、DAL がセカンダリ SQL Server にアクセスするようにします。または
- アプリ層が VIP を指すようにし、HAProxy が障害検出を処理するようにします。
問題は、オプション 2 が実行可能なオプションであるかどうかです。
注: データベース レベルで高可用性を実現する他の方法 (クラスタリングなど) があることは承知していますが、当社はコスト効率の高いソリューションを目指しています。
答え1
「データのミラーリング」とはどういう意味ですか?
データベース ミラーリングを使用できます。その場合、クライアント (つまり、DAL) は接続文字列で FailoverPartner を使用し、フェールオーバー イベントに従って新しいプリンシパルに接続できます。ミラーが使用できないため、レポートはデータベース自体ではなく、データベース スナップショットから実行されます。
フェールオーバー クラスターがあり、クライアントが最初にクラスター リソース名に接続し、最初にアクティブ ノードのホスト名を認識していない場合、スタンバイ パートナーのデータにアクセスすることはできません。
ハードウェアミラーリングを使用することもできますが、これは別のトピックです。
レプリケーションはオプションであると言う人もいますが、私はその考えには賛同しません。
そして... ほぼそれだけです。独自の社内データミラーリングテクノロジーを開発しない限りは、それが何を意味するのかはわかりません。
更新しました
データベースミラーリングを使用する場合は、接続文字列でフェールオーバーパートナーを指定するだけです。ミラーリングされたデータベースへのクライアントの接続アプリケーションは、フェイルオーバー イベントが発生した場合にトランザクションの一貫性を処理する必要があります。フェイルオーバー イベントが発生すると、クライアントが突然切断され、クライアント コードで例外が発生します。保留中のトランザクションはすべて中止されます。クライアント コードは再接続し、永続化された状態を読み取り、データベースで見つかった状態から作業を再開する必要があります。正しく記述されたアプリケーションは、これを問題なく適切に処理します。
ミラーは常にオフラインで、アクセスできません。ミラーでレポートを実行する場合は、データベース スナップショットを作成し、スナップショットでレポートを実行する必要があります。スナップショットは定期的に更新 (削除して再作成) する必要があります。データベースミラーリングとデータベーススナップショット。
ネットワーク層のロードバランサーはミラーリングとは関係がなく、何も解決しません。
答え2
いかがでしょうか上記のどれでもない?
ミラーリングされた SQL Server の意味を明確にしてください。ミラーリングを行うために何らかの SAN を使用していますか、それとも SQL Server に組み込まれているミラーリング機能を使用していますか?
Web 層で HAProxy を使用する方法はわかりますが、なぜ SQL Server でこれを行うのでしょうか? SQL Server では、クラスタリング、ミラーリング、レプリケーションなど、サポートされている他の HA オプションが多数あります。まずはこれらを調べます。