46

datastax ops center を使用して、学校のプロジェクト用に cassandra nosql データベースのデータを複製しようとしています。私が読んだことから、クラスター、ノード、およびデータセンターの3つのキーワードがあり、私が理解したことから、ノード内のデータは、別のクラスターに存在する別のノードに複製できます。そして、同じ (複製された) データを含むすべてのノードがデータセンターを構成します。そうですか?

そうでない場合、違いは何ですか?

4

4 に答える 4

87

Cassandra の要素の階層は次のとおりです。

  • 集まる
    • データセンター
      • ラック
        • サーバー
          • ノード (より正確には vnode)

クラスターはデータセンターの集まりです。

データセンターはラックの集まりです。

ラックはサーバーの集まりです。

サーバーには、デフォルトで 256 個の仮想ノード (または vnode) が含まれています。

vnode は、サーバー内のデータ ストレージ レイヤーです。

注: サーバーは Cassandra ソフトウェアです。サーバーはマシンにインストールされます。マシンは物理サーバー、EC2 インスタンスなどです。

それでは、具体的にあなたの質問に答えてください。

データの個々の単位はパーティションと呼ばれます。はい、パーティションは複数のノードに複製されます。パーティションの各コピーはレプリカと呼ばれます。

マルチ データ センター クラスタでは、レプリケーションはデータ センターごとに行われます。たとえば、サンフランシスコに dc-sf という名前のデータ センターがあり、ニューヨークに dc-ny という名前の別のデータ センターがある場合、データ センターごとのレプリカの数を制御できます。

たとえば、dc-sf に 3 つのレプリカを設定し、dc-ny に 2 つのレプリカを設定できます。

これらの数値は複製係数と呼ばれます。具体的に言うと、dc-sf のレプリケーション ファクターは 3 で、dc-ny のレプリケーション ファクターは 2 です。簡単に言えば、dc-sf には 3 つの vnode に分散されたデータの 3 つのコピーがあり、dc-sf には2 つの vnode にまたがるデータの 2 つのコピー。

各サーバーにはデフォルトで 256 個の vnode がありますが、Cassandra は、さまざまな物理サーバーに存在する vnode を選択するほどスマートです。

要約する:

  • データは複数の仮想ノードに複製されます (各サーバーにはデフォルトで 256 個の vnode が含まれます)
  • データの各コピーはレプリカと呼ばれます
  • データの単位はパーティションと呼ばれます
  • レプリケーションはデータセンターごとに制御されます
于 2015-02-12T03:30:34.223 に答える
28

ノードは、Cassandra を実行する単一のマシンです。同様のデータを保持するノードのコレクションは、「リング」またはクラスターと呼ばれるものにグループ化されます。

大量のデータがある場合、またはさまざまな地理的領域でデータを提供している場合、クラスターのノードをさまざまなデータ センターにグループ化することが理にかなっている場合があります。これの良い使用例は、東海岸と西海岸に多くの頻繁な顧客を持つ可能性のある e コマース Web サイトです。このようにして、東海岸の顧客は東海岸の DC に接続し (パフォーマンスを高速化するため)、最終的には西海岸の顧客と同じデータセット (両方の DC が同じクラスター内にある) にアクセスできます。

詳細については、こちらを参照してください: About Apache Cassandra - How does Cassandra work?

そして、同じ (複製された) データを含むすべてのノードがデータセンターを構成します。そうですか?

閉じますが、必ずしもそうではありません。データ複製のレベルは、キースペースごとに設定される複製係数によって決まります。たとえば、単一の DC に 3 つのノードがあり、すべてに 600 GB の製品データが保存されているとします。私のproductsキースペースの定義は次のようになります。

CREATE KEYSPACE products
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '3'};

これにより、製品データが 3 つのノードすべてに均等に複製されます。私の合計データセットのサイズは 600GB で、3 つのノードすべてに複製されています。

しかし、新しいかなり大規模な製品ラインを展開しているとしましょう。さらに 300 GB のデータが追加されると予想され、ハード ドライブの最大容量が押し上げられる可能性があります。すべてのハード ドライブを今すぐアップグレードする余裕がない場合は、次のようにレプリケーション ファクターを変更できます。

CREATE KEYSPACE products
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '2'};

これにより、すべてのデータのコピーが 2 つ作成され、現在の 3 つのノードのクラスターに保存されます。データセットのサイズは現在 900 GB ですが、そのコピーは 2 つしかないため (各ノードが基本的にデータの 2/3 を担当)、ディスク上のサイズは 600 GB のままです。ここでの欠点は、(整合性レベル で読み取りと書き込みを行うと仮定するとONE) 1 ノードの損失しか許容できないことです。一方、3 つのノードと 3 の RF では (一貫性のある読み取りと書き込みONE)、2 つのノードを失ってもリクエストを処理できます。

編集 20181128

ネットワーク リクエストを行うとき、それはサーバーに対して行われますか? またはノード?または、サーバーに対してリクエストを行い、それをルーティングしてノードまたはその他から読み取りますか?

とても簡単な説明: server == node

クラスター内のノードに対して要求を行う限り、その動作は実際にはアプリケーション側のドライバーから指示されます。実際、ドライバーは、ノードと同様にクラスターのゴシップを読み取るため、現在のネットワーク トポロジのコピーを保持します。

アプリケーション側では、負荷分散ポリシーを設定できます。具体的には、TokenAwareLoadBalancingPolicyクラスは各リクエストのパーティション キーを調べ、どのノードにデータがあるかを特定し、そこにリクエストを直接送信します。

他の負荷分散ポリシーの場合、または単一のパーティション キーを決定できないクエリの場合、要求は単一のノードに送信されます。このノードは「コーディネーター」として機能します。この選択されたノードは、要求を担当するノードへの要求のルーティングと、結果セットのコンパイル/戻りを処理します。

于 2015-01-28T16:42:14.357 に答える