PowerScale:節點分割為 lldpd 不再傳送活動訊號至後端 Dell 交換器
Summary: 本文說明_lldpd程序會消耗其允許的最大記憶體,且不再傳送連結層探索通訊協定 (LLDP) 封包至後端交換器的問題。
Symptoms
-
不建議執行 OneFS 升級至受影響的版本 (9.5.0.0 至 9.5.0.5)
-
RPS 或客戶必須先重新啟動所有 lldpd 程序,才能在受影響的版本上執行 OneFS 升級 (例如,從 9.5.0.1 升級至 9.5.0.7)。請遵循解決方案中的選項 2。
lldpd 中存在記憶體洩漏,如果進程已消耗其允許的最大記憶體 (1GB),則節點可以拆分。一旦節點使用其允許的記憶體,它就不再向後端交換機發送 LLDP 數據包。執行 SmartFabric Services (SFS) 的 PowerScale Dell 認證後端交換器必須從節點接收活動訊號 (LLDP) 封包。如果錯過三個活動信號,則會從其專用虛擬網路中刪除交換機埠。然後,節點無法再通過該路徑與群集通信。
如果叢集要升級,節點會連續重新開機,每次重新開機都會需要幾個連結中斷再備份。重新開機時所發生的每一個連結事件都會慢慢增加 lldpd vmem 使用量的大小。如果最近沒有重新啟動該程序,則升級期間極有可能發生節點分割。
在下列情況下可能會發生此問題:
- OneFS 升級
- 正常叢集作業
您可以使用下列命令看到目前的 vmem 使用情況,其中最大常駐集大小 (RSS) 值為 1,048,576 KB。RSS 是來自 PS(“-”的左側)輸出(不包括節點名稱)的第六列資訊。
# isi_for_array -s 'ps aux | grep _lldpd | grep -v grep'
下列輸出範例:
cl950x-1# isi_for_array -s 'ps aux | grep _lldpd | grep -v grep' cl950x-1: _lldpd 1483 0.0 3.2 273804 262168 - S 6Aug23 74:25.14 lldpd: no neighbor. (lldpd) cl950x-1: _lldpd 1492 0.0 3.2 273804 262168 - S 6Aug23 74:31.73 lldpd: no neighbor. (lldpd) cl950x-2: _lldpd 1483 0.0 2.9 251068 238632 - S 14Aug23 66:19.68 lldpd: no neighbor. (lldpd) cl950x-2: _lldpd 1492 0.0 2.9 251068 238632 - S 14Aug23 66:24.72 lldpd: no neighbor. (lldpd) cl950x-3: _lldpd 1483 0.0 2.9 251832 239420 - S 14Aug23 46:25.36 lldpd: no neighbor. (lldpd) cl950x-3: _lldpd 1492 0.0 2.9 251832 239420 - S 14Aug23 46:32.24 lldpd: no neighbor. (lldpd) cl950x-4: _lldpd 1487 0.0 3.1 268052 256212 - S 8Aug23 50:25.15 lldpd: no neighbor. (lldpd) cl950x-4: _lldpd 1496 0.0 3.1 268052 256212 - S 8Aug23 50:36.34 lldpd: no neighbor. (lldpd) cl950x-5: _lldpd 1483 0.0 3.1 273208 261552 - S 6Aug23 75:41.91 lldpd: no neighbor. (lldpd) cl950x-5: _lldpd 1492 0.0 3.1 273208 261552 - S 6Aug23 75:35.00 lldpd: no neighbor. (lldpd) cl950x-6: _lldpd 1482 0.0 3.2 274144 262516 - S 6Aug23 50:49.08 lldpd: no neighbor. (lldpd) cl950x-6: _lldpd 1492 0.0 3.2 274144 262516 - S 6Aug23 51:02.88 lldpd: no neighbor. (lldpd) cl950x-7: _lldpd 1483 0.0 3.2 274004 262380 - S 6Aug23 50:51.55 lldpd: no neighbor. (lldpd) cl950x-7: _lldpd 1492 0.0 3.2 274004 262380 - S 6Aug23 51:03.26 lldpd: no neighbor. (lldpd) cl950x-8: _lldpd 1483 0.0 2.9 251176 238744 - S 14Aug23 46:40.93 lldpd: no neighbor. (lldpd) cl950x-8: _lldpd 1492 0.0 2.9 251176 238744 - S 14Aug23 46:49.57 lldpd: no neighbor. (lldpd) ^^^^^^
lldpd 進程消耗記憶體的速度因多種因素而異。這也是在 OneFS 升級期間記憶體使用量高於正常原因:
- 叢集上的網路組態大小
- 從網路設定建立的子網數
- 網路事件的數量,例如連結中斷或啟動
- 週期性重新開機事件
程序達到允許記憶體上限所需的時間_lldpd因叢集而異。但是,我們發現網路組態大小與故障時間之間存在關聯。這意味著配置的組網、子網和池越多,可以越快發生。
Cause
Resolution
儆
|
有幾種選項可以解決此問題或變通解決此問題,具體取決於您當前的方案:
- 將 OneFS 升級至 9.5.0.6 及更新版本
- 請注意文章中詳述的有關在從受影響的版本進行任何升級之前重新啟動 lldpd 的警告消息。
- 臨時因應措施會立即完成,重新開機 lldpd 程序。這需要手動介入,方法是在叢集上重新啟動程序:
-
# killall lldpd
-
- 在立即重新啟動超過 500MB 的 lldpd 進程中解決問題後的臨時解決方法:
-
# isi_for_array -s 'ps auxww | grep _lldpd | grep -v grep | awk '"'"'{print $2}'"'"' | while read pid; do procstat -r $pid | grep RSS; done | awk '"'"'{ if ($5 > 500000 && $2 == "lldpd") { command=sprintf("kill %d",$1); system(command); close(command) } }'"'"''
-
- 作為問題解決後的暫時因應措施 (下列命令與上一個命令相同),您可以在螢幕工作階段中執行,每 1200 秒執行一次檢查。
-
# while true; do isi_for_array -s 'ps auxww | grep _lldpd | grep -v grep | awk '"'"'{print $2}'"'"' | while read pid; do procstat -r $pid | grep RSS; done | awk '"'"'{ if ($5 > 500000 && $2 == "lldpd") { command=sprintf("kill %d",$1); system(command); close(command) } }'"'"''; sleep 1200; done
-