PowerScale: lldpd로 분할된 노드가 더 이상 백엔드 Dell 스위치로 하트비트를 전송하지 않음
Summary: 이 문서에서는 _lldpd 프로세스가 허용되는 최대 메모리를 사용하고 더 이상 LLDP(Link Layer Discovery Protocol) 패킷을 백엔드 스위치로 전송하지 않는 문제에 대해 설명합니다.
Symptoms
-
영향을 받는 버전(9.5.0.0에서 9.5.0.5로 OneFS 업그레이드)은 수행하지 않는 것이 좋습니다
-
RPS 또는 고객은 영향을 받는 버전(예: 9.5.0.1에서 9.5.0.7로 업그레이드)에서 OneFS 업그레이드를 수행하기 전에 모든 lldpd 프로세스를 재시작해야 합니다. 해결 방법에서 옵션 2를 따릅니다.
lldpd에 메모리 누수가 있으며 프로세스가 허용되는 최대 메모리(1GB)를 사용한 경우 노드가 분할될 수 있습니다. 노드가 허용된 메모리를 사용하면 더 이상 LLDP 패킷을 백엔드 스위치로 전송하지 않습니다. SFS(SmartFabric Services)를 실행하는 PowerScale Dell 인증 백엔드 스위치는 노드에서 하트비트(LLDP) 패킷을 수신해야 합니다. 하트비트 3개가 누락되면 스위치 포트가 전용 가상 네트워크에서 제거됩니다. 그러면 노드가 더 이상 해당 경로를 통해 클러스터와 통신할 수 없습니다.
클러스터를 업그레이드하려는 경우 노드가 연속적으로 재부팅되고 재부팅할 때마다 여러 링크가 다운되었다가 백업됩니다. 재부팅으로 인한 이러한 각 링크 이벤트는 lldpd vmem 사용량의 크기를 천천히 증가시킵니다. 최근에 프로세스를 재시작하지 않은 경우 업그레이드 중에 노드가 분할될 가능성이 높습니다.
이 문제는 다음과 같은 시나리오에서 발생할 수 있습니다.
- OneFS 업그레이드
- 정상적인 클러스터 작업
현재 vmem 사용량은 다음 명령을 사용하여 확인할 수 있습니다. 여기서 최대 RSS(Resident Set Size) 값은 1,048,576KB입니다. 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
WARNING
|
현재 시나리오에 따라 문제를 해결하거나 해결할 수 있는 몇 가지 옵션이 있습니다.
- 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) } }'"'"''
-
- 문제가 해결된 후의 임시 해결 방법(다음 명령은 이전 명령과 동일함)으로, 화면 세션에서 실행하여 1,200초마다 검사를 수행할 수 있습니다.
-
# 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
-