문제 해결
BeeGFS HA 클러스터 문제 해결
개요
이 섹션에서는 BeeGFS HA 클러스터를 운영할 때 발생할 수 있는 다양한 장애 및 기타 시나리오를 조사하고 해결하는 방법을 설명합니다.
문제 해결 설명서
예상치 못한 장애 조치 조사
노드가 예기치 않게 펜싱되고 해당 서비스가 다른 노드로 이동된 경우 첫 번째 단계는 클러스터가 하단에 리소스 장애를 나타내는지 확인하는 것입니다 pcs status
. 펜싱이 성공적으로 완료되고 리소스가 다른 노드에서 다시 시작된 경우에는 일반적으로 아무 것도 표시되지 않습니다.
일반적으로 다음 단계는 를 사용하여 시스템 로그를 검색하는 것입니다 journalctl
나머지 파일 노드 중 하나에서(심장박동기 로그는 모든 노드에서 동기화됨) 오류가 발생한 시간을 알고 있는 경우 장애가 발생하기 바로 직전에 검색을 시작할 수 있습니다(일반적으로 10분 이상 전에 검색을 시작하는 것이 좋습니다).
journalctl --since "<YYYY-MM-DD HH:MM:SS>"
다음 섹션에서는 조사 범위를 더욱 좁히기 위해 로그에 표시할 수 있는 일반적인 텍스트를 보여 줍니다.
조사/해결 단계
1단계: BeeGFS 모니터에서 장애를 감지했는지 확인합니다.
BeeGFS 모니터에 의해 페일오버가 트리거된 경우 오류가 표시됩니다(다음 단계로 진행되지 않는 경우).
journalctl --since "<YYYY-MM-DD HH:MM:SS>" | grep -i unexpected
[...]
Jul 01 15:51:03 beegfs_01 pacemaker-schedulerd[9246]: warning: Unexpected result (error: BeeGFS service is not active!) was recorded for monitor of meta_08-monitor on beegfs_02 at Jul 1 15:51:03 2022
이 경우 BeeGFS 서비스 META_08이 어떤 이유로 중지되었습니다. 문제 해결을 계속하려면 beegfs_02를 부팅하고 에서 서비스에 대한 로그를 검토해야 합니다 /var/log/beegfs-meta-meta_08_tgt_0801.log
. 예를 들어, BeeGFS 서비스에서 노드의 내부 문제 또는 문제로 인해 애플리케이션 오류가 발생했을 수 있습니다.
페이스 메이커의 로그와 달리 BeeGFS 서비스의 로그는 클러스터의 모든 노드에 배포되지 않습니다. 이러한 유형의 장애를 조사하려면 장애가 발생한 원래 노드의 로그가 필요합니다. |
모니터에서 보고할 수 있는 문제는 다음과 같습니다.
-
대상에 액세스할 수 없습니다!
-
설명: 블록 볼륨을 액세스할 수 없음을 나타냅니다.
-
문제 해결:
-
대체 파일 노드에서 서비스도 시작하지 못한 경우 블록 노드가 정상 상태인지 확인합니다.
-
이 파일 노드에서 블록 노드에 액세스하지 못하게 하는 물리적 문제(예: InfiniBand 어댑터 또는 케이블 장애)가 있는지 확인합니다.
-
-
-
네트워크에 연결할 수 없습니다!
-
설명: 클라이언트가 이 BeeGFS 서비스에 연결하는 데 사용하는 어댑터 중 온라인 어댑터가 없습니다.
-
문제 해결:
-
여러 파일 노드/모든 파일 노드에 영향을 받은 경우 BeeGFS 클라이언트 및 파일 시스템을 연결하는 데 사용된 네트워크에 장애가 있는지 확인합니다.
-
이 파일 노드에서 클라이언트에 액세스하지 못하게 하는 물리적 문제(예: InfiniBand 어댑터 또는 케이블 장애)가 있는지 확인합니다.
-
-
-
BeeGFS 서비스가 활성 상태가 아닙니다.
-
설명: BeeGFS 서비스가 예기치 않게 중지되었습니다.
-
문제 해결:
-
오류를 보고한 파일 노드에서 영향을 받는 BeeGFS 서비스의 로그를 확인하여 충돌이 보고되었는지 확인합니다. 이 경우 NetApp Support에서 케이스를 접수하여 충돌을 조사하십시오.
-
BeeGFS 로그에 보고된 오류가 없는 경우 저널 로그를 확인하여 시스템이 서비스가 중지된 이유를 기록했는지 확인합니다. 일부 시나리오에서 BeeGFS 서비스는 프로세스가 종료되기 전에(예: 누군가 를 실행한 경우) 메시지를 기록할 수 있는 기회를 제공하지 않았을 수 있습니다
kill -9 <PID>
)를 클릭합니다.
-
-
2단계: 노드가 예기치 않게 클러스터를 종료했는지 확인합니다
노드에 심각한 하드웨어 장애가 발생하거나(예: 시스템 보드가 작동하지 않음) 커널 패닉 또는 유사한 소프트웨어 문제가 발생한 경우 BeeGFS 모니터에서 오류를 보고하지 않습니다. 대신 호스트 이름을 찾으십시오. 심장박동기에서 노드가 예기치 않게 손실되었음을 나타내는 메시지가 표시됩니다.
journalctl --since "<YYYY-MM-DD HH:MM:SS>" | grep -i <HOSTNAME>
[...]
Jul 01 16:18:01 beegfs_01 pacemaker-attrd[9245]: notice: Node beegfs_02 state is now lost
Jul 01 16:18:01 beegfs_01 pacemaker-controld[9247]: warning: Stonith/shutdown of node beegfs_02 was not expected
3단계: 심장박동기가 노드를 울타리로 만들 수 있는지 확인합니다
모든 시나리오에서 노드가 실제로 오프라인 상태인지 확인하기 위해 심장박동기 펜스(pencing)를 시도하는 것을 볼 수 있습니다(정확한 메시지는 펜싱 원인에 따라 다를 수 있음).
Jul 01 16:18:02 beegfs_01 pacemaker-schedulerd[9246]: warning: Cluster node beegfs_02 will be fenced: peer is no longer part of the cluster
Jul 01 16:18:02 beegfs_01 pacemaker-schedulerd[9246]: warning: Node beegfs_02 is unclean
Jul 01 16:18:02 beegfs_01 pacemaker-schedulerd[9246]: warning: Scheduling Node beegfs_02 for STONITH
펜싱 작업이 성공적으로 완료되면 다음과 같은 메시지가 표시됩니다.
Jul 01 16:18:14 beegfs_01 pacemaker-fenced[9243]: notice: Operation 'off' [2214070] (call 27 from pacemaker-controld.9247) for host 'beegfs_02' with device 'fence_redfish_2' returned: 0 (OK)
Jul 01 16:18:14 beegfs_01 pacemaker-fenced[9243]: notice: Operation 'off' targeting beegfs_02 on beegfs_01 for pacemaker-controld.9247@beegfs_01.786df3a1: OK
Jul 01 16:18:14 beegfs_01 pacemaker-controld[9247]: notice: Peer beegfs_02 was terminated (off) by beegfs_01 on behalf of pacemaker-controld.9247: OK
어떤 이유로 펜싱 작업이 실패한 경우 데이터 손상을 방지하기 위해 다른 노드에서 BeeGFS 서비스를 다시 시작할 수 없습니다. 예를 들어 펜싱 장치(PDU 또는 BMC)에 액세스할 수 없거나 잘못 구성된 경우 별도로 조사하는 것이 문제입니다.
실패한 리소스 작업 해결(PCS 상태 하단에 있음)
BeeGFS 서비스를 실행하는 데 필요한 리소스에 장애가 발생하면 BeeGFS 모니터에서 페일오버가 트리거됩니다. 이 경우 의 하단에 "실패한 리소스 작업"이 나열되지 않을 수 pcs status
있으므로 방법 단계를 참조해야 "계획되지 않은 페일오버 후 페일백"합니다.
그렇지 않으면 일반적으로 "실패한 리소스 작업"이 표시되는 두 가지 시나리오만 있어야 합니다.
조사/해결 단계
시나리오 1: 펜싱 에이전트에서 일시적 또는 영구적인 문제가 감지되어 이를 다시 시작하거나 다른 노드로 이동했습니다.
일부 펜싱 에이전트는 다른 펜싱 장치보다 신뢰성이 높으며 각 펜싱 장치가 준비되도록 자체 모니터링 방법을 구현합니다. 특히 Redfish 펜싱 에이전트가 여전히 started로 표시되더라도 다음과 같은 실패한 리소스 작업을 보고하는 것으로 나타났습니다.
* fence_redfish_2_monitor_60000 on beegfs_01 'not running' (7): call=2248, status='complete', exitreason='', last-rc-change='2022-07-26 08:12:59 -05:00', queued=0ms, exec=0ms
특정 노드에서 장애가 발생한 리소스 작업을 보고하는 펜싱 에이전트가 해당 노드에서 실행되는 BeeGFS 서비스의 페일오버를 트리거하지 않습니다. 동일한 노드 또는 다른 노드에서 자동으로 다시 시작하기만 하면 됩니다.
해결 단계:
-
펜싱 에이전트가 노드 전체 또는 하위 집합에서 지속적으로 실행을 거부하는 경우 해당 노드가 펜싱 에이전트에 연결할 수 있는지 확인하고 펜싱 에이전트가 Ansible 인벤토리에서 올바르게 구성되었는지 확인합니다.
-
예를 들어, BMC(Redfish) 펜싱 에이전트가 펜싱을 담당하는 동일한 노드에서 실행되고 있고 OS 관리 및 BMC IP가 동일한 물리적 인터페이스에 있는 경우 일부 네트워크 스위치 구성에서는 두 인터페이스 간의 통신을 허용하지 않습니다(네트워크 루프 방지). 기본적으로 HA 클러스터는 펜싱을 담당하는 노드에 펜싱 에이전트를 배치하는 것을 피하려고 하지만 일부 시나리오/구성에서는 이러한 문제가 발생할 수 있습니다.
-
-
모든 문제가 해결되거나 문제가 일시적인 것으로 나타나는 경우 를 실행합니다
pcs resource cleanup
실패한 리소스 작업을 재설정합니다.
시나리오 2: BeeGFS 모니터가 문제를 감지하여 페일오버를 트리거했지만, 어떤 이유로 보조 노드에서 리소스를 시작할 수 없습니다.
펜싱이 활성화되고 리소스가 원래 노드에서 정지하는 것을 차단하지 않은 경우("대기(장애 발생 시)"의 문제 해결 섹션 참조), 보조 노드에서 리소스를 시작하는 데 다음과 같은 문제가 원인일 수 있습니다.
-
보조 노드가 이미 오프라인 상태입니다.
-
물리적 또는 논리적 구성 문제로 인해 보조 시스템에서 BeeGFS 타겟으로 사용되는 블록 볼륨에 액세스하지 못했습니다.
해결 단계:
-
실패한 리소스 작업의 각 항목에 대해 다음을 수행합니다.
-
실패한 리소스 작업이 시작 작업인지 확인합니다.
-
표시된 리소스와 실패한 리소스 작업에 지정된 노드를 기반으로 합니다.
-
노드가 지정된 리소스를 시작하지 못하는 외부 문제를 찾아 해결합니다. 예를 들어 BeeGFS IP 주소(부동 IP)를 시작하지 못한 경우 필요한 인터페이스 중 하나 이상이 온라인으로 연결되어 있고 올바른 네트워크 스위치에 케이블로 연결되어 있는지 확인합니다. BeeGFS 타겟(블록 디바이스/E-Series 볼륨)에 장애가 발생한 경우 백엔드 블록 노드에 대한 물리적 접속이 예상대로 접속되어 있는지 확인하고 블록 노드가 정상 상태인지 확인합니다.
-
-
명확한 외부 문제가 없고 이 인시던트에 대한 근본 원인이 필요한 경우, 다음 단계로 인해 근본 원인 분석(RCA)이 어렵거나 불가능할 수 있으므로 계속하기 전에 NetApp Support에서 케이스를 열어 조사하는 것이 좋습니다.
-
-
외부 문제 해결 후:
-
Anabilities inventory.yml 파일에서 작동하지 않는 노드를 모두 제거하고 전체 Ansible 플레이북을 다시 실행하여 모든 논리적 구성이 보조 노드에 올바르게 설정되었는지 확인합니다.
-
참고: 노드 상태가 양호하고 페일백할 준비가 되면 이러한 노드의 주석을 해제하고 플레이북을 다시 실행하십시오.
-
-
또는 클러스터를 수동으로 복구할 수도 있습니다.
-
다음을 사용하여 오프라인 노드를 다시 온라인 상태로 전환:
pcs cluster start <HOSTNAME>
-
다음을 사용하여 실패한 모든 리소스 작업을 지웁니다.
pcs resource cleanup
-
PCS 상태를 실행하고 모든 서비스가 예상대로 시작되는지 확인합니다.
-
필요한 경우 실행합니다
pcs resource relocate run
리소스를 원하는 노드로 다시 이동하려면(사용 가능한 경우)
-
-
일반적인 문제
BeeGFS 서비스는 요청 시 페일오버 또는 페일백을 수행하지 않습니다
-
가능성 높은 문제: *
pcs resource relocate
실행 명령이 실행되었지만 성공적으로 완료되지 않았습니다. -
확인 방법: * 실행
pcs constraint --full
ID가 인 위치 제약 조건이 있는지 확인합니다pcs-relocate-<RESOURCE>
. -
해결 방법: * 실행
pcs resource relocate clear
그런 다음 다시 실행합니다pcs constraint --full
추가 구속조건이 제거되었는지 확인합니다.
펜싱이 비활성화된 경우 PCS 상태의 노드 중 하나에 "STANDBY(ON-FAIL)"가 표시됩니다
-
가능성 높은 문제: * 심장박동기가 실패한 노드에서 모든 리소스가 중지되었는지 확인할 수 없습니다.
-
해결 방법: *
-
실행
pcs status
그리고 출력 하단에 "시작"되지 않은 리소스 또는 오류가 표시되는지 확인하고 모든 문제를 해결합니다. -
노드를 다시 온라인 상태로 전환하려면 다음을 수행합니다
pcs resource cleanup --node=<HOSTNAME>
.
-
예기치 않은 장애 조치 후 펜싱이 활성화된 경우 PCS 상태에 "started (on-fail)"가 표시됩니다
-
가능성 높은 문제: * 장애 조치를 트리거한 문제가 발생했지만 심장박동기가 노드 펜싱되었는지 확인할 수 없었습니다. 펜싱이 잘못 구성되었거나 펜싱 에이전트(예: 네트워크에서 PDU 연결이 끊어짐)에 문제가 있기 때문에 이 문제가 발생할 수 있습니다.
-
해결 방법: *
-
노드의 전원이 실제로 꺼져 있는지 확인합니다.
지정하는 노드가 실제로 꺼져 있지 않지만 클러스터 서비스 또는 리소스를 실행하는 경우 데이터 손상/클러스터 장애가 발생합니다. -
다음을 사용하여 펜싱을 수동으로 확인합니다.
pcs stonith confirm <NODE>
-
이 시점에서 서비스는 장애 조치를 완료하고 다른 정상 노드에서 다시 시작해야 합니다.
일반적인 문제 해결 작업
개별 BeeGFS 서비스를 다시 시작합니다
일반적으로 BeeGFS 서비스를 다시 시작해야 하는 경우(예: 구성 변경을 용이하게 함) Ansible 인벤토리를 업데이트하고 플레이북을 다시 실행하여 이 작업을 수행해야 합니다. 경우에 따라 전체 Playbook을 실행할 때까지 기다릴 필요 없이 로깅 수준을 변경하는 등 더 빠른 문제 해결을 위해 개별 서비스를 다시 시작하는 것이 좋습니다.
수동 변경 사항도 Ansible 인벤토리에 추가되지 않으면 다음 번에 Ansible 플레이북을 실행할 때 되돌릴 수 있습니다. |
옵션 1: 시스템 d가 재시작을 제어했습니다
BeeGFS 서비스가 새 구성으로 제대로 재시작되지 않을 위험이 있는 경우 먼저 클러스터를 유지 관리 모드로 전환하여 BeeGFS 모니터가 서비스를 감지하지 못하게 하고 원치 않는 페일오버를 트리거하는 것을 방지하십시오.
pcs property set maintenance-mode=true
필요한 경우 에서 서비스 구성을 변경합니다 /mnt/<SERVICE_ID>/_config/beegfs-.conf
(예: /mnt/meta_01_tgt_0101/metadata_config/beegfs-meta.conf
) 그런 다음 systemd를 사용하여 다시 시작합니다.
systemctl restart beegfs-*@<SERVICE_ID>.service
예: systemctl restart beegfs-meta@meta_01_tgt_0101.service
옵션 2: 심장박동기 제어 재시작
새로운 구성으로 인해 서비스가 예기치 않게 중지되거나(예: 로깅 수준 변경) 유지 보수 기간에 있고 다운타임이 염려되지 않는 경우 다시 시작할 서비스에 대해 BeeGFS 모니터를 다시 시작하면 됩니다.
pcs resource restart <SERVICE>-monitor
예를 들어 BeeGFS 관리 서비스를 다시 시작하려면 pcs resource restart mgmt-monitor