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의 더티 페이지 속도를 얻으려면 다음을 수행하십시오.

    1. 짧은 기간 동안 VM의 더티 페이지 생성 속도를 모니터링합니다.

      # virsh domdirtyrate-calc vm-name 30
    2. 모니터링이 완료되면 결과를 가져옵니다.

      # 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

절차

  1. 마이그레이션 요구 사항에 적합한 옵션과 함께 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 호스트에서 wander 3 VM을 중단하고 dest-example 호스트로 마이그레이션한 다음 wander 3-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
  2. 마이그레이션이 완료될 때까지 기다립니다. 이 프로세스는 네트워크 대역폭, 시스템 로드 및 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 페이지