12.6. 명령줄 인터페이스를 사용하여 가상 머신 마이그레이션
VM(가상 머신)의 현재 호스트가 적합하지 않거나 더 이상 사용할 수 없거나 호스팅 워크로드를 재배포하려는 경우 VM을 다른 KVM 호스트로 마이그레이션할 수 있습니다. 다음 절차에서는 이러한 마이그레이션의 다양한 시나리오에 대한 지침 및 예를 제공합니다.
사전 요구 사항
- 소스 호스트와 대상 호스트는 모두 KVM 하이퍼바이저를 사용합니다.
-
소스 호스트와 대상 호스트는 네트워크를 통해 서로 연결할 수 있습니다.
ping
유틸리티를 사용하여 이를 확인합니다. 대상 호스트에서 다음 포트가 열려 있는지 확인합니다.
- SSH를 사용하여 대상 호스트에 연결하려면 포트 22가 필요합니다.
- TLS를 사용하여 대상 호스트에 연결하려면 포트 16509가 필요합니다.
- TCP를 사용하여 대상 호스트에 연결하려면 포트 16514가 필요합니다.
- 메모리 및 디스크 마이그레이션 데이터를 전송하기 위해 QEMU에 포트 49152-49215가 필요합니다.
- Red Hat에서 마이그레이션을 지원하려면 소스 호스트와 대상 호스트에서 특정 운영 체제 및 시스템 유형을 사용해야 합니다. 이 경우 가상 머신 마이그레이션에 대한 지원되는 호스트를 참조하십시오.
- VM은 대상 호스트의 CPU 기능과 호환되어야 합니다. 이 경우 가상 머신 마이그레이션에 대한 호스트 CPU 호환성 확인을 참조하십시오.
마이그레이션할 VM의 디스크 이미지는 소스 호스트와 대상 호스트 둘 다에 액세스할 수 있습니다. 오프라인 마이그레이션에는 선택 사항이지만 실행 중인 VM을 마이그레이션하는 데 필요합니다. 두 호스트의 스토리지 접근성을 보장하려면 다음 중 하나를 적용해야 합니다.
- SAN(Storage Area Network) 논리 단위(LUN)를 사용하고 있습니다.
- Ceph 스토리지 클러스터를 사용하고 있습니다.
-
VM의 디스크 이미지를 대상 호스트에 복사했으며 VM을 마이그레이션할 때
--copy-storage-all
매개변수를 사용합니다. 또는 소스 VM 디스크와 동일한 형식 및 크기로 디스크 이미지를 생성 했습니다. - 디스크 이미지는 별도의 네트워크 위치에 있습니다. 이러한 공유 VM 스토리지를 설정하는 방법은 다른 호스트와 가상 머신 디스크 이미지 공유를 참조하십시오.
실행 중인 VM을 마이그레이션할 때 네트워크 대역폭은 VM이 더티 메모리 페이지를 생성하는 속도보다 커야 합니다.
실시간 마이그레이션을 시작하기 전에 VM의 더티 페이지 속도를 얻으려면 다음을 수행하십시오.
짧은 기간 동안 VM의 더티 페이지 생성 속도를 모니터링합니다.
# virsh domdirtyrate-calc example-VM 30
모니터링이 완료되면 결과를 가져옵니다.
# virsh domstats example-VM --dirtyrate Domain: 'example-VM' dirtyrate.calc_status=2 dirtyrate.calc_start_time=200942 dirtyrate.calc_period=30 dirtyrate.megabytes_per_second=2
이 예제에서 VM은 초당 2MB의 더티 메모리 페이지를 생성합니다. 대역폭이 2MB/s 이하인 네트워크에서 이러한 VM을 실시간 마이그레이션하려고 하면 VM을 일시 중지하거나 워크로드를 낮추지 않으면 실시간 마이그레이션이 진행되지 않습니다.
실시간 마이그레이션이 성공적으로 완료되도록 Red Hat은 네트워크 대역폭이 VM의 더티 페이지 생성 속도보다 훨씬 큰 것을 권장합니다.
참고calc_period
옵션의 값은 워크로드 및 더티 페이지 비율에 따라 다를 수 있습니다. 여러calc_period
값을 실험하여 환경의 더티 페이지 비율과 정렬하는 가장 적합한 기간을 결정할 수 있습니다.
- 공용 브리지에서 기존 VM을 마이그레이션하는 경우 소스 및 대상 호스트가 동일한 네트워크에 있어야 합니다. 그렇지 않으면 마이그레이션 후 VM 네트워크가 작동하지 않습니다.
VM 마이그레이션을 수행할 때 소스 호스트의
virsh
클라이언트는 여러 프로토콜 중 하나를 사용하여 대상 호스트의 libvirt 데몬에 연결할 수 있습니다. 다음 절차의 예제에서는 SSH 연결을 사용하지만 다른 연결을 선택할 수 있습니다.libvirt에서 SSH 연결을 사용하려면
virtqemud
소켓이 활성화되어 대상 호스트에서 실행 중인지 확인합니다.# systemctl enable --now virtqemud.socket
libvirt에서 TLS 연결을 사용하려면
virtproxyd-tls
소켓이 활성화되어 대상 호스트에서 실행 중인지 확인합니다.# systemctl enable --now virtproxyd-tls.socket
libvirt에서 TCP 연결을 사용하려면
virtproxyd-tcp
소켓이 활성화되어 대상 호스트에서 실행 중인지 확인합니다.# systemctl enable --now virtproxyd-tcp.socket
프로세스
마이그레이션 요구 사항에 적합한 옵션과 함께
virsh migrate
명령을 사용하십시오.다음 명령은 SSH 터널을 사용하여
example-VM-1
VM을 로컬 호스트에서example-destination
호스트의 시스템 연결로 마이그레이션합니다. VM은 마이그레이션 중에 계속 실행됩니다.# virsh migrate --persistent --live example-VM-1 qemu+ssh://example-destination/system
다음 명령을 사용하면 로컬 호스트에서 실행 중인
example-VM-2
VM의 구성을 수동으로 조정한 다음 VM을example-destination
호스트로 마이그레이션할 수 있습니다. 마이그레이션된 VM은 업데이트된 구성을 자동으로 사용합니다.# virsh dumpxml --migratable example-VM-2 > example-VM-2.xml # vi example-VM-2.xml # virsh migrate --live --persistent --xml example-VM-2.xml example-VM-2 qemu+ssh://example-destination/system
이 절차는 예를 들어 대상 호스트에서 공유 VM 스토리지에 액세스하거나 대상 호스트와 관련된 기능을 구성할 때 다른 경로를 사용해야 하는 경우에 유용할 수 있습니다.
다음 명령은
example-source
호스트에서example-VM-3
VM을 일시 중단하고,example-destination
호스트로 마이그레이션한 다음example-VM-3-alt.xml
파일에서 제공하는 조정된 XML 구성을 사용하도록 지시합니다. 마이그레이션이 완료되면libvirt
가 대상 호스트에서 VM을 다시 시작합니다.# virsh migrate example-VM-3 qemu+ssh://example-source/system qemu+ssh://example-destination/system --xml example-VM-3-alt.xml
마이그레이션 후 VM은 소스 호스트의 shut off 상태에 있으며 마이그레이션된 사본은 종료된 후 삭제됩니다.
다음은
example-source
호스트에서 종료example-VM-4
VM을 삭제하고 해당 구성을example-destination
호스트로 이동합니다.# virsh migrate --offline --persistent --undefinesource example-VM-4 qemu+ssh://example-source/system qemu+ssh://example-destination/system
이러한 유형의 마이그레이션에서는 VM의 디스크 이미지를 공유 스토리지로 이동할 필요가 없습니다. 그러나 대상 호스트에서 VM을 사용할 수 있으려면 VM의 디스크 이미지도 마이그레이션해야 합니다. 예를 들면 다음과 같습니다.
# scp root@example-source:/var/lib/libvirt/images/example-VM-4.qcow2 root@example-destination:/var/lib/libvirt/images/example-VM-4.qcow2
다음 명령은 example-VM-5 VM을 example-destination 호스트로 마이그레이션하고 다중 파일 설명자(multi-FD) 마이그레이션이라고도 하는 여러 병렬 연결을 사용합니다. 멀티 FD 마이그레이션을 사용하면 마이그레이션 프로세스에 사용 가능한 모든 네트워크 대역폭을 활용하여 마이그레이션 속도를 높일 수 있습니다.
# virsh migrate --parallel --parallel-connections 4 <example-VM-5> qemu+ssh://<example-destination>/system
이 예에서는 4개의 다중 FD 채널을 사용하여 example-VM-5 VM을 마이그레이션합니다. 사용 가능한 네트워크 대역폭의 10Gbps마다 하나의 채널을 사용하는 것이 좋습니다. 기본값은 2 채널입니다.
마이그레이션이 완료될 때까지 기다립니다. 이 프로세스는 네트워크 대역폭, 시스템 로드 및 VM 크기에 따라 다소 시간이 걸릴 수 있습니다.
virsh migrate
에--verbose
옵션을 사용하지 않으면 CLI에서 오류를 제외한 진행 상황을 표시하지 않습니다.마이그레이션이 진행 중인 경우
virsh domjobinfo
유틸리티를 사용하여 마이그레이션 통계를 표시할 수 있습니다.
검증
대상 호스트에서 사용 가능한 VM을 나열하여 VM이 마이그레이션되었는지 확인합니다.
# virsh list Id Name State ---------------------------------- 10 example-VM-1 running
마이그레이션이 여전히 실행 중인 경우 이 명령을 실행하면 VM 상태가
일시 중지됨
으로 나열됩니다.
문제 해결
-
경우에 따라 대상 호스트는 네트워크 이름 또는 CPU 유형과 같은 마이그레이션된 VM의 XML 구성의 특정 값과 호환되지 않습니다. 결과적으로 VM이 대상 호스트에서 부팅되지 않습니다. 이러한 문제를 해결하려면
virsh edit
명령을 사용하여 문제가 있는 값을 업데이트할 수 있습니다. 값을 업데이트한 후 변경 사항을 적용하려면 VM을 다시 시작해야 합니다. 실시간 마이그레이션을 완료하는 데 시간이 오래 걸리는 경우 실시간 마이그레이션을 위해 VM의 부하가 크고 메모리 페이지가 너무 많이 변경되었기 때문일 수 있습니다. 이 문제를 해결하려면 VM을 일시 중지하여 실시간이 아닌 마이그레이션으로 마이그레이션을 변경합니다.
# virsh suspend example-VM-1
추가 리소스
-
virsh migrate --help
명령 -
virsh(1)
시스템의 도움말 페이지