Cassandra 文件

版本

您正在檢視預發行版本的說明文件。

新增、取代、移動和移除節點

開機

新增新節點稱為「開機」。num_tokens 參數將定義加入節點在開機期間將被指定多少個虛擬節點 (代幣)。代幣定義節點將負責的環節 (代幣範圍)。

代幣配置

使用預設代幣配置演算法,新節點將挑選 num_tokens 個隨機代幣負責。由於代幣是隨機分配的,因此負載分配會隨著虛擬節點數量增加而改善,但也會增加代幣管理負擔。預設的 256 個虛擬節點應可提供合理的負載平衡,且負擔可接受。

在 3.0+ 中,引進新的代幣配置演算法,根據給定鍵空間中現有虛擬節點的負載來配置代幣,因此使用較少的代幣就能改善負載分配。若要使用此方法,新節點必須使用 JVM 選項 -Dcassandra.allocate_tokens_for_keyspace=<keyspace> 啟動,其中 <keyspace> 是演算法可從中找到負載資訊以最佳化代幣指派之鍵空間。

手動令牌指派

您可以使用 initial_token cassandra.yaml 參數手動指定逗號分隔的令牌清單,如果已指定,Cassandra 將略過令牌分配程序。這可能有助於使用外部工具進行令牌指派或使用其先前令牌還原節點時。

範圍串流

在分配令牌後,加入節點將選擇它將負責串流資料的令牌範圍的目前副本。預設情況下,它將從每個令牌範圍的主副本串流,以保證新節點中的資料與目前狀態一致。

在任何不可用副本的情況下,一致引導程序將失敗。若要覆寫此行為並可能遺漏來自不可用副本的資料,請設定 JVM 旗標 -Dcassandra.consistent.rangemovement=false

恢復失敗/中斷的引導

在 2.2+,如果引導程序失敗,可以透過呼叫 nodetool bootstrap resume 從先前儲存的狀態恢復引導。如果由於某些原因引導中斷或停止,也可以透過重新啟動節點來恢復。若要清除引導狀態並重新開始,您可以設定 JVM 啟動旗標 -Dcassandra.reset_bootstrap_progress=true

在較低版本中,當引導程序失敗時,建議清除節點(移除所有資料)並重新啟動引導程序。

手動引導

您可以透過設定隱藏參數 auto_bootstrap: 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)

引導完成後,節點將標示為「已開啟」。

如果適用下列任何情況,您必須執行修復以使替換的節點再次一致,因為它在引導期間/之前錯過了正在進行的寫入作業。替換時間範圍是指從節點最初死亡到新節點完成替換程序的期間。

  1. 節點在被替換之前已關閉超過 max_hint_window

  2. 您使用與死掉的節點相同的 IP 位址進行替換替換時間超過 max_hint_window

監控進度

可以使用 nodetool netstats 來監控引導、替換、移動和移除進度,它會顯示串流作業的進度。

在範圍移動後清理資料

作為安全措施,Cassandra 不會自動從由於範圍移動作業 (引導、移動、替換) 而「失去」部分令牌範圍的節點中移除資料。當您確定新節點已啟動且運作正常時,請在失去範圍的節點上執行 nodetool cleanup。如果您不執行此作業,舊資料仍會計入該節點上的負載。