HPC 와 Slurm · 장애 진단 · 실습
깨진 클러스터 진단하기
목표
깨진 Slurm 설정과 로그를 받아 원인 네 개를 각각 특정하고, 고치고, 복구 절차와 RCA 보고서를 남깁니다.
왜 중요한가
Slurm 장애의 특징은 로그 한 줄이 원인을 다 말해 준다는 것입니다. 문제는 그 한 줄을 찾는 순서를 모르면 며칠이 걸린다는 점입니다. 순서는 정해져 있습니다 — sinfo 로 범위를 좁히고, slurmctld.log 에서 이유를 읽고, 설정 파일에서 그 줄을 확인합니다.
특히 munge 오류의 두 종류를 구분하는 것이 중요합니다. Expired credential 은 시계 문제라 NTP 를 보고, Invalid credential 은 키 문제라 키 파일을 비교합니다. 완전히 다른 대응입니다.
픽스처는 /opt/fixtures/slurm/broken/ 에 있습니다. slurm.conf, gres.conf, slurmctld.log, sinfo.txt 네 파일입니다.
단계
1. /root/rca 디렉터리를 만들고, sinfo.txt 에서 정상(idle/alloc/mix)이 아닌 상태의 서로 다른 노드 이름을 한 줄에 하나씩 /root/rca/bad-nodes.txt 에 적으세요.
2. 노드 정의 불일치를 찾아 /root/rca/node.txt 에 두 줄로 적으세요.NODE=<문제 노드 이름> / KEY=<불일치가 난 설정 키 이름>
3. munge 인증 실패를 특정해 /root/rca/munge.txt 에 두 줄로 적으세요.KIND=<expired|invalid> / CAUSE=<clock|key>
4. 파티션이 참조하지만 정의되지 않은 노드 이름을 한 줄로 /root/rca/partition.txt 에 적으세요.
5. GRES 개수 불일치를 /root/rca/gres.txt 에 두 줄로 적으세요.CONFIGURED=<slurm.conf 가 선언한 그 노드의 GPU 수> / REPORTED=<gres.conf 가 실제로 가리키는 장치 수>
6. 네 가지 문제를 모두 고친 /root/rca/slurm.conf 와 /root/rca/gres.conf 를 제출하세요. 문제 노드의 CPUs 를 실제와 맞추고, 파티션의 노드 목록에서 없는 노드를 빼고, GRES 개수를 일치시키세요. (munge 는 설정 파일이 아니라 운영 문제이므로 이 파일에서는 다루지 않습니다.)
7. /root/rca/recovery.sh 를 작성하세요. 다음 두 종류의 명령이 순서대로 들어 있어야 합니다.
- 설정 변경을 반영하는 명령 (
scontrol reconfigure) - 빠진 노드를 복귀시키는 명령 (
scontrol update NodeName=... State=RESUME)
8. /root/rca/report.txt 를 다음 6줄로 만드세요.CAUSE1=cpus-mismatch / CAUSE2=munge-<3번의 CAUSE 값> / CAUSE3=unknown-node / CAUSE4=gres-count / BAD_NODES=<1번 파일의 줄 수> / FIXED=yes
참고
- 로그에서 오류만 보려면
grep -i error /opt/fixtures/slurm/broken/slurmctld.log가 편합니다. - 범위 표기
gpu-node[01-04]는 노드 4개를 뜻합니다. 전개해서 비교하세요. - 6번 파일은 앞 실습의
validate.sh로 검사해 보면 좋습니다. - 흔한 실수 1: 1번에서 같은 노드가 여러 파티션에 나와 중복으로 세는 경우. 서로 다른 노드 이름만 적으세요.
- 흔한 실수 2: 6번에서 GRES 개수를 gres.conf 쪽으로 늘리는 경우. 실제 장치가 4개이므로 slurm.conf 쪽을 4로 맞추는 것이 맞습니다.
단계 8개
- 증상 정리
- 노드 정의 불일치 찾기
- 인증 실패 특정
- 정의되지 않은 노드 참조
- GRES 개수 불일치
- 수정본 제출
- 복구 절차 작성
- RCA 보고서