データベースクラスターと負荷分散


149

データベースのクラスタリングとは何ですか?同じデータベースを2つの異なるサーバー上に置くことを許可する場合、それらはどのようにしてデータを同期させますか。これは、データベースサーバーの観点から見た負荷分散とどのように異なりますか?

回答:


132

データベースのクラスタリングは少しあいまいな用語です。一部のベンダーは、2つ以上のサーバーが同じストレージを共有するクラスターを検討し、他のベンダーは、クラスターを複製サーバーのセットと呼びます。

レプリケーションは、地理的に分散できるストレージを共有しなくてもサーバーのセットを同期したままにする方法を定義します。これを行うには、主に2つの方法があります。

  • マスターマスター(またはマルチマスター)レプリケーション:どのサーバーでもデータベースを更新できます。これは通常、データベース内の別のモジュール(または、場合によってはその上で実行されるまったく別のソフトウェア)によって処理されます。

    欠点は、うまく実行するのが非常に難しく、一部のシステムでは、このレプリケーションモードではACIDプロパティが失われることです。

    利点は、柔軟性があり、データベースを更新したまま、任意のサーバーの障害をサポートできることです。

  • マスタースレーブレプリケーション:スレーブサーバーにプッシュされる、信頼できるデータのコピーは1つだけです。

    欠点は、フォールトトレラント性が低下することです。マスターが停止しても、スレーブに変更はありません。

    メリットは、マルチマスターよりも簡単で、通常はACIDプロパティが保持されることです。

ロードバランシングは別の概念です。ロードバランシングは、これらのサーバーに送信されるクエリを分散することで、負荷が可能な限り均等に分散されるようにします。これは通常、アプリケーション層で(または接続プールを使用して)行われます。レプリケーションと負荷分散の唯一の直接的な関係は、負荷分散できるようにいくつかのレプリケーションが必要なことです。それ以外の場合は、単一のサーバーを使用します。


1
ああ、レプリケーションについて忘れてしまった:)はい、アプリケーションレベルのロジックと組み合わせて、その方法でロードバランシングを実現できます:)。+1
ジミーチャンドラ

1
Postgresqlのドキュメントは「データベースクラスタ」を別の意味で参照しています。「何かを行う前に、ディスク上のデータベースストレージ領域を初期化する必要があります。これをデータベースクラスタと呼びます(SQLはカタログクラスタという用語を使用します。)データベースクラスタは実行中のデータベースサーバーの単一インスタンスによって管理されるデータベース " postgresql.org/docs/8.3/static/creating-cluster.html
Donato

1
ACIDプロパティは何を意味するのでしょうか。むしろ、それらを保持しないと、正確に何が失われるのですか。
TheStoryCoder 2017

@TheStoryCoderコンピュータサイエンスでは、ACID(原子性、整合性、分離、耐久性)は、エラー、停電などの場合でも有効性を保証することを目的としたデータベーストランザクションのプロパティのセットです。データベースのコンテキストでは、一連のデータベースACIDプロパティを満たす操作(およびこれらは、データに対する単一の論理操作と見なすことができます)はトランザクションと呼ばれます。たとえば、ある銀行口座から別の銀行口座への資金の移動は、1つの口座からの引き落としや別の口座への入金など、複数の変更を伴う場合でも、1つのトランザクションです。
fizampou

17

SQL Serverの観点から:

クラスタリングは、アクティブ-パッシブ構成を提供します。2ノードクラスターでは、1つはアクティブ(サービス)で、もう1つはパッシブ(アクティブノードに障害が発生したときに引き継ぐのを待機)になります。ハードウェアの観点から見ると、これは高可用性です。

アクティブ/アクティブクラスターを使用できますが、各ノードでSQL Serverの複数のインスタンスを実行する必要があります。(つまり、ノードAのインスタンス1はノードBのインスタンス2にフェイルオーバーし、ノードBのインスタンス1はノードAのインスタンス2にフェイルオーバーします)。

負荷分散(少なくともSQL Serverの観点から)は存在しません(少なくともWebサーバーの負荷分散と同じ意味で)。そのように負荷を分散することはできません。ただし、アプリケーションを分割して、サーバー1の一部のデータベースで実行したり、サーバー2の一部のデータベースで実行したりすることもできます。これは、SQLの世界における「負荷分散」の主要な手段です。


9

クラスタリングでは、何らかの種類の共有ストレージ(ドライブケージやSANなど)を使用し、それに2つのデータベースフロントエンドを配置します。フロントエンドサーバーは、クライアントが接続に使用するIPアドレスとクラスターネットワーク名を共有し、クライアントリクエストの処理を現在担当しているサーバー間で決定します。

特定のデータベースサーバーについて質問がある場合は、それを質問に追加してください。その実装に関する詳細を追加できますが、その中心にあるのがクラスタリングです。


6

データベースクラスタリングは、実際には、システムにフォールトトレランスの機能が追加された2つ以上のノード間の同期レプリケーションのモードであり、これもシェアードナッシングアーキテクチャにおけるものです。何も共有しないということは、個々のノードが実際にはディスクやメモリなどの物理リソースを共有しないことを意味します。

データの同期を維持することに関する限り、これを達成するためにすべてのデータノードがSQLノードに接続されている管理サーバーがあります(特にMySQLについて話します)。

違いについて説明します。ロードバランシングはクラスタリングによって実現できる1つの結果にすぎませんが、その他には、高可用性、スケーラビリティ、およびフォールトトレランスが含まれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.