Cassandra

Cassandra 節點如何將另一個節點視為已關閉?

  • February 14, 2018

我在三個節點上執行 Cassandra。這是他們的nodetool status輸出:

ubuntu@ip-10-0-8-8:~$ nodetool status
Datacenter: us-east
===================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens  Owns    Host ID                               Rack
UN  10.0.9.8   2.07 MB    256     ?       c8d574b9-540c-410f-9326-789eb75d3d14  1c
UN  10.0.8.8   2.06 MB    256     ?       d9454056-a358-4428-ab5f-c03e8042167e  1d
UN  10.0.10.8  2.01 MB    256     ?       3617643d-b0a8-4b72-a9d4-feded4445292  1a

ubuntu@ip-10-0-9-8:~$ nodetool status
Datacenter: us-east
===================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens  Owns    Host ID                               Rack
UN  10.0.9.8   2.07 MB    256     ?       c8d574b9-540c-410f-9326-789eb75d3d14  1c
UN  10.0.8.8   2.06 MB    256     ?       d9454056-a358-4428-ab5f-c03e8042167e  1d
DN  10.0.10.8  2.09 MB    256     ?       3617643d-b0a8-4b72-a9d4-feded4445292  1a

ubuntu@ip-10-0-10-8:~$ nodetool status
Datacenter: us-east
===================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens  Owns    Host ID                               Rack
UN  10.0.9.8   2.07 MB    256     ?       c8d574b9-540c-410f-9326-789eb75d3d14  1c
UN  10.0.8.8   2.06 MB    256     ?       d9454056-a358-4428-ab5f-c03e8042167e  1d
UN  10.0.10.8  2.01 MB    256     ?       3617643d-b0a8-4b72-a9d4-feded4445292  1a

一切看起來都很好,除了一件事(第二塊的最後一行):

DN  10.0.10.8  2.09 MB    256     ?       3617643d-b0a8-4b72-a9d4-feded4445292  1a

D行首的 表示節點已關閉。怎麼會10.0.9.8在其他節點看到它的情況下看到該節點已關閉?這會導致不一致嗎?

順便說一下,使用 Cassandra 2.1.1 版。

nodetool enablegossip在出現在其他節點上的主機上執行為我和現在修復了它。但是,它出現在我檢查的所有其他節點上。在非雲環境中執行。

我很好奇我的其他節點說了什麼,我發現了一個有同樣問題的節點(比如你的 10.0.9.8,顯示 10.0.10.8 已關閉)。僅nodetool enablegossip在 10.8 上執行並沒有幫助。但是先跑disablegossip然後enablegossip再跑!

gossip 協議負責讓節點了解所有其他節點的狀態。我過去曾見過一個節點(無論出於何種原因)將一個節點視為“DN”,而其他節點則沒有。這通常發生在雲環境中,通常是由網路事件或不一致引起的。

這會導致不一致嗎?

是的!將 10.0.10.8 視為“DN”的節點不會向其複制數據。假設這種方式已經超過 3 小時,他們也將停止記錄提示。

對於快速解決方案,我會在 10.0.10.8 和 10.0.9.8 上反彈 Cassandra 程序。當它返回時,跟踪 system.log 文件並確保它與所有其他節點正確連接。

如果這樣做不行,phi_convict如果您在雲中(在所有節點上),請嘗試將您的 (cassandra.yaml) 設置為 10 或 12。這將使您的節點對由於網路延遲而被標記為“DN”的容忍度更高。

要查看的另一件事是仔細檢查您的雲可用區是否有問題節點。一個雲 AZ 中的節點可能在網路方面表現不同。因此,如果您發現這些問題是 AZ 特有的,您可能需要就此聯繫您的雲提供商。

如果它仍然沒有回來,請擦除節點的數據並重新引導它。請注意,當您確實將集群恢復為完整的“UN”時,您應該在被視為“DN”的節點上執行修復。

使用 Cassandra 2.1.1 版

我會立即升級它。如果您卡在 2.1 版本上,您至少應該使用2.1.18的最新更新檔版本(用於錯誤修復) 。但是自 2.1.1 以來已經有很多修復和改進,這可能會導致這個問題。

引用自:https://dba.stackexchange.com/questions/184133