12.6. 명령줄 인터페이스를 사용하여 가상 머신 마이그레이션
VM(가상 머신)의 현재 호스트가 적합하지 않거나 더 이상 사용할 수 없거나 호스팅 워크로드를 재배포하려는 경우 VM을 다른 KVM 호스트로 마이그레이션할 수 있습니다. 이 섹션에서는 이러한 마이그레이션의 다양한 시나리오에 대한 지침 및 예제를 제공합니다.
사전 요구 사항
- 소스 호스트와 대상 호스트는 모두 KVM 하이퍼바이저를 사용합니다.
-
소스 호스트와 대상 호스트는 네트워크를 통해 서로 연결할 수 있습니다.
ping
유틸리티를 사용하여 이를 확인합니다. 대상 호스트에서 다음 포트가 열려 있는지 확인합니다.
- SSH를 사용하여 대상 호스트에 연결하는 데 포트 22가 필요합니다.
- TLS를 사용하여 대상 호스트에 연결하려면 포트 16509가 필요합니다.
- TCP를 사용하여 대상 호스트에 연결하려면 포트 16514가 필요합니다.
- 메모리 및 디스크 마이그레이션 데이터를 전송하려면 QEMU에 49152-49215 포트가 필요합니다.
- Red Hat에서 마이그레이션을 지원하려면 소스 호스트 및 대상 호스트에서 특정 운영 체제 및 시스템 유형을 사용해야 합니다. 이 문제가 발생하지 않도록 하려면 가상 머신 마이그레이션에 대한 지원 호스트를 참조하십시오.
- VM은 대상 호스트의 CPU 기능과 호환되어야 합니다. 가상 머신 마이그레이션에 대한 호스트 CPU 호환성 확인을 참조하십시오.
마이그레이션할 VM의 디스크 이미지는 소스 호스트와 대상 호스트에 모두 액세스할 수 있는 별도의 네트워크 위치에 있습니다. 이는 오프라인 마이그레이션의 경우 선택 사항이지만 실행 중인 VM을 마이그레이션하는 데 필요합니다.
이러한 공유 VM 스토리지를 설정하는 방법은 다른 호스트와 가상 머신 디스크 이미지 공유를 참조하십시오.
실행 중인 VM을 마이그레이션할 때 VM이 더티 메모리 페이지를 생성하는 속도보다 네트워크 대역폭이 커야 합니다.
실시간 마이그레이션을 시작하기 전에 VM의 더티 페이지 속도를 얻으려면 다음을 수행하십시오.
짧은 기간 동안 VM의 더티 페이지 생성 속도를 모니터링합니다.
# virsh domdirtyrate-calc vm-name 30
모니터링이 완료되면 결과를 가져옵니다.
# virsh domstats vm-name --dirtyrate Domain: 'vm-name' 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의 더티 페이지 생성 속도보다 큰 영향을 미칠 것을 권장합니다.
- 공용 브리지 탭 네트워크에서 기존 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 터널을 사용하여 로컬 호스트에서
dest-example
호스트의 시스템 연결로wanderer1
VM을 마이그레이션합니다. 마이그레이션 중에 VM이 계속 실행됩니다.# virsh migrate --persistent --live wanderer1 qemu+ssh://dest-example/system
다음은 로컬 호스트에서 실행 중인
wanderer2
VM의 구성을 수동으로 조정한 다음 VM을dest-example
호스트로 마이그레이션할 수 있습니다. 마이그레이션된 VM은 업데이트된 구성을 자동으로 사용합니다.# virsh dumpxml --migratable wanderer2 >wanderer2.xml # vi wanderer2.xml # virsh migrate --live --persistent --xml wanderer2.xml wanderer2 qemu+ssh://dest-example/system
다음 절차는 대상 호스트에서 다른 경로를 사용하여 공유 VM 스토리지에 액세스하거나 대상 호스트와 관련된 기능을 구성할 때 유용할 수 있습니다.
다음은
source-example
호스트에서 wander3
VM을 중단하고dest-example
호스트로 마이그레이션한 다음 wander3-alt.xml
파일에서 제공하는 조정된 XML 구성을 사용하도록 지시합니다. 마이그레이션이 완료되면libvirt
가 대상 호스트에서 VM을 다시 시작합니다.# virsh migrate wanderer3 qemu+ssh://source-example/system qemu+ssh://dest-example/system --xml wanderer3-alt.xml
마이그레이션 후 VM은 소스 호스트의 종료 상태가 되고 마이그레이션된 복사는 종료된 후 삭제됩니다.
다음은
source-example
호스트에서 종료 종료wanderer4
VM을 삭제하고 해당 구성을dest-example
호스트로 이동합니다.# virsh migrate --offline --persistent --undefinesource wanderer4 qemu+ssh://source-example/system qemu+ssh://dest-example/system
이러한 유형의 마이그레이션에서는 VM의 디스크 이미지를 공유 스토리지로 이동할 필요가 없습니다. 그러나 대상 호스트에서 VM을 사용할 수 있으려면 VM의 디스크 이미지도 마이그레이션해야 합니다. 예를 들면 다음과 같습니다.
# scp root@source-example:/var/lib/libvirt/images/wanderer4.qcow2 root@dest-example:/var/lib/libvirt/images/wanderer4.qcow2
마이그레이션이 완료될 때까지 기다립니다. 이 프로세스는 네트워크 대역폭, 시스템 로드 및 VM 크기에 따라 다소 시간이 걸릴 수 있습니다.
virsh migrate
에--verbose
옵션을 사용하지 않으면 CLI에서 오류를 제외한 진행률 지표를 표시하지 않습니다.마이그레이션이 진행 중인 경우
virsh domjobinfo
유틸리티를 사용하여 마이그레이션 통계를 표시할 수 있습니다.
검증
대상 호스트에서 사용 가능한 VM을 나열하여 VM이 마이그레이션되었는지 확인합니다.
# virsh list Id Name State ---------------------------------- 10 wanderer1 running
마이그레이션이 계속 실행 중인 경우 이 명령은 VM 상태를
일시 중지됨
으로 나열합니다.
문제 해결
-
경우에 따라 대상 호스트는 마이그레이션된 VM의 XML 구성(예: 네트워크 이름 또는 CPU 유형)의 특정 값과 호환되지 않습니다. 결과적으로 VM이 대상 호스트에서 부팅되지 않습니다. 이러한 문제를 해결하려면
virsh edit
명령을 사용하여 문제가 있는 값을 업데이트할 수 있습니다. 값을 업데이트한 후 변경 사항을 적용하려면 VM을 다시 시작해야 합니다. 실시간 마이그레이션이 완료하는 데 시간이 오래 걸리는 경우 VM이 로드되어 있고 실시간 마이그레이션이 가능한 메모리 페이지가 너무 많기 때문일 수 있습니다. 이 문제를 해결하려면 VM을 일시 중지하여 라이브가 아닌로의 마이그레이션을 변경합니다.
# virsh suspend wanderer1
추가 리소스
-
virsh migrate --help
명령 -
virsh
man 페이지