콘텐츠로 이동

클라우드 마이그레이션

AWS EC2와 PureCVisor 간 양방향 VM 이전을 지원한다.
cloud_migration.c + aws_client.c + disk_converter.c로 구성.

1. AMI → Snapshot → S3 Export (aws ec2 create-store-image-task)
2. S3 다운로드 (멀티파트)
3. qemu-img convert (VMDK/VHD → qcow2/raw)
4. virt-customize (cloud-init 제거, 네트워크 재설정)
5. virDomainDefineXML (VM 정의)
6. virDomainCreate (VM 시작)

다운타임을 최소화하는 2단계 이전:

Phase 1: 사전 동기화 (다운타임 0)
├── 소스 EC2 실행 중 상태로 디스크 스냅샷 생성
├── 스냅샷을 qcow2로 변환 + 전송
└── PureCVisor에 VM 정의 (시작하지 않음)
Phase 2: 최종 전환 (다운타임 2~5분)
├── aws ec2 stop-instances (소스 중지)
├── aws ec2 create-snapshot (최종 스냅샷)
├── aws ec2 wait snapshot-completed
├── pcv_disk_apply_delta (증분 적용)
├── virt-customize (최종 커스터마이즈)
├── virDomainCreate (VM 시작)
└── 소스 EC2 종료 확인
Terminal window
# CLI — 표준 Import
pcvctl cloud import --ami ami-0abcdef1234567890 \
--vm-name web-prod --vcpu 4 --memory 8192
# CLI — Near-Live Import
pcvctl cloud import --ami ami-0abcdef1234567890 \
--vm-name web-prod --near-live
# 최종 전환
pcvctl cloud finalize --name web-prod
# RPC
echo '{"jsonrpc":"2.0","method":"cloud.import","params":{
"ami_id":"ami-0abcdef1234567890",
"vm_name":"web-prod",
"vcpu":4,
"memory_mb":8192,
"near_live": true
},"id":"1"}' | nc -U /var/run/purecvisor/daemon.sock
1. VM 중지 + ZFS/qcow2 스냅샷
2. qemu-img convert (qcow2 → VMDK/VHD)
3. S3 업로드 (멀티파트)
4. aws ec2 import-image (AMI 등록)
5. aws ec2 run-instances (EC2 시작)
Terminal window
# CLI
pcvctl cloud export --name web-prod --region ap-northeast-2 \
--instance-type t3.large --bucket purecvisor-exports

마이그레이션 작업 상태를 SQLite에 영속 저장하여 데몬 재시작 후에도 복구 가능.

Near-Live Import의 Phase 1 완료 후 AWAITING_CUTOVER 상태에서 2시간 내에 finalize하지 않으면 자동 타임아웃.

Terminal window
# 작업 목록
pcvctl cloud jobs
# 영속 저장소 조회 (v1.0)
echo '{"jsonrpc":"2.0","method":"cloud.jobs.persist.list","params":{},"id":"1"}' \
| nc -U /var/run/purecvisor/daemon.sock
# 작업 취소
pcvctl cloud cancel --name web-prod
# RPC
echo '{"jsonrpc":"2.0","method":"cloud.jobs.list","params":{},"id":"1"}' \
| nc -U /var/run/purecvisor/daemon.sock
echo '{"jsonrpc":"2.0","method":"cloud.job.cancel","params":{
"vm_name":"web-prod"
},"id":"1"}' | nc -U /var/run/purecvisor/daemon.sock

진행 중인 작업은 GCancellable을 통해 안전하게 취소된다.
다운로드/변환 중 즉시 중단하며, 중간 파일을 정리한다.