datastax ops center を使用して、学校のプロジェクト用に cassandra nosql データベースのデータを複製しようとしています。私が読んだことから、クラスター、ノード、およびデータセンターの3つのキーワードがあり、私が理解したことから、ノード内のデータは、別のクラスターに存在する別のノードに複製できます。そして、同じ (複製された) データを含むすべてのノードがデータセンターを構成します。そうですか?
そうでない場合、違いは何ですか?
datastax ops center を使用して、学校のプロジェクト用に cassandra nosql データベースのデータを複製しようとしています。私が読んだことから、クラスター、ノード、およびデータセンターの3つのキーワードがあり、私が理解したことから、ノード内のデータは、別のクラスターに存在する別のノードに複製できます。そして、同じ (複製された) データを含むすべてのノードがデータセンターを構成します。そうですか?
そうでない場合、違いは何ですか?
Cassandra の要素の階層は次のとおりです。
クラスターはデータセンターの集まりです。
データセンターはラックの集まりです。
ラックはサーバーの集まりです。
サーバーには、デフォルトで 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 を選択するほどスマートです。
要約する:
ノードは、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クラスは各リクエストのパーティション キーを調べ、どのノードにデータがあるかを特定し、そこにリクエストを直接送信します。
他の負荷分散ポリシーの場合、または単一のパーティション キーを決定できないクエリの場合、要求は単一のノードに送信されます。このノードは「コーディネーター」として機能します。この選択されたノードは、要求を担当するノードへの要求のルーティングと、結果セットのコンパイル/戻りを処理します。