ノードの追加、交換、移動、削除
ブートストラップ
新しいノードの追加は「ブートストラップ」と呼ばれます。num_tokens
パラメータは、ブートストラップ中に結合ノードに割り当てられる仮想ノード(トークン)の量を定義します。トークンは、ノードが担当するリング(トークン範囲)のセクションを定義します。
トークン割り当て
デフォルトのトークン割り当てアルゴリズムでは、新しいノードは、担当する num_tokens
個のランダムトークンを選択します。トークンはランダムに分散されるため、仮想ノードの数を増やすと負荷分散が改善されますが、トークン管理のオーバーヘッドも増加します。デフォルトの 256 個の仮想ノードは、許容可能なオーバーヘッドで適切な負荷分散を提供する必要があります。
3.0 以降では、特定のキースペースの既存の仮想ノードの負荷に基づいてトークンを割り当てる新しいトークン割り当てアルゴリズムが導入され、それにより、トークン数を少なくして負荷分散が向上します。このアプローチを使用するには、新しいノードを JVM オプション -Dcassandra.allocate_tokens_for_keyspace=<keyspace>
を付けて起動する必要があります。<keyspace>
は、アルゴリズムがトークン割り当てを最適化するための負荷情報を見つけることができるキースペースです。
範囲ストリーミング
トークンが割り当てられると、結合ノードは、データストリームの担当となるトークン範囲の現在のレプリカを選択します。デフォルトでは、新しいノードのデータが現在の状態と一致するように、各トークン範囲のプライマリレプリカからストリームします。
利用できないレプリカがある場合、一貫性のあるブートストラッププロセスは失敗します。この動作をオーバーライドし、利用できないレプリカからのデータを失う可能性がある場合は、JVM フラグ -Dcassandra.consistent.rangemovement=false
を設定します。
失敗/ハングしたブートストラップの再開
2.2 以降では、ブートストラッププロセスが失敗した場合、nodetool bootstrap resume
を呼び出すことで、以前に保存した状態からブートストラップを再開できます。何らかの理由でブートストラップがハングまたは停止した場合、ノードを再起動するだけで再開することもできます。ブートストラップの状態をクリーンアップして最初からやり直すには、JVM 起動フラグ -Dcassandra.reset_bootstrap_progress=true
を設定します。
下位バージョンでは、ブートストラッププロセスが失敗した場合、ノードをワイプ(すべてのデータを削除)し、ブートストラッププロセスを再度開始することをお勧めします。
ノードの削除
ライブノードに対して nodetool decommission
を使用するか、デッドノードを削除する場合は(他のマシンに) nodetool removenode
を使用して、ノードをクラスタから削除できます。これにより、古いノードが担当していた範囲が他のノードに割り当てられ、適切なデータがそこに複製されます。decommission
が使用された場合、データは decommissioned ノードからストリームされます。removenode
が使用された場合、データは残りのレプリカからストリームされます。
decommissioned ノードからデータが自動的に削除されることはないため、リング上の別のトークンでノードを再度サービスに戻したい場合は、手動で削除する必要があります。
ノードの移動
num_tokens: 1
の場合、nodetool move
でリング内のノードの位置を移動できます。移動は、decommission + ブートストラップよりも便利で効率的です。ノードを移動した後、不要なデータを削除するために nodetool cleanup
を実行する必要があります。
デッドノードの交換
デッドノードを交換するには、JVM 起動フラグ -Dcassandra.replace_address_first_boot=<dead_node_ip>
を付けて Cassandra を起動します。このプロパティが有効になると、ノードはハイバネート状態で起動し、その間、他のすべてのノードはこのノードを DOWN (DN) と認識しますが、このノードは自身を UP (UN) と認識します。正確な交換状態は nodetool netstats
で確認できます。
交換ノードは、クラスタ内の残りのノードからデータのブートストラップを開始します。交換ノードは、交換されるノードと異なる IP アドレスを持っている場合にのみ、ブートストラップフェーズ中に書き込みを受信します。(CASSANDRA-8523 および CASSANDRA-12344 を参照)
ブートストラップが完了すると、ノードは「UP」とマークされます。
次のいずれかのケースに該当する場合、ブートストラップ中/前に進行中の書き込みを見逃したため、交換したノードを一貫性のある状態に戻すために必ず修復を実行する必要があります。交換期間とは、ノードが最初にダウンしてから、新しいノードが交換プロセスを完了するまでの期間を指します。
|