Skip to content

[DR][QCOW2 SharedMountPoint] 13->31 기존 단일 VM 전체 UI 경로 개발 및 검증 #922

Description

@dhslove

목표

ABLESTACK의 SharedMountPoint file-backed qcow2 원본 VM을 다른 ABLESTACK 사이트의 SharedMountPoint qcow2 스토리지로 보호하는 단일 VM DR 경로를 13 클러스터에서 31 클러스터 방향으로 완성한다.

  • 원본 사이트: 12 ABLESTACK 클러스터 (10.10.13.10, compute 10.10.13.1/2/3)

  • 대상 및 제어 사이트: 31 ABLESTACK 클러스터 (10.10.31.10, compute 10.10.31.1/2/3)

  • 데이터 경로: SharedMountPoint qcow2 -> SharedMountPoint qcow2

  • 초기 범위: 단일 VM 전체 경로 완성

  • 제어권: DR 사이트와 DR 계획을 보유한 31 클러스터 Cloud 관리 서버

  • 사용자 조작 및 최종 판정 기준: http://10.10.31.10:8080/client/#/drplan Cloud UI

  • 권위 DR 계획: rocky9-vm DR Plan (41886f03-c19e-4382-927d-89bc4d6ce8e9)

  • 원본 VM: rocky9-vm (48bdce4a-8bba-4984-80f1-46b1c92042cd)

  • 원본/대상 스토리지: 각 사이트의 SharedMountPoint 풀, /mnt/glue-gfs

  • 새 DR 사이트나 새 DR 계획을 만들지 않고 위 계획만 사용한다.

이 이슈는 Cloud UI/API/Backend/DB, Mold Agent, ablestack-qemu-exec-tools FTCTL의 설계·구현·배포·UI 검증을 함께 추적하는 마스터 이슈다.

핵심 원칙

  • 모든 사용자 작업은 UI에서 실행한다. API/DB/Agent/FTCTL 확인은 증거 수집과 원인 분석에만 사용하며 UI 검증을 대체하지 않는다.
  • UI는 비동기 Cloud API를 호출하고 전체 화면을 차단하지 않는다.
  • Cloud는 계획, 권한, VM/볼륨/네트워크 수명주기를 관리하고 FTCTL은 복제 전송, 체크포인트, 로컬 qcow2 artifact와 실행 상태를 관리한다.
  • 대상 사이트가 원본 사이트의 Cloud API/Agent를 통해 원격 작업을 통제한다. UI가 호스트나 FTCTL을 직접 호출하지 않는다.
  • 단일 VM 경로를 clean start부터 완성한 뒤에만 보호 그룹 및 다중 VM으로 확장한다.
  • Ceph mirroring은 범위에서 제외한다.
  • DB 직접 수정으로 테스트를 통과시키지 않는다. 정상 API/Agent/FTCTL 상태 투영만으로 수렴해야 한다.

절대 회귀 금지 조건

  • 검증이 완료된 VMware -> ABLESTACK(RBD) 경로의 동작과 계약을 변경하지 않는다.
  • 검증이 완료된 ABLESTACK(RBD) -> ABLESTACK(RBD) 경로의 동작과 계약을 변경하지 않는다.
  • 공유 DR runtime, scheduler, profile, Agent answer, Cloud projection을 변경하면 두 기존 경로의 baseline action contract를 재실행한다.
  • dr_runtime.sh, dr_scheduler.sh, DR JSON schema 또는 profile lifecycle 변경 시 release tombstone 회귀 테스트를 통과해야 한다.
  • qcow2 전용 동작은 명시적인 storage/path capability 분기로 격리하며 RBD 경로에 fallback시키지 않는다.

아키텍처 계약

비동기 제어 흐름

  1. UI가 사용자 입력을 검증하고 Cloud 비동기 API를 호출한다.
  2. API가 Plan/Run/Session/Admission/Lease를 DB에 기록하고 즉시 작업 ID를 반환한다.
  3. Backend가 원본 및 대상 Mold Agent에 작업을 전달한다.
  4. Agent가 FTCTL에 명령을 전달하고 접수 결과를 구조화해 반환한다.
  5. FTCTL이 백그라운드에서 qcow2 복제, 체크포인트, artifact 및 전환 작업을 수행한다.
  6. Backend가 Agent/FTCTL 상태·이벤트·진행률을 수집해 DB projection/cache를 갱신한다.
  7. UI가 polling으로 접수, 준비, 전송, VM 생성, 부팅 검증, terminal 결과를 표시한다.

SharedMountPoint qcow2 데이터 경로

  • 원본 호스트의 실제 libvirt disk source와 qcow2 backing chain을 inventory한다.
  • 대상 호스트·스토리지의 경로, 용량, 파일 시스템, 권한, SELinux context와 sparse/reflink 지원 여부를 preflight한다.
  • 대상 qcow2 파일의 임시 생성, 원자 rename, fsync 및 durable checkpoint를 명시한다.
  • 복제 중인 파일과 실행 중인 VM 디스크의 동시 쓰기 소유권을 금지한다.
  • 전체 시드와 증분 전송을 구분하고 전송 바이트, 총 바이트, 속도, 예상 잔여 시간, cycle sequence/token을 기록한다.
  • qcow2 snapshot/backing chain은 기준선 하나를 안전하게 유지하고, 성공한 다음 기준선 확정 후 이전 임시 계층을 정리한다.
  • 재시작·네트워크 단절·Agent 재접속 후에도 동일 Run/Cycle을 재조정하며 중복 Cycle이나 고아 파일을 만들지 않는다.

구현 범위

DR 사이트 UI/API

  • 13/31 ABLESTACK 사이트 등록, 수정, 삭제/종료
  • 사이트 인증정보 안전 저장 및 마스킹
  • 주기적 상태 점검과 상태 체크 이력
  • Zone, 클러스터, 호스트, SharedMountPoint 스토리지 capability 조회
  • 사이트 상태와 실제 Agent/FTCTL 도달성 정합성

DR 계획 생성/수정

  • 원본 사이트 선택 후 VM inventory를 UI 선택 항목으로 조회
  • 원본 VM의 firmware, Secure Boot, CPU, memory, NIC, disk controller/cache/iothreads, boot order 수집
  • 대상 사이트 선택 후 host, network, compute offering, qcow2 storage/path를 UI 선택 항목으로 조회
  • 디스크별 대상 파일명, offering, storage/path mapping
  • 중복 입력 제거, 도움말, placeholder, 사전 검증, 다크 모드
  • 생성 성공 시 modal 닫힘, 목록 즉시 반영, 상세 자동 갱신
  • 계획 수정 시 source identity와 baseline을 훼손하지 않는 변경 범위 적용

동기화

  • 전체 재동기화
  • RPO 기반 자동 증분 동기화 5회 이상
  • 동기화 일시 중지
  • 동기화 재개
  • 자원 대기와 재시도: 동일 Cycle 재사용, 지수 backoff, 중복 Run 방지
  • 전송 진행률과 실제 전송 바이트를 목록·상세·이력에 일관되게 표시
  • RPO 임박, 초과, DEGRADED 및 다음 실행 예정 시각 표시

복구 테스트

  • 테스트 페일오버 modal preflight
  • 최신 durable checkpoint 기반 격리된 테스트 qcow2 clone 생성
  • Cloud가 테스트 VM을 생성하고 원본 firmware/장치 속성을 보존
  • 테스트 VM 전원 및 부팅 검증 후에만 UI SUCCESS
  • 테스트 정리로 테스트 VM/임시 clone/session만 제거
  • 정리 후 자동 증분 scheduler 재개와 다음 durable Cycle 확인

실제 전환

  • 페일오버 preflight, 원본 격리/권한 확인, 최종 증분 또는 재해 모드 판정
  • 대상 VM materialization, 전원 ON, guest boot 검증, TARGET authority commit
  • 현재 운영 사이트에서 재보호 및 역방향 baseline 생성
  • 페일백 전 역방향 증분 전송과 원본 사이트 readiness 확인
  • 페일백 후 원본 VM 정상 부팅, 대상 VM 정지, SOURCE authority commit
  • 페일백 후 첫 정방향 자동 증분 durable 완료
  • 실패 시 authority commit 전 rollback 또는 명확한 복구 가능 terminal 상태

보호 종료와 계획 삭제

  • 보호 해제: 대상 VM/복제 qcow2 자원 유지
  • 보호 해제: 대상 VM/복제 qcow2 자원 삭제
  • DR 계획 삭제: 자원 유지/삭제를 사용자가 명시적으로 선택
  • 원본 사이트 파괴 상황에서 대상 VM을 새 원본으로 채택할 수 있도록 유지 경로 제공
  • 작업 취소가 가능한 단계와 불가능한 단계를 상태별로 구분
  • 종료 후 stale process, lock, profile, lease, session, snapshot/backing file이 남지 않음

UI 전체 메뉴 검증 매트릭스

각 항목은 UI 실행, 비동기 접수, 진행 표시, 실제 부작용, terminal 이력, 재시도/정리까지 확인해야 PASS로 판정한다.

  • DR 사이트 추가
  • DR 사이트 수정
  • DR 사이트 상태 조회 및 상태 이력
  • DR 사이트 삭제/종료
  • DR 계획 생성
  • DR 계획 수정
  • 전체 재동기화
  • 자동 증분 동기화 5회 이상
  • 동기화 일시 중지
  • 동기화 재개
  • 테스트 페일오버
  • 테스트 정리
  • 실제 페일오버
  • 현재 운영 사이트에서 재보호
  • 페일백
  • 보호 해제: 복제 VM/qcow2 유지
  • 보호 해제: 복제 VM/qcow2 삭제
  • DR 계획 삭제: 자원 유지
  • DR 계획 삭제: 자원 삭제
  • 실행 취소(지원 단계가 존재할 경우)

UI/UX 완료 조건

  • 목록과 상세의 상태가 동일한 authoritative Run/Cycle을 표시한다.
  • 접수 성공을 작업 완료로 표시하지 않는다.
  • 목록·상세·이력에서 현재 단계와 데이터 전송 진행률이 일치한다.
  • 버튼과 context menu는 현재 상태와 선택 개수에 맞게 활성화되며 비활성 사유를 제공한다.
  • 모든 modal은 고정 header/footer와 내부 content scroll을 사용한다.
  • 오류는 내부 JSON이나 코드만 노출하지 않고 사용자 조치와 재시도 가능 여부를 표시한다.
  • light/dark mode에서 text, alert, disabled action, table, modal의 대비와 여백을 검증한다.
  • UI 자동 갱신은 사용자 입력을 방해하지 않으며 전체 화면 skeleton으로 기존 데이터를 지우지 않는다.

상태 및 데이터 정합성 완료 조건

  • UI Plan 상태, readiness, active operation과 Cloud Run/Session/Cycle이 일치한다.
  • Agent 접수 결과와 FTCTL terminal journal이 일치한다.
  • 완료 Run은 늦은 scheduler 상태가 RUNNING/FAILED로 되돌리지 못한다.
  • 동일 sequence/cycle token의 alias Run은 terminal 처리 시 즉시 정리된다.
  • 성공 terminal에서 과거 failure metadata를 명시적으로 정리한다.
  • VM 전원, authority, scheduler, durable checkpoint, artifact ownership이 같은 상태를 나타낸다.
  • 활성 lease와 고아 Run/Session/Cycle/artifact가 남지 않는다.

Preflight 및 장애 검증

  • 원본/대상 Cloud API, Agent, FTCTL 버전 및 계약 일치
  • 원본/대상 호스트 시간 동기, 디스크 공간, inode, SharedMountPoint mount health
  • source qcow2 format/backing chain/virtual size/actual size 검증
  • target path 쓰기·rename·fsync·sparse 생성 검증
  • 네트워크 포트, bandwidth limit, timeout, retryability 검증
  • VM 실행과 복제 작업의 디스크 소유권 충돌 차단
  • Cloud/Agent/FTCTL 재시작 후 자동 재조정
  • 전송 중 네트워크 단절과 복구
  • 대상 용량 부족 시 시작 전 차단 및 UI 오류
  • 실패 보상 처리와 재실행 idempotency

구현 및 검증 순서

  • 1. 13/31 환경 inventory와 clean-state preflight, 단일 원본 VM 확정
  • 2. Cloud/qemu 상세 설계 문서 갱신 및 상호 링크
  • 3. storage capability와 qcow2 profile/schema 구현
  • 4. UI/API Plan 생성·수정과 inventory/mapping 구현
  • 5. Agent/FTCTL 전체 시드 및 durable target materialization 구현
  • 6. 기준선·증분 scheduler·RPO projection 구현
  • 7. pause/resume/full resync 구현 및 검증
  • 8. test failover/test cleanup 구현 및 검증
  • 9. failover/reprotect/failback 구현 및 검증
  • 10. release/delete retain/delete 두 경로 구현 및 검증
  • 11. 공통 회귀·동시성·재시작·dark mode 스모크 테스트
  • 12. Cloud 변경 Maven 모듈 빌드와 qemu GitHub Actions RPM 빌드
  • 13. 13/31 관리 서버·Agent·FTCTL·UI 배포 및 버전 정렬 검증
  • 14. clean plan으로 전체 UI 메뉴 연속 PASS

빌드 및 배포 규칙

  • Cloud 변경은 WSL ext4 clone에서 변경 Maven 모듈만 빌드한다. 전체 Cloud 빌드는 별도 명시적 승인 없이는 수행하지 않는다.
  • ablestack-qemu-exec-tools FTCTL 패키지는 GitHub Actions로 빌드한다.
  • UI는 /usr/share/cloudstack-management/webappWEB-INF/META-INF를 보존하고 정적 asset만 갱신한다.
  • UI 배포 전후 WEB-INF 존재, /client/ HTTP 200, 기대 bundle marker를 검증한다.
  • 배포 후 관리 서비스, Agent, FTCTL timer/service, 설치 스크립트 hash와 패키지 checksum을 기록한다.

기존 성공 경로 회귀 게이트

  • VMware -> ABLESTACK(RBD): sync/pause/resume/test failover/cleanup/failover/failback/release 계약 PASS
  • ABLESTACK(RBD) -> ABLESTACK(RBD): 동일 baseline action contract PASS
  • RBD sync는 librbd, RBD VM runtime은 KRBD 분리가 유지됨
  • qcow2 분기가 RBD URI/profile/export lifecycle을 변경하지 않음
  • release tombstone regression PASS
  • Cloud/Agent/FTCTL 재시작 후 기존 계획 상태 복구 PASS

최종 완료 조건

다음 조건을 모두 만족할 때만 이 이슈를 완료한다.

  1. 13 -> 31 SharedMountPoint qcow2 단일 VM의 전체 UI 검증 매트릭스가 clean start부터 연속 PASS한다.
  2. 전체 시드 후 5개 이상의 자동 증분 Cycle이 목표 RPO 안에서 durable 완료된다.
  3. 테스트 VM과 실제 전환 VM이 원본 firmware와 장치 속성을 보존하며 정상 부팅한다.
  4. 페일오버 후 대상 VM, 페일백 후 원본 VM이 각각 정상 부팅하고 변경 데이터가 보존된다.
  5. 페일백 후 첫 정방향 복제가 불필요한 전체 시드가 아닌 증분으로 완료된다.
  6. UI/API/DB/Agent/FTCTL/VM/qcow2 artifact 상태가 terminal 상태로 일치한다.
  7. stale process, lock, profile, lease, session, snapshot/backing chain 또는 오류 metadata가 남지 않는다.
  8. VMware -> ABLESTACK(RBD), ABLESTACK(RBD) -> ABLESTACK(RBD) 기존 성공 경로 회귀 테스트가 PASS한다.
  9. 설계 문서, 코드, 빌드 결과, 13/31 배포 상태와 테스트 증거가 최신 상태로 기록된다.

이슈 업데이트 규칙

  • 각 작업 시작 전에 이 이슈의 미완료 체크 항목과 이전 코멘트를 확인하여 동일 작업을 반복하지 않는다.
  • 각 단계 완료 시 체크리스트를 갱신하고 코멘트에 다음을 기록한다.
    • 날짜와 작업 단계
    • Cloud/qemu commit SHA 및 변경 파일
    • 설계 문서 경로
    • 테스트 명령과 결과
    • GitHub Actions run URL, artifact checksum
    • 13/31 배포 노드, 패키지 버전, 백업 위치, 서비스 상태
    • UI에서 수행한 메뉴와 결과
    • Cloud Run/Session/Cycle, Agent/FTCTL, VM/qcow2 artifact 증거
    • 실패 원인, rollback/cleanup 결과, 다음 한 단계
  • 실패를 DB 직접 수정으로 숨기지 않으며 재현 조건과 정확한 실패 단계를 기록한다.
  • 기존 성공 경로 회귀 결과가 없으면 공유 코드 변경을 완료로 간주하지 않는다.
  • 모든 완료 조건과 체크리스트가 충족된 뒤에만 이슈를 닫는다.

관련 저장소 및 작업 브랜치

  • Cloud upstream: ablecloud-team/ablestack-cloud
  • Cloud 작업 저장소: dhslove/ablestack-cloud
  • FTCTL upstream: ablecloud-team/ablestack-qemu-exec-tools
  • FTCTL 작업 저장소: dhslove/ablestack-qemu-exec-tools
  • 작업 브랜치: feature/ftctl-cloud-integration

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestpriority:high운영 안정성 또는 데이터 안전에 우선 대응이 필요한 과제type:epic여러 하위 이슈를 묶는 통합 추적 이슈

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions