CLOUD

OpenStack Cinder RBD 강제 종료 후 Disk I/O 문제 해결 가이드

92Hoonhee 2025. 6. 16. 16:07

문제 상황

서버 강제 정전/종료 후 OpenStack 인스턴스에서 disk I/O 에러가 발생하여 인스턴스가 부팅되지 않는 현상

RBD 볼륨 상태 확인

1. RBD 이미지 정보 확인

rbd info volumes/volume-cc222ca6-3063-4436-be69-c0878e4e0020

출력 예시:

rbd image 'volume-cc222ca6-3063-4436-be69-c0878e4e0020':
        size 500 GiB in 128000 objects
        order 22 (4 MiB objects)
        snapshot_count: 0
        id: 0aa316af846cec
        block_name_prefix: rbd_data.0aa316af846cec
        format: 2
        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
        op_features: 
        flags: 
        create_timestamp: Wed Jun  4 09:29:30 2025
        access_timestamp: Mon Jun 16 14:55:05 2025
        modify_timestamp: Wed Jun  4 16:22:37 2025

2. 문제 원인 분석

주요 확인 포인트:

  • features: 활성화된 RBD 기능들
  • access_timestamp와 modify_timestamp: 마지막 접근 시간
  • exclusive-lock: 락 상태 확인

원인 분석

RBD Advanced Features와 메타데이터 불일치

강제 종료 시 다음 기능들이 문제를 일으킬 수 있음:

  • exclusive-lock: 락이 제대로 해제되지 않아 orphaned lock 상태
  • object-map: 객체 할당 맵이 실제 데이터와 불일치
  • fast-diff: 변경 블록 추적 정보가 손상
  • deep-flatten: 계층 구조 메타데이터 불일치

해결 방법

방법 1: RBD Features 비활성화 (즉시 해결)

# 문제가 되는 features 비활성화
rbd feature disable volumes/volume-{UUID} exclusive-lock
rbd feature disable volumes/volume-{UUID} object-map
rbd feature disable volumes/volume-{UUID} fast-diff
rbd feature disable volumes/volume-{UUID} deep-flatten

# 한 번에 여러 features 비활성화
rbd feature disable volumes/volume-{UUID} exclusive-lock,object-map,fast-diff,deep-flatten

방법 2: 메타데이터 복구 (근본적 해결)

# 1. Object Map 재구성
rbd object-map rebuild volumes/volume-{UUID}

# 2. Fast-diff 재구성
rbd fast-diff rebuild volumes/volume-{UUID}

# 3. 전체 스크럽 실행 (시간 소요)
rbd scrub volumes/volume-{UUID}

방법 3: 락 해제 (exclusive-lock 문제)

# 현재 락 상태 확인
rbd lock list volumes/volume-{UUID}

# 강제 락 해제
rbd lock remove volumes/volume-{UUID} {LOCK_ID} {LOCKER_ADDRESS}

# 또는 feature 비활성화로 락 무시
rbd feature disable volumes/volume-{UUID} exclusive-lock

예방 조치

1. 안전한 RBD Features 설정

# 기본 설정: layering만 활성화
rbd feature disable volumes/volume-{UUID} exclusive-lock,object-map,fast-diff,deep-flatten
rbd feature enable volumes/volume-{UUID} layering

2. Ceph 설정 조정

# /etc/ceph/ceph.conf
[global]
rbd_default_features = 1  # layering만 활성화

3. 정기적인 메타데이터 점검

# 주기적으로 실행하여 메타데이터 일관성 확인
rbd scrub volumes/volume-{UUID}

단계별 트러블슈팅 체크리스트

1단계: 즉시 복구 (긴급)

# Features 비활성화로 빠른 복구
rbd feature disable volumes/volume-{UUID} exclusive-lock,object-map,fast-diff,deep-flatten

2단계: 상태 확인

# 볼륨 상태 재확인
rbd info volumes/volume-{UUID}
rbd status volumes/volume-{UUID}

3단계: 인스턴스 재시작

# OpenStack에서 인스턴스 재시작
openstack server reboot {INSTANCE_ID}

4단계: 근본 원인 해결 (선택사항)

# 메타데이터 복구 (시간 소요)
rbd object-map rebuild volumes/volume-{UUID}
rbd fast-diff rebuild volumes/volume-{UUID}

# 복구 후 features 재활성화
rbd feature enable volumes/volume-{UUID} exclusive-lock,object-map,fast-diff

권장사항

운영 환경

  • UPS 사용: 갑작스러운 전원 차단 방지
  • 기본 features만 사용: layering만 활성화
  • 정기 점검: 월 1회 rbd scrub 실행

개발/테스트 환경

  • Advanced features 활용: 성능 향상을 위해 모든 features 사용
  • 백업 주기 단축: 메타데이터 손실에 대비

추가 명령어

디버깅용 명령어

# RBD 상태 상세 확인
rbd status volumes/volume-{UUID}

# Ceph 클러스터 상태 확인
ceph -s

# RBD 풀 상태 확인
rbd pool stats volumes

로그 확인

# Cinder 로그 확인
tail -f /var/log/kolla/cinder/cinder-volume.log

# Ceph 로그 확인
tail -f /var/log/ceph/ceph.log

이 가이드를 통해 RBD 관련 I/O 문제를 체계적으로 해결할 수 있으며, 향후 유사한 문제를 예방할 수 있습니다.