単一トークン・アーキテクチャー・ノード用のトークンの計算
単一トークン・アーキテクチャーを使用する場合に、各データ・センター内のノードに対してハッシュ範囲が均等に分割されるようにトークンを計算する方法。
仮想ノード(vnode)を使用していない場合、この情報に従って、単一トークン・アーキテクチャーを使用する場合のトークンを計算します。vnodeを使用する場合、トークンを計算する必要はありません。
DataStax Enterpriseクラスターを開始するときに、クラスター内のノード全体でデータがどのように分割されるかを選択する必要があります。パーティショナーは、各ノードが行ごとに何を格納するかを決定します。トークン・ジェネレーターは、Murmur3PartitionerまたはRandomPartitioner用のトークンを生成できます。
トークンは、クラスターのパーティショナーに依存する要素です。クラスターの各ノードにトークンが割り当てられ、そのトークンが、リング内のノードの位置とそのノードがクラスター内の何のデータを受け持つかを決定します。ノードに割り当てられたトークンを、トークンの可能な範囲全体に分散します。各ノードは、リングのそのノード自身(包括的)とその前のノード(排他的)との間の領域を受け持ちます。簡単な例として、可能なトークン範囲が0〜100でノードが4つある場合、これらのノードのトークンは0、25、50、75になります。このアプローチにより、各ノードがデータの等しい範囲を受け持つことが確保されます。
複数のデータ・センターのデプロイでは、ハッシュ範囲が各データ・センター内のノードに均等に分割されるように各データ・センター用のトークンを計算します。データ・センターを、それぞれが独自のリングであるようにパーティションします。
単一のデータ・センターのデプロイの場合、ハッシュ範囲を、クラスター内のノード数で割ることでトークンを計算します。
ノードを初めて開始する前に、クラスター内の各ノードにトークンを割り当てる必要があります。cassandra.yaml構成ファイルのinitial_tokenプロパティを使用してトークンを設定します。num_tokenプロパティを必ずコメント・アウトしてください。
トークンを生成する手順については、「トークンの生成」を参照してください。
Cassandraデータベースの詳細については、「データベース内部の仕組み」を参照してください。
単一データ・センター用のトークンの計算
たとえば、単一データ・センターに6つのノードがある場合、Murmur3Partitionerを使用して計算したトークンの結果は次のようになります。
[ '-9223372036854775808', '-6148914691236517206', '-3074457345618258604', '-2', '3074457345618258600', '6148914691236517202' ]
単一データ・センターの複数ラック用のトークンの計算
単一データセンターに複数のラックがある場合、ノードの数のトークンを計算し、そのトークンを交互にラックのノードに割り当てます。例:rack1、rack2、rack1、rack2など。この図はラックの割り当てを示します。
ベスト・プラクティスとして、ラックに交互に割り当てられるように、各ラックのノードの数が同じである必要があります。
複数データ・センター・クラスター用のトークンの計算
NetworkTopologyStrategyを使用する複数データ・センターをデプロイする場合、データ・センターごとのカスタムのキースペースに対するレプリカ配置を計算します。NetworkTopologyStrategyは、各データ・センター内で個別にレプリカ配置を決定します。最初のレプリカは、パーティショナーによって配置されます。同じデータセンター内のその他のレプリカは、前のレプリカから別のラックにあるノードが見つかるまで、リングを時計回りにまわることによって決定されます。そのようなノードがない場合は、他のレプリカは、同じラックに配置されます。
このタイプのクラスターには、SimpleStrategyを使用しないでください。複数のデータ・センター・クラスターを計算するときに使用できる別の方法があります。重要な点は、各データ・センター内のノードが同じ量のデータを管理することであり、クラスター内でのノードの分散は重要ではありません。DataStaxは、DataStax Enterprise OpsCenterを使用してクラスターのバランスを取り直すことを推奨します。
トークンの交互割り当て
各データ・センター用のトークンを計算し、次に、各データ・センターのノードがリング周りに均等に分散するように、トークンを交互に割り当てます。次の図に、トークンの位置とデータ・センターの割り当てを示します。
トークンの競合の回避
トークンの競合を回避するために、各トークンの値をオフセットします。値を1ずつ増加させることはできますが、100などのもっと大きいオフセット値を使用して、デッド・ノードを置き換える余地を残しておく方が賢明です。
以下に、3つのノードのデータ・センター2個および2つのノードのデータ・センター1個の場合のクラスター用のトークンを示します。
['-9223372036854775808',
'-3074457345618258603',
'3074457345618258602']
['-9223372036854775808',
'0']
オフセット値100を使用する:
- データセンター1
['-9223372036854775808', '-3074457345618258603', '3074457345618258602']
- データセンター2
['-9223372036854775708', '-3074457345618258503', '3074457345618258702']
- データセンター3
['-9223372036854775608', '200']
パッケージ・インストール | /etc/dse/cassandra/cassandra.yaml |
tarボール・インストール | install_location/resources/cassandra/conf/cassandra.yaml |