목표
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시키지 않는다.
아키텍처 계약
비동기 제어 흐름
UI가 사용자 입력을 검증하고 Cloud 비동기 API를 호출한다.
API가 Plan/Run/Session/Admission/Lease를 DB에 기록하고 즉시 작업 ID를 반환한다.
Backend가 원본 및 대상 Mold Agent에 작업을 전달한다.
Agent가 FTCTL에 명령을 전달하고 접수 결과를 구조화해 반환한다.
FTCTL이 백그라운드에서 qcow2 복제, 체크포인트, artifact 및 전환 작업을 수행한다.
Backend가 Agent/FTCTL 상태·이벤트·진행률을 수집해 DB projection/cache를 갱신한다.
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
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을 훼손하지 않는 변경 범위 적용
동기화
복구 테스트
실제 전환
보호 종료와 계획 삭제
UI 전체 메뉴 검증 매트릭스
각 항목은 UI 실행, 비동기 접수, 진행 표시, 실제 부작용, terminal 이력, 재시도/정리까지 확인해야 PASS로 판정한다.
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 변경은 WSL ext4 clone에서 변경 Maven 모듈만 빌드한다. 전체 Cloud 빌드는 별도 명시적 승인 없이는 수행하지 않는다.
ablestack-qemu-exec-tools FTCTL 패키지는 GitHub Actions로 빌드한다.
UI는 /usr/share/cloudstack-management/webapp의 WEB-INF/META-INF를 보존하고 정적 asset만 갱신한다.
UI 배포 전후 WEB-INF 존재, /client/ HTTP 200, 기대 bundle marker를 검증한다.
배포 후 관리 서비스, Agent, FTCTL timer/service, 설치 스크립트 hash와 패키지 checksum을 기록한다.
기존 성공 경로 회귀 게이트
최종 완료 조건
다음 조건을 모두 만족할 때만 이 이슈를 완료한다.
13 -> 31 SharedMountPoint qcow2 단일 VM의 전체 UI 검증 매트릭스가 clean start부터 연속 PASS한다.
전체 시드 후 5개 이상의 자동 증분 Cycle이 목표 RPO 안에서 durable 완료된다.
테스트 VM과 실제 전환 VM이 원본 firmware와 장치 속성을 보존하며 정상 부팅한다.
페일오버 후 대상 VM, 페일백 후 원본 VM이 각각 정상 부팅하고 변경 데이터가 보존된다.
페일백 후 첫 정방향 복제가 불필요한 전체 시드가 아닌 증분으로 완료된다.
UI/API/DB/Agent/FTCTL/VM/qcow2 artifact 상태가 terminal 상태로 일치한다.
stale process, lock, profile, lease, session, snapshot/backing chain 또는 오류 metadata가 남지 않는다.
VMware -> ABLESTACK(RBD), ABLESTACK(RBD) -> ABLESTACK(RBD) 기존 성공 경로 회귀 테스트가 PASS한다.
설계 문서, 코드, 빌드 결과, 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
목표
ABLESTACK의 SharedMountPoint file-backed qcow2 원본 VM을 다른 ABLESTACK 사이트의 SharedMountPoint qcow2 스토리지로 보호하는 단일 VM DR 경로를 13 클러스터에서 31 클러스터 방향으로 완성한다.
원본 사이트: 12 ABLESTACK 클러스터 (
10.10.13.10, compute10.10.13.1/2/3)대상 및 제어 사이트: 31 ABLESTACK 클러스터 (
10.10.31.10, compute10.10.31.1/2/3)데이터 경로: SharedMountPoint qcow2 -> SharedMountPoint qcow2
초기 범위: 단일 VM 전체 경로 완성
제어권: DR 사이트와 DR 계획을 보유한 31 클러스터 Cloud 관리 서버
사용자 조작 및 최종 판정 기준:
http://10.10.31.10:8080/client/#/drplanCloud 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-toolsFTCTL의 설계·구현·배포·UI 검증을 함께 추적하는 마스터 이슈다.핵심 원칙
절대 회귀 금지 조건
dr_runtime.sh,dr_scheduler.sh, DR JSON schema 또는 profile lifecycle 변경 시 release tombstone 회귀 테스트를 통과해야 한다.아키텍처 계약
비동기 제어 흐름
SharedMountPoint qcow2 데이터 경로
구현 범위
DR 사이트 UI/API
DR 계획 생성/수정
동기화
복구 테스트
실제 전환
보호 종료와 계획 삭제
UI 전체 메뉴 검증 매트릭스
각 항목은 UI 실행, 비동기 접수, 진행 표시, 실제 부작용, terminal 이력, 재시도/정리까지 확인해야 PASS로 판정한다.
UI/UX 완료 조건
상태 및 데이터 정합성 완료 조건
Preflight 및 장애 검증
구현 및 검증 순서
빌드 및 배포 규칙
ablestack-qemu-exec-toolsFTCTL 패키지는 GitHub Actions로 빌드한다./usr/share/cloudstack-management/webapp의WEB-INF/META-INF를 보존하고 정적 asset만 갱신한다.WEB-INF존재,/client/HTTP 200, 기대 bundle marker를 검증한다.기존 성공 경로 회귀 게이트
최종 완료 조건
다음 조건을 모두 만족할 때만 이 이슈를 완료한다.
이슈 업데이트 규칙
관련 저장소 및 작업 브랜치
ablecloud-team/ablestack-clouddhslove/ablestack-cloudablecloud-team/ablestack-qemu-exec-toolsdhslove/ablestack-qemu-exec-toolsfeature/ftctl-cloud-integration