2017-06-05 135 views
3

我有一個6節點的生產cassandra集羣。我對一個節點上的cassandra.yaml文件進行了一些更改,因此需要重新啓動它。 如何在不丟失任何數據或導致任何集羣相關問題的情況下執行此操作? 我可以在該特定節點上殺死cassandra進程並重新啓動它。 集羣信息: 6個節點。所有活動。 我正在使用AWS Ec2Snitch。如何從多節點cassandra集羣重新啓動一個活動節點?

謝謝。

回答

0

如果您使用的複製因子大於1,而且在寫/讀操作中未使用ALL一致性設置,則可以執行下列步驟,而不會出現任何停機/數據丟失。如果您有上述限制之一,則需要在繼續之前增加複製因子/更改請求一致性。

  1. 執行nodetool該節點(http://docs.datastax.com/en/cassandra/2.1/cassandra/tools/toolsDrain.html)上漏
  2. 停止服務。
  3. 啓動服務。

在卡桑德拉,如果耐用使能寫操作,你不應該反正丟失數據 - 有commitlog日誌重播的意外重啓的情況下的機制,所以你不應該丟失任何數據,如果這樣做只是重新啓動,但重放commitlog可能需要一些時間。

上述步驟是官方升級程序的一部分,應該是「最安全」的選項。你可以做nodetool flush +重啓,這樣可以確保commitlog的重播會很小,並且可以比的方法更快。

+0

謝謝@nevsv,我會在分段集羣上嘗試這些,然後繼續生產。我使用的複製因子是3,讀取一致性是1.在完成維護活動後,我將在此分享我的經驗。 –

0

我可以在該特定節點上殺死cassandra進程並重新啓動它。

本質上說,是的。我假設你有6個節點的RF,所以它不應該是一個大問題。如果你想,做我稱之爲「乾淨關閉」,你可以先運行下面的命令:

nodetool disablegossip 
nodetool drain 

然後(取決於您的安裝):

sudo service cassandra stop 

或者:

kill `cat cassandra.pid` 

請注意,如果您未完成這些步驟,您應該仍然可以。 drain只是將memtables刷新到磁盤。如果這種情況沒有發生,那麼提交日誌與啓動時磁盤上的內容一致。這些步驟只會讓你的啓動速度更快。

+0

謝謝@aaron。是的,我的確在使用複製因子3,並且讀取一致性爲1.如果我理解正確,我不需要刪除或觸摸數據目錄,只需完成您提到的步驟即可停止並啓動該過程。 –