12.4. 명령줄을 사용하여 가상 머신 마이그레이션
VM(가상 머신)의 현재 호스트가 적합하지 않거나 더 이상 사용할 수 없거나 호스팅 워크로드를 재배포하려는 경우 VM을 다른 KVM 호스트로 마이그레이션할 수 있습니다. 실시간 마이그레이션 또는 오프라인 마이그레이션 을 수행할 수 있습니다. 두 시나리오 간의 차이점은 가상 머신의 작동 방식을 참조하십시오.
사전 요구 사항
- 하이퍼바이저
- 소스 호스트와 대상 호스트는 모두 KVM 하이퍼바이저를 사용합니다.
- 네트워크 연결
-
소스 호스트와 대상 호스트는 네트워크를 통해 서로 연결할 수 있습니다.
ping
유틸리티를 사용하여 이를 확인합니다. - 포트 열기
대상 호스트에서 다음 포트가 열려 있는지 확인합니다.
- SSH를 사용하여 대상 호스트에 연결하려면 포트 22가 필요합니다.
- TLS를 사용하여 대상 호스트에 연결하려면 포트 16514가 필요합니다.
- TCP를 사용하여 대상 호스트에 연결하려면 포트 16509가 필요합니다.
- 메모리 및 디스크 마이그레이션 데이터를 전송하기 위해 QEMU에 포트 49152-49215가 필요합니다.
- 호스트
- Red Hat에서 마이그레이션을 지원하려면 소스 호스트와 대상 호스트에서 특정 운영 체제 및 시스템 유형을 사용해야 합니다. 이 경우 가상 머신 마이그레이션에 대한 지원되는 호스트를 참조하십시오.
- CPU
- VM은 대상 호스트의 CPU 기능과 호환되어야 합니다. 이 경우 가상 머신 마이그레이션에 대한 호스트 CPU 호환성 확인을 참조하십시오.
- 스토리지
마이그레이션할 VM의 디스크 이미지는 소스 호스트와 대상 호스트 둘 다에 액세스할 수 있습니다. 오프라인 마이그레이션에는 선택 사항이지만 실행 중인 VM을 마이그레이션하는 데 필요합니다. 두 호스트의 스토리지 접근성을 보장하려면 다음 중 하나를 적용해야 합니다.
- SAN(Storage Area Network) 논리 단위(LUN)를 사용하고 있습니다.
- Ceph 스토리지 클러스터를 사용하고 있습니다.
-
소스 VM 디스크와 동일한 형식 및 크기로 디스크 이미지를 생성 했으며 VM을 마이그레이션할 때
--copy-storage-all
매개변수를 사용합니다. - 디스크 이미지는 별도의 네트워크 위치에 있습니다. 이러한 공유 VM 스토리지를 설정하는 방법은 다른 호스트와 가상 머신 디스크 이미지 공유를 참조하십시오.
- 네트워크 대역폭
실행 중인 VM을 마이그레이션할 때 네트워크 대역폭은 VM이 더티 메모리 페이지를 생성하는 속도보다 커야 합니다.
실시간 마이그레이션을 시작하기 전에 VM의 더티 페이지 속도를 얻으려면 다음을 수행하십시오.
짧은 기간 동안 VM의 더티 페이지 생성 속도를 모니터링합니다.
virsh domdirtyrate-calc <example_VM> 30
# virsh domdirtyrate-calc <example_VM> 30
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모니터링이 완료되면 결과를 가져옵니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예제에서 VM은 초당 2MB의 더티 메모리 페이지를 생성합니다. 대역폭이 2MB/s 이하인 네트워크에서 이러한 VM을 실시간 마이그레이션하려고 하면 VM을 일시 중지하거나 워크로드를 낮추지 않으면 실시간 마이그레이션이 진행되지 않습니다.
실시간 마이그레이션이 성공적으로 완료되었는지 확인하려면 네트워크 대역폭이 VM의 더티 페이지 생성 속도보다 훨씬 커야 합니다.
참고calc_period
옵션의 값은 워크로드 및 더티 페이지 비율에 따라 다를 수 있습니다. 여러calc_period
값을 실험하여 환경의 더티 페이지 비율과 정렬하는 가장 적합한 기간을 결정할 수 있습니다.
- 브리지 탭 네트워크 세부 정보
- 공용 브리지에서 기존 VM을 마이그레이션하는 경우 소스 및 대상 호스트가 동일한 네트워크에 있어야 합니다. 그렇지 않으면 마이그레이션 후 VM 네트워크가 작동하지 않습니다.
- 연결 프로토콜
VM 마이그레이션을 수행할 때 소스 호스트의
virsh
클라이언트는 여러 프로토콜 중 하나를 사용하여 대상 호스트의 libvirt 데몬에 연결할 수 있습니다. 다음 절차의 예제에서는 SSH 연결을 사용하지만 다른 연결을 선택할 수 있습니다.libvirt에서 SSH 연결을 사용하려면
virtqemud
소켓이 활성화되어 대상 호스트에서 실행 중인지 확인합니다.systemctl enable --now virtqemud.socket
# systemctl enable --now virtqemud.socket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow libvirt에서 TLS 연결을 사용하려면
virtproxyd-tls
소켓이 활성화되어 대상 호스트에서 실행 중인지 확인합니다.systemctl enable --now virtproxyd-tls.socket
# systemctl enable --now virtproxyd-tls.socket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow libvirt에서 TCP 연결을 사용하려면
virtproxyd-tcp
소켓이 활성화되어 대상 호스트에서 실행 중인지 확인합니다.systemctl enable --now virtproxyd-tcp.socket
# systemctl enable --now virtproxyd-tcp.socket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
한 호스트에서 다른 호스트로 VM을 마이그레이션하려면 virsh migrate
명령을 사용합니다.
오프라인 마이그레이션
다음 명령은 SSH 터널을 사용하여 로컬 호스트에서
example-destination
호스트의 시스템 연결로 종료된example-VM
VM을 마이그레이션합니다.virsh migrate --offline --persistent <example_VM> qemu+ssh://example-destination/system
# virsh migrate --offline --persistent <example_VM> qemu+ssh://example-destination/system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
실시간 마이그레이션
다음 명령은 SSH 터널을 사용하여
example-VM
VM을 로컬 호스트에서example-destination
호스트의 시스템 연결로 마이그레이션합니다. VM은 마이그레이션 중에 계속 실행됩니다.virsh migrate --live --persistent <example_VM> qemu+ssh://example-destination/system
# virsh migrate --live --persistent <example_VM> qemu+ssh://example-destination/system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 마이그레이션이 완료될 때까지 기다립니다. 이 프로세스는 네트워크 대역폭, 시스템 로드 및 VM 크기에 따라 다소 시간이 걸릴 수 있습니다.
virsh migrate
에--verbose
옵션을 사용하지 않으면 CLI에서 오류를 제외한 진행 상황을 표시하지 않습니다.마이그레이션이 진행 중인 경우
virsh domjobinfo
유틸리티를 사용하여 마이그레이션 통계를 표시할 수 있습니다.
멀티 FD 실시간 마이그레이션
실시간 마이그레이션 중에 대상 호스트에 대한 병렬 연결을 여러 개 사용할 수 있습니다. 이를 다중 파일 설명자(multi-FD) 마이그레이션이라고도 합니다. 멀티 FD 마이그레이션을 사용하면 마이그레이션 프로세스에 사용 가능한 모든 네트워크 대역폭을 활용하여 마이그레이션 속도를 높일 수 있습니다.
virsh migrate --live --persistent --parallel --parallel-connections 4 <example_VM> qemu+ssh://<example-destination>/system
# virsh migrate --live --persistent --parallel --parallel-connections 4 <example_VM> qemu+ssh://<example-destination>/system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서는 4개의 다중 FD 채널을 사용하여 VM을 <example_VM> 마이그레이션합니다. 10Gbps의 사용 가능한 네트워크 대역폭마다 하나의 채널을 사용하는 것이 좋습니다. 기본값은 2 채널입니다.
다운타임 제한 증가로 실시간 마이그레이션
실시간 마이그레이션의 안정성을 개선하기 위해 실시간 마이그레이션 중에 최대 시간(밀리초)을 지정하는
maxdowntime
매개변수를 설정할 수 있습니다. 더 큰 다운타임을 설정하면 마이그레이션이 성공적으로 완료될 수 있습니다.virsh migrate-setmaxdowntime <example_VM> <time_interval_in_milliseconds>
# virsh migrate-setmaxdowntime <example_VM> <time_interval_in_milliseconds>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Post-copy migration
VM에 메모리 공간이 큰 경우 복사 후 마이그레이션을 수행할 수 있습니다. 이 마이그레이션을 수행하여 소스 VM의 CPU 상태를 먼저 전송하고 대상 호스트에서 마이그레이션된 VM을 즉시 시작할 수 있습니다. 마이그레이션된 VM이 대상 호스트에서 이미 실행된 후 소스 VM의 메모리 페이지가 전송됩니다. 이로 인해 복사 후 마이그레이션으로 인해 마이그레이션된 VM의 다운타임이 줄어들 수 있습니다.
그러나 대상 호스트에서 실행 중인 VM은 아직 전송되지 않은 메모리 페이지에 액세스하려고 할 수 있으므로 페이지 폴트가 발생합니다. 마이그레이션 중에 페이지 폴 트가 너무 많으면 마이그레이션된 VM의 성능이 심각하게 저하될 수 있습니다.
복사 후 마이그레이션의 잠재적인 문제를 고려하여 표준 실시간 마이그레이션을 시작하고 지정된 시간 내에 실시간 마이그레이션을 완료할 수 없는 경우 복사 후 마이그레이션으로 전환하는 다음 명령을 사용하는 것이 좋습니다.
virsh migrate --live --persistent --postcopy --timeout <time_interval_in_seconds> --timeout-postcopy <example_VM> qemu+ssh://<example-destination>/system
# virsh migrate --live --persistent --postcopy --timeout <time_interval_in_seconds> --timeout-postcopy <example_VM> qemu+ssh://<example-destination>/system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
자동 통합 실시간 마이그레이션
VM이 메모리 워크로드가 많은 경우
--auto-converge
옵션을 사용할 수 있습니다. 이 옵션을 사용하면 VM의 CPU 실행 속도가 자동으로 느려집니다. 결과적으로 이 CPU 제한은 메모리 쓰기를 늦추는 데 도움이 될 수 있으므로 메모리 워크로드가 많은 VM에서도 실시간 마이그레이션이 성공할 수 있습니다.그러나 CPU 제한은 메모리 쓰기가 CPU 실행 속도와 직접 관련이 없는 워크로드를 해결하는 데 도움이 되지 않으며 실시간 마이그레이션 중에 VM 성능에 부정적인 영향을 미칠 수 있습니다.
virsh migrate --live --persistent --auto-converge <example_VM> qemu+ssh://<example-destination>/system
# virsh migrate --live --persistent --auto-converge <example_VM> qemu+ssh://<example-destination>/system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
오프라인 마이그레이션의 경우:
대상 호스트에서 사용 가능한 VM을 나열하여 VM이 성공적으로 마이그레이션되었는지 확인합니다.
virsh list --all
# virsh list --all Id Name State ---------------------------------- 10 example-VM-1 shut off
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
실시간 마이그레이션의 경우:
대상 호스트에서 사용 가능한 VM을 나열하여 대상 VM의 상태를 확인합니다.
virsh list --all
# virsh list --all Id Name State ---------------------------------- 10 example-VM-1 running
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VM의 상태가
running
으로 표시되면 마이그레이션이 완료된 것입니다. 그러나 실시간 마이그레이션이 여전히 진행 중인 경우 대상 VM의 상태가paused
로 나열됩니다.
Post-copy migration의 경우:
소스 호스트에서 사용 가능한 VM을 나열하여 소스 VM의 상태를 확인합니다.
virsh list --all
# virsh list --all Id Name State ---------------------------------- 10 example-VM-1 shut off
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 대상 호스트에서 사용 가능한 VM을 나열하여 대상 VM의 상태를 확인합니다.
virsh list --all
# virsh list --all Id Name State ---------------------------------- 10 example-VM-1 running
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 소스 VM의 상태가
shut off
로 표시되고 대상 VM의 상태가running
으로 표시되면 마이그레이션이 완료된 것입니다.