Datastax ops centerを使用した学校プロジェクトのcassandra nosqlデータベースでデータを複製しようとしています。読んだことから、クラスター、ノード、データセンター、そしてノードのデータは別のクラスターに存在する別のノードに複製でき、同じ(複製された)データを含むすべてのノードがデータセンターを構成することを理解しています。
そうでない場合、違いは何ですか?
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を実行する単一のマシンです。同様のデータを保持するノードのコレクションは、「リング」またはクラスターと呼ばれるものにグループ化されます。
大量のデータがある場合、または異なる地理的領域でデータを提供している場合は、クラスターのノードを異なるデータセンターにグループ化することが理にかなっています。これの良い使用例は、東海岸と西海岸に多くの頻繁な顧客を持っているかもしれない電子商取引ウェブサイトです。そのようにして、東海岸の顧客は東海岸に接続しますDC(パフォーマンスを高速化するため)、最終的には西海岸と同じデータセット(両方のDCが同じクラスター内にあります)顧客。
詳細については、こちらをご覧ください。 Apache Cassandraについて-How does Cassandra work?
そして、同じ(複製された)データを含むすべてのノードがデータセンターを構成します。そうですか?
閉じますが、必ずしもそうではありません。データ複製のレベルは、キースペースごとに設定されるレプリケーション係数によって決まります。たとえば、単一のDCに3つのノードがあり、すべて600 GBの製品データを保存しているとします。 products
キースペースの定義は次のようになります。
CREATE KEYSPACE products
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '3'};
これにより、製品データが3つのノードすべてに均等に複製されます。合計データセットのサイズは600 GBで、3つのノードすべてに複製されます。
しかし、新しいかなり大きな製品ラインを展開しているとしましょう。さらに300 GBのデータが来て、ハードドライブの最大容量を使い始める可能性があります。現在すべてのハードドライブをアップグレードする余裕がない場合は、レプリケーションファクターを次のように変更できます。
CREATE KEYSPACE products
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '2'};
これにより、すべてのデータのコピーが2つ作成され、3つのノードの現在のクラスターに保存されます。データセットのサイズは900GBになりましたが、コピーは2つしかないため(各ノードは基本的にデータの2/3を担当します)、ディスク上のサイズは600GBのままです。ここでの欠点は、一貫性レベルONE
で読み書きすると仮定すると、1ノードの損失しか受けられないことです。一方、3つのノードとRF of 3(再び一貫性ONE
で読み書き))で、2つのノードを失い、リクエストを処理できます。
20181128を編集
ネットワーク要求を行うとき、サーバーに対してそれを行いますか?またはノード?または、サーバーに対してリクエストを行い、それをルーティングしてノードまたは他の何かから読み取りますか?
本当の簡単な説明:server == node
クラスター内のノードに対して要求を行う限り、その動作は実際にはアプリケーション側のドライバーから指示されます。実際、ドライバーは、ノードの動作と同様にクラスターゴシップを読み取るため、現在のネットワークトポロジのコピーを保持します。
アプリケーション側では、負荷分散ポリシーを設定できます。具体的には、TokenAwareLoadBalancingPolicyクラスは各リクエストのパーティションキーを調べ、どのノードにデータがあるかを把握し、そこにリクエストを直接送信します。
他の負荷分散ポリシーの場合、または単一のパーティションキーを決定できないクエリの場合、要求は単一のノードに送信されます。このノードは「コーディネーター」として機能します。この選択されたノードは、結果セットのコンパイル/返却だけでなく、それらに責任があるノードへのリクエストのルーティングを処理します。
データベース全体の一部を保存するマシン。これには、独自のデータだけでなく、別のノードから複製されたデータも含まれる場合があります。担当するデータは、トークンの範囲と、データを保持するキースペースの複製戦略によって決まります。
別のノードから分離できるノードの論理グループ。一般的な使用例は、AWS-EAST対AWS-WESTです。レプリケーションNetworkTopologyStrategy
は、特定のデータセンターに存在するキースペース全体のレプリカの数を指定するために使用されます。これは、Cassandra=ユーザーがクロスDCレプリケーションを実現する方法です。さらに、確認応答のみを必要とする整合性レベルポリシーがありますonlyコーディネーターのデータセンター内(LOCAL_*
)
すべてのデータセンターを含むデータベース内のすべてのマシンの合計。クラスタ間レプリケーションはありません。