新增、取代、移動和移除節點
開機
新增新節點稱為「開機」。num_tokens
參數將定義加入節點在開機期間將被指定多少個虛擬節點 (代幣)。代幣定義節點將負責的環節 (代幣範圍)。
代幣配置
使用預設代幣配置演算法,新節點將挑選 num_tokens
個隨機代幣負責。由於代幣是隨機分配的,因此負載分配會隨著虛擬節點數量增加而改善,但也會增加代幣管理負擔。預設的 256 個虛擬節點應可提供合理的負載平衡,且負擔可接受。
在 3.0+ 中,引進新的代幣配置演算法,根據給定鍵空間中現有虛擬節點的負載來配置代幣,因此使用較少的代幣就能改善負載分配。若要使用此方法,新節點必須使用 JVM 選項 -Dcassandra.allocate_tokens_for_keyspace=<keyspace>
啟動,其中 <keyspace>
是演算法可從中找到負載資訊以最佳化代幣指派之鍵空間。
範圍串流
在分配令牌後,加入節點將選擇它將負責串流資料的令牌範圍的目前副本。預設情況下,它將從每個令牌範圍的主副本串流,以保證新節點中的資料與目前狀態一致。
在任何不可用副本的情況下,一致引導程序將失敗。若要覆寫此行為並可能遺漏來自不可用副本的資料,請設定 JVM 旗標 -Dcassandra.consistent.rangemovement=false
。
移除節點
您可以使用 nodetool decommission
將節點從叢集中取出到一個運作中的節點,或使用 nodetool removenode
(到任何其他機器)移除一個失效的節點。這將將舊節點負責的範圍指派給其他節點,並在那裡複製適當的資料。如果使用停用,資料將從停用的節點串流。如果使用移除節點,資料將從剩餘的副本串流。
不會自動從正在停用的節點中移除資料,因此如果您想在環上以不同的令牌將節點放回服務中,則應手動移除它。
移動節點
當 num_tokens: 1
時,可以使用 nodetool move
來移動環中的節點位置。移動比停用 + 引導更方便且更有效率。移動節點後,應執行 nodetool cleanup
以移除任何不必要的資料。
替換死掉的節點
若要替換死掉的節點,請使用 JVM 啟動旗標 -Dcassandra.replace_address_first_boot=<dead_node_ip>
啟動 Cassandra。啟用此屬性後,節點會以休眠狀態啟動,在此期間,所有其他節點會將此節點視為已關閉 (DN),但此節點會將自己視為已開啟 (UN)。可以在 nodetool netstats
中找到準確的替換狀態。
替換節點現在會開始從叢集中的其他節點引導資料。如果替換節點的 IP 位址與被替換節點不同,則它只會在引導階段接收寫入作業。(請參閱 CASSANDRA-8523 和 CASSANDRA-12344)
引導完成後,節點將標示為「已開啟」。
如果適用下列任何情況,您必須執行修復以使替換的節點再次一致,因為它在引導期間/之前錯過了正在進行的寫入作業。替換時間範圍是指從節點最初死亡到新節點完成替換程序的期間。
|