http://docs.datastax.com/en/cassandra/3.0/cassandra/architecture/archDataDistributeReplication.html
上記、Cassandra v3.0のドキュメント読んで調べたことをメモします。
実際に動かして確認しているわけではないので、間違いがあるかもしれません。お気づきの点はご指摘ください。
データの複製
キースペース作成時にレプリケーションファクターを指定します。指定されたレプリケーションファクター数だけ、データの複製(レプリカ)が作られます。
Cassandraにおいては、すべてのレプリカは等価であり、マスターレプリカ・セカンダリレプリカというような主副関係はありません。
また、キースペース作成時にはレプリカ配置の方針(Replication Strategy)を指定します。「SimpleStrategy」「NetworkToplogyStrategy」の2つがあります。
各方針の説明の前に、Cassandraでノードをグループ化する概念をいくつか挙げます。
原文の説明はこちら。
- ノード:データを物理的に保管する場所のことです。物理的なマシン、物理的なサーバーと捉えれば良いかと思います。
- データセンター:ノードの集合です。必ずしも物理的なデータセンターと一致させる必要はありません。物理的に1つのデータセンター内に、Cassandraのデータセンターを複数定義することが可能です。ただし、Cassandraのデータセンター1つを構成するノードは地理的に同一のロケーションにあるノードのみとします。
- クラスター:データセンターの集合です。クラスター1つを構成するデータセンターは、地理的に複数のロケーションにあるもので構いません。
- ラック:データセンター内における、ノードをグループ化したものです。
これらの用語を踏まえて、以下、Replication Strategyの説明です。
SimpleStrategy
1つのデータセンター、1つのラックしか無いと考える方針です。レプリカの1つ目をPartitionerが決めたノードに配置します。2つ目以降のレプリカは、ノードリング(ノードが輪の上に配置されたとみなしたもの)上を時計回りに辿ったノードへ配置していきます。
NetworkTopologyStrategy
2つ以上のデータセンター、また複数のラックがあるとみなす方針です。クラスタ作成時はデータセンターやラックが1つでも、今後増える可能性があればこちらを選択します。
この方針においては、各データセンターにいくつのレプリカを配置するかを指定します。データセンター毎に異なるレプリカ数を指定できます。
この方針においては、2つ目のレプリカ配置ノードを探すためにノードリングを辿っていく際に、1つ目のレプリカを配置したノードと同じラックにあるノードをスキップし、異なるラックのノードにレプリカが配置されるようにします。
同じラック上にあるノードは、電源や冷却、ネットワークの問題により同時に障害が起こる可能性があると考えるためです。