Cassandra 節點如何將另一個節點視為已關閉?
我在三個節點上執行 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 以來已經有很多修復和改進,這可能會導致這個問題。