データベースクラスタリングとは同じデータベースを2つの異なるサーバー上に置くことを許可する場合、どのようにデータを同期させますか。また、これは、データベースサーバーの観点から負荷分散とどのように異なりますか?
データベースクラスタリングは少し曖昧な用語です。一部のベンダーは、2つ以上のサーバーが同じストレージを共有するクラスターを検討し、他の一部はクラスターを複製サーバーのセットと呼びます。
レプリケーションは、地理的に分散可能なストレージを共有することなく、サーバーのセットを同期したままにする方法を定義します。それには主に2つの方法があります。
マスターマスター(またはマルチマスター)レプリケーション:任意のサーバーがデータベースを更新できます。通常、データベース内の異なるモジュール(または場合によってはそれらの上で実行されるまったく異なるソフトウェア)によって処理されます。
欠点は、うまくやることが非常に難しいことであり、一部のシステムは、このレプリケーションモードではACIDプロパティを失います。
利点は、柔軟性があり、データベースを更新したままで任意のサーバーの障害をサポートできることです。
マスタースレーブレプリケーション:信頼できるデータのコピーが1つだけあり、それがスレーブサーバーにプッシュされます。
欠点は、フォールトトレラントではないことです。マスターが停止しても、スレーブにそれ以上の変更はありません。
利点は、マルチマスターよりも簡単であり、通常はACIDプロパティが保持されることです。
負荷分散は異なる概念であり、それらのサーバーに送信されるクエリを分散することで、負荷が可能な限り均等に分散されるようにします。通常、アプリケーション層で(または接続プールを使用して)行われます。レプリケーションとロードバランシングの直接的な関係は、ロードバランシングを可能にするためにレプリケーションが必要なことです。それ以外の場合は、単一のサーバーが必要になります。
SQL Serverの観点から:
クラスタリングは、アクティブ-パッシブ構成を提供します。 2ノードクラスタでは、それらの1つがアクティブ(サービング)になり、もう1つがパッシブ(アクティブノードに障害が発生したときに引き継ぐのを待つ)になります。ハードウェアの観点からは高可用性です。
アクティブ/アクティブクラスターを使用できますが、各ノードでSQL Serverの複数のインスタンスを実行する必要があります。 (つまり、Node Aのインスタンス1はNode Bのインスタンス2にフェールオーバーし、Node Bのインスタンス1はNode A)。
負荷分散(少なくともSQL Serverの観点から)は存在しません(少なくともWebサーバーの負荷分散と同じ意味で)。そのように負荷を分散することはできません。ただし、サーバー1のデータベースで実行するようにアプリケーションを分割し、サーバー2のデータベースで実行することもできます。これは、SQLの世界での「負荷分散」の主要な手段です。
クラスタリングでは、ある種の共有ストレージ(ドライブケージやSANなど)を使用し、2つのデータベースフロントエンドをその上に配置します。フロントエンドサーバーは、クライアントが接続に使用するIPアドレスとクラスターネットワーク名を共有し、クライアントリクエストの処理を現在担当しているユーザー間で決定します。
特定のデータベースサーバーについて質問している場合は、それを質問に追加してください。実装の詳細を追加できますが、その核となるのはクラスタリングです。
データベースクラスタリングは、実際にはシステムにフォールトトレランスの機能が追加された2つ以上のノード間の同期レプリケーションのモードであり、これも非共有アーキテクチャで行われます。何も共有しないということは、個々のノードが実際にディスクやメモリなどの物理リソースを共有しないことを意味します。
データの同期を維持する限り、これを実現するためにすべてのデータノードがSQLノードとともに接続される管理サーバーがあります(特にMySQLについて話します)。
次に、違いについて説明します。負荷分散は、クラスタリングによって達成できる結果の1つにすぎません。他の結果には、高可用性、スケーラビリティ、フォールトトレランスが含まれます。