Skip to content

hangctl: add storage guard for multipath and nfs#15

Merged
dhslove merged 2 commits intoablecloud-team:mainfrom
dhslove:feature/hangctl-volume-diagnostics
Mar 18, 2026
Merged

hangctl: add storage guard for multipath and nfs#15
dhslove merged 2 commits intoablecloud-team:mainfrom
dhslove:feature/hangctl-volume-diagnostics

Conversation

@dhslove
Copy link
Copy Markdown
Contributor

@dhslove dhslove commented Mar 18, 2026

배경

hangctl이 가상머신 hang을 탐지하고 destroy를 수행한 뒤 ABLESTACK HA 정책에 의해 VM이 재기동되는 과정에서,
스토리지 경로 이상이 남아 있으면 VM이 PAUSE 상태에 머물며 가상화 호스트 전체에 장애를 유발할 수 있다.

특히 다음 두 경우를 선제적으로 처리할 필요가 있다.

  1. multipath 경로 이상으로 특정 LUN이 더 이상 정상 I/O를 수행하지 못하는 경우
  2. 호스트에 마운트된 NFS 서버가 단절되어 관련 mount가 hang 상태를 유발하는 경우

이번 변경의 핵심

confirmed hang VM에 대한 action 직전에 storage guard를 수행하도록 hangctl을 확장했다.

1. multipath 기반 block volume 보호

VM에 연결된 block disk를 virsh domblklist --details로 조회한 뒤,
host source를 dmsetup 기준으로 역추적하여 multipath map을 식별한다.

  • multipath map name / dm name / WWID 식별
  • /sys/block/<dm>/slaves/* 경로 상태 확인
  • 경로가 모두 상실된 것으로 판단되면
    dmsetup message <map> 0 "fail_if_no_path" 실행
  • 관련 정보는 events log에 기록

2. host-wide NFS mount 보호

VM 디스크 기준이 아니라, 호스트 전체의 NFS mount를 대상으로 점검한다.

  • findmnt -t nfs,nfs4로 host 전체 NFS mount inventory 수집
  • mount source에서 NFS server 추출
  • TCP 2049 probe로 서버 연결 여부 확인
  • 서버 단절이 확인되면 해당 mountpoint를 강제 해제
    • 우선 umount -R -f -l
    • 실패 시 umount -f -l fallback

상세 변경 사항

  • hangctl library load path에 storage_guard.sh 추가
  • confirmed incident 시작 직후 storage guard 실행
  • multipath map 식별 및 WWID 로깅 추가
  • host-wide NFS mount inventory / probe / force unmount 로직 추가
  • storage/NFS guard 관련 config default 추가
  • RPM dependency에 device-mapper, util-linux 추가
  • hangctl_cmd_run()이 호출자에게 rc를 제대로 전달하지 않던 문제 수정

기대 효과

  • VM hang 조치 전에 문제 LUN을 fail-fast 상태로 전환하여
    HA 재기동 VM이 PAUSE에 갇히는 상황을 줄일 수 있음
  • NFS 서버 단절 시 host에 남아 있는 problem mount를 강제 해제하여
    추가 hang 전파를 완화할 수 있음
  • 운영 로그에서 multipath map / dm device / WWID / path 상태를 함께 확인 가능

검증

WSL 환경에서 아래 파일에 대해 bash -n 문법 검증 수행

  • bin/ablestack_vm_hangctl.sh
  • lib/hangctl/libvirt_wrap.sh
  • lib/hangctl/config.sh
  • lib/hangctl/actions.sh
  • lib/hangctl/storage_guard.sh

주의 사항

  • 이번 변경은 hangctl action 흐름 안에서 storage guard를 수행하는 방식이다.
  • host-wide NFS를 독립 timer/process로 분리한 것은 아니며, 그 부분은 후속 작업 가능하다.
  • 기존 미추적 문서(docs/ftctl/)는 이번 PR에 포함하지 않았다.

@dhslove dhslove merged commit ffa8c1a into ablecloud-team:main Mar 18, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant