単一トークン・アーキテクチャー・ノード用のトークンの計算

単一トークン・アーキテクチャーを使用する場合に、各データ・センター内のノードに対してハッシュ範囲が均等に分割されるようにトークンを計算する方法。

仮想ノード(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個の場合のクラスター用のトークンを示します。

3つのノード用のトークン:
['-9223372036854775808',
'-3074457345618258603', 
'3074457345618258602']
2つのノード用のトークン:
['-9223372036854775808', 
'0']

オフセット値100を使用する:

  • データセンター1
    ['-9223372036854775808',
    '-3074457345618258603', 
    '3074457345618258602']
  • データセンター2
    ['-9223372036854775708',
    '-3074457345618258503', 
    '3074457345618258702']
  • データセンター3
    ['-9223372036854775608', 
    '200']
cassandra.yamlファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/dse/cassandra/cassandra.yaml
tarボール・インストール install_location/resources/cassandra/conf/cassandra.yaml