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