DS201: Foundations of Apache Cassandra™ and DataStax Enterprise の学習記録です。
Ringとは
Cassandraのアーキテクチャは、複数のノードで形成されるクラスターを基盤としています。その中心にあるデータ構造が**リング(Ring)**です。リングは、クラスター内でデータがどのように各ノード間で分散されるかを管理する役割を担っています。
データの分散と配置
Cassandraは、全てのデータをパーティションに分割し、それぞれのパーティションに一意のトークンを割り当てます。これらのトークンは、リングと呼ばれる仮想的な円周上に配置されます。リングは、全ての可能なトークン値の範囲を視覚化したものと考えることができます。
各ノードは、このリング上の特定の範囲のトークンを「所有」しています。ノードが所有するトークン範囲に対応するデータの一部を格納することにより、どのデータがどのノードに存在するかが決定され、データがクラスター全体に均等に分散されます。
スケーラビリティと耐障害性
リング構造は、ノードの追加や削除が行われた際にも、データの再分配を最小限に抑えるように設計されています。
- ノードの追加: 新しいノードが追加されると、そのノードはリング上の特定の位置を占め、既存の隣接するノードからデータの一部を引き継ぎます。これにより、新規に追加されたノードが新たなデータの保存場所として機能し、クラスター全体の容量とパフォーマンスが向上します。
- ノードの削除/故障: リング構造は単一障害点を持たないため、1つのノードが故障またはダウンしても、他のノードがその役割を引き継ぎ、システムは正常に動作し続けます。これは、各ノードがデータの一部を保有し、それぞれが特定のトークン範囲を所有しているためです。
レプリケーション
Cassandraのリング構造は、データの一貫性と高可用性を保証するための**レプリケーション(複製)**としても機能します。各パーティションのデータは、リング上の複数のノードに複製されます。通常、これはリング上で隣接するノードに対して行われます。この複製プロセスにより、ノードが故障してもデータが失われることがなく、また必要なデータが常に読み出せる状態が保たれます。
このように、Cassandraのリングは、データの配置、スケーラビリティ、耐障害性、および一貫性という、分散データベースの主要な課題を管理するための強力な仕組みです。
演習
SELECT token(tag), tag FROM videos_by_tag; の結果
cqlsh で videos_by_tag テーブルから token(tag) と tag を選択した結果です。
| |
この結果は、"datastax" と "cassandra" の2つのタグがそれぞれ異なるパーティションを形成していることを示しています。system.token(tag) の値は、各タグに対応するトークン値であり、このトークン値に基づいてデータがクラスター内のノードに分散されます。
nodetool ring の出力
nodetool ring コマンドは、Cassandraクラスター内のノードの情報を表示します。各行は1つのノードを表し、そのノードが担当するトークン範囲の開始トークンが表示されます。
| |
この出力は、単一ノードのCassandraクラスター(127.0.0.1)が、リング上の全てのトークン範囲を所有していることを示しています。各行の Token 列は、そのノードが担当するデータの範囲の開始トークンです。