DS201の実施_Ring
DS201: Foundations of Apache Cassandra™ and DataStax Enterpriseの学習記録。
Ringとは
Cassandraのアーキテクチャは、複数のノードで形成されるクラスタを基盤としている。 その中心にあるデータ構造はRingと呼ばれる。Ringとは、クラスタ内でデータがどのように各ノード間で分散されるかを管理する役割を担っている。
Cassandraは全てのデータをパーティションに分割し、それぞれのパーティションに一意のトークンを割り当てる。これらのトークンは、Ringのデータ構造の中に配列される。Ringとは、全ての可能なトークンの値の範囲を視覚化したものといえる。
各ノードは、Ring上の特定の範囲のトークンを所有している。その所有するトークン範囲に対応するデータの一部を格納することにより、どのデータがどのノードに存在するかが決定され、データがノード間で分散される。
リングの構造は、ノードが追加または削除されたときにも、データの再分配を最小限に抑える役割も果たす。新たなノードが追加された際には、そのノードはリング上の特定の位置を占め、既存の隣接するノードからデータの一部を引き継ぐ。これにより、新規に追加されたノードが新たなデータの保存場所として機能する。
Ringの構造は単一障害点を排除する役割も果たす。1つのノードが故障またはダウンしても、他のノードがその役割を引き継ぎ、システムは正常に動作し続ける。これは各ノードがデータの一部を保有し、それぞれが特定のトークン範囲を所有しているためである。
Cassandraのリング構造は、データの一貫性と高可用性を保証するためのレプリケケーションとしても機能する。各パーティションのデータは、Ring上の複数のノードに複製される。通常、所有するトークンが隣接するノードに対して行われる。この複製プロセスにより、ノードが故障してもデータが失われることがなく、また必要なデータが常に読み出せる状態が保たれる。
このように、Cassandraのリングは、データの配置、スケーラビリティ、耐障害性、および一貫性という、分散データベースの主要な課題を管理するための強力な仕組みである。
演習
「datastax」と「cassandra」の2つのタグがそれぞれ1つのパーティションを形成している。 cqlshクエリの結果である"system.token(tag)“の値は、各タグ(“datastax"および"cassandra”)に対応するトークンの値を示している。
cqlsh:killrvideo> SELECT token(tag), tag
... FROM videos_by_tag;
system.token(tag) | tag
----------------------+-----------
-1651127669401031945 | datastax
-1651127669401031945 | datastax
356242581507269238 | cassandra
356242581507269238 | cassandra
356242581507269238 | cassandra
nodetool ring
の出力は、Cassandraクラスタ内のノードの情報を示している。各行は1つのノードを表し、そのノードが保持しているトークンの値が表示している。nodetool コマンドによって表示されるトークンは、ノードが担当するデータの範囲の開始トークンである。
$ nodetool ring
Datacenter: datacenter1
==========
Address Rack Status State Load Owns Token
8495111347830785616
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% -9107256078387604241
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% -7666987848485021001
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% -6595487232144988189
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% -5577635827402561173
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% -4759963894790210379
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% -3684208013564630839
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% -2948292320853737199
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% -1868919513406135542
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% -625399507725543569
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% 341964735352991929
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% 1931969287866890567
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% 3550992583563933864
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% 4529138036080047940
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% 6307772336903635068
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% 7403814237138573357
127.0.0.1 rack1 Up Normal 12.04 MiB 100.00% 8495111347830785616
Warning: "nodetool ring" is used to output all the tokens of a node.
To view status related info of a node use "nodetool status" instead.