単一トークンのノードの追加または置き換え

単一トークン・アーキテクチャーのクラスターでノードを追加する、または置き換えるための手順。

このトピックは、単一トークン・アーキテクチャー(vnodeではない)を使用するクラスターの場合にのみ適用されます。

既存のクラスターへのキャパシティの追加について

Cassandraでは、新しいノードを段階的にクラスターに導入し、データ・センター全体を追加することによって、クラスターにキャパシティを追加できます。新しいノードを既存のクラスターに追加する場合、ノードは以下の情報を取得する必要があります。

  • initial_tokenおよびpartitionerによって割り当てられた、リング内のノードの位置、およびノードが担当するデータの範囲。
  • クラスターに関するラーニングの対象に接続し、gossip processを確立する、シード・ノード。
  • 参加先となるクラスターの名前と、クラスター内での新ノードの呼び方を構成します
  • 既存のクラスター上のcassandra.yamlに対して行ったデフォルトでないその他の任意の設定。

1つまたは複数のノードをクラスターに追加する場合、新しいノードのトークンを計算してください。以下のいずれかの方法を使用します。

クラスター・サイズを2倍にしてキャパシティを追加する
ノードの数を2倍(または、3倍、4倍)にしてキャパシティを追加すると、トークンを割り当てる場合より複雑さが軽減されます。既存のノードは既存のトークンの割り当てを維持でき、新しいノードは既存のトークンの範囲を二分(または三分)にするトークンが割り当てられます。たとえば、6つのノードのトークンを生成した場合、生成された3つのトークンの値は3つのノードを生成した場合と同じになります。明確にするため、まず、すでに使用しているトークン値を取得し、新しく計算したトークン値を新しく追加したノードに割り当てます。
すべてのノードの新しいトークンを再計算し、リング全体にノードを移動する
均一ではない数のノードでキャパシティを増やす場合は、クラスタ全体でトークンを再計算してから、nodetool moveを使用して新しいトークンを既存のノードに割り当てる必要があります。新しいトークンが割り当てられたすべてのノードを再起動した後に、nodetool cleanupを実行してすべてのノードで未使用のキーを削除します。これらの操作は、リソース集約的であるため、使用量が少ない時間帯に行ってください。
ノードを1つずつ追加し、initial_tokenプロパティを空のままにする
initial_tokenが空である場合、Cassandraは負荷が最も大きいノードのトークン範囲を分割し、新しいノードをその位置にあるリングに配置します。この方法を使用すると、完全にバランスがとれたリングが生成される可能性は低くなりますが、ホット・スポットが緩和されます。

クラスターへのノードの追加

  1. 新しいノードにCassandraをインストールします。ただし、Cassandraを起動しないでください。
  2. トークン生成ツールを使用する拡張ストラテジに基づいてノードのトークンを計算します。クラスターに参加すると、新しいノードがトークン範囲を自動的に選択するよう設定するには、この手順をスキップできます。
  3. 新しいノードにcassandra.yamlを設定します。
  4. トークンの計算に応じて、initial_tokenを設定します(あるいは、クラスターに参加したときに、新しいノードがトークン範囲を自動的に選択するよう設定する場合は、設定しないでおきます)。
  5. Cassandraをそれぞれの新しいノードで起動する。ノードがそれぞれ初期化を完了するまで2分ずつ間を空けます。nodetool netstatsを使用して、起動およびデータ・ストリーミング・プロセスを監視できます。
  6. 新しいノードを完全にブートストラップしたら、新しいトークンが必要なノードに新しいinitial_tokenプロパティ値を割り当ててから、ノードごとにnodetool move new_token,を実行します。
  7. すべてのノードに新しいトークンが割り当てられたら、ノードごとにnodetool cleanupを実行します。1つのノードでクリーンアップが完了するまで待ってから、次のノードに進んでください。この手順により、すでに存在するノードに属さなくなったキーが削除されます。
    注: クリーンアップは、利用が少ない時間帯まで延期しても安全です。

クラスターへのデータ・センターの追加

この手順を開始する前に、上記の「既存のクラスターへのキャパシティの追加」のガイドラインを参照してください。

  1. すべてのキースペースで必ずNetworkTopologyStrategyを使用します。
  2. 新しいノードごとに、cassandra.yamlファイルの構成プロパティを以下のように編集します。
    • auto_bootstrapFalseに設定します。
    • initial_tokenを設定します。新しいデータ・センターのトークンのオフセットを確認してください(トークンの生成を参照)。
    • cluster nameを設定します。
    • デフォルト以外に設定します。
    • シード・リストを設定します。クラスター内の各ノードには、同じシード・リストを割り当て、各データ・センターから1つ以上のノードを含める必要があります。一般的に、データ・センターあたり1つから3つまでのシードが使用されます。
  3. 新しいノードを含めるすべてのサーバーで、cassandra-rackdc.properties(GossipingPropertyFileSnitch)またはcassandra-topology.properties(PropertyFileSnitch)のいずれかを更新します。再起動する必要はありません。
    cassandra-rackdc.propertiesファイルの場所は、インストールのタイプによって異なります。
    パッケージ・インストール /etc/cassandra/cassandra-rackdc.properties
    tarボール・インストール install_location/conf/cassandra-rackdc.properties
    Windowsインストール C:\Program Files\DataStax Community\apache-cassandra\conf\cassandra-rackdc.properties
    cassandra-topology.propertiesファイルの場所は、インストールのタイプによって異なります。
    パッケージ・インストール /etc/cassandra/cassandra-topology.properties
    tarボール・インストール install_location/conf/cassandra-topology.properties
    Windowsインストール C:\Program Files\DataStax Community\apache-cassandra\conf\cassandra-topology.properties
  4. 明示的に命令されるまではクライアントが新しいノードに問い合わせをしないよう、新しいノードが自動検出されないことを確認してください。たとえば、Hectorで以下のように設定します。
    hostConfig.setAutoDiscoverHosts(false);
  5. QUORUM整合性レベルを読み取りおよび書き込みに使用している場合は、LOCAL_QUORUMまたはEACH_QUORUMの整合性レべルを調べ、そのレベルが複数データ・センターの要件に適合するかどうかを確認してください。
  6. 新しいノードの起動新しいノードを起動します。
  7. クラスター内のすべてのノードを起動したら、以下の手順に従ってください。
    1. 拡張されたクラスターのキースペースのレプリケーション係数を変更します。
    2. 新しいデータ・センターの各ノードでnodetool rebuildを実行します。

デッド・ノードの置き換え

  1. クラスター内の任意のライブ・ノードでnodetool ringコマンドを使用して、ノードがデッドであることを確認します。

    nodetool ringコマンドは、デッド・ノード(DN)のトークン値のダウン状態を示します。

  2. 置き換えノードにCassandraをインストールします。
  3. 置き換えノード上の既存のCassandraデータを削除します。
    $ sudo rm -rf /var/lib/cassandra/*
    C:\> rmdir /s "Program Files\DataStax Community\apache-cassandra\data"
  4. auto_bootstrap:trueを設定します(auto_bootstrapcassandra.yamlファイルに存在しない場合、自動的にデフォルトのtrueになります)。
  5. cassandra.yamlファイルのinitial_tokenを、デッド・ノードのトークンの値から1を引いた値に設定します。上の図の値を使用します。この場合、28356863910078205288614550619314017621-1です。
    initial_token: 28356863910078205288614550619314017620
  6. ノードのcassandra.yamlでデフォルト以外の設定を既存のクラスターに合わせて設定します。
  7. 新しいノードの起動新しいノードを起動します。
  8. 新しいノードがブートストラップを終了すると、nodetool ringコマンドを使用してマークが付いていることを確認します。
  9. 各キースペースでnodetool repairを実行して、すべてのノードの整合性が取られていることを確認します。例:
    $ nodetool repair -h 10.46.123.12 keyspace_name
  10. デッド・ノードを削除します。
cassandra.yamlファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/cassandra/cassandra.yaml
tarボール・インストール install_location/resources/cassandra/conf/cassandra.yaml
Windowsインストール C:\Program Files\DataStax Community\apache-cassandra\conf\cassandra.yaml