12.8. 연결된 Mellanox 가상 기능을 사용하여 가상 머신 실시간 마이그레이션
기술 프리뷰로 Mellanox 네트워킹 장치의 VF(가상 기능)를 사용하여 VM(가상 머신)을 실시간 마이그레이션할 수 있습니다. 현재는 Mellanox CX-7 네트워킹 장치를 사용하는 경우에만 가능합니다. Mellanox CX-7 네트워킹 장치의 VF는 새 mlx5_vfio_pci
드라이버를 사용하여 실시간 마이그레이션에 필요한 기능을 추가하고 libvirt
는 새 드라이버를 VF에 자동으로 바인딩합니다.
제한
현재 Mellanox 가상 기능이 연결된 VM을 실시간 마이그레이션할 때 일부 가상화 기능을 사용할 수 없습니다.
- VM의 더티 메모리 페이지 비율 계산.
- 복사 후 실시간 마이그레이션 사용.
- VM에서 vIOMMU(가상 I/O Memory Management Unit) 장치 사용.
이 기능은 RHEL 9에만 기술 프리뷰로 포함되어 있으며 이는 지원되지 않습니다.
사전 요구 사항
Mellanox CX-7 네트워킹 장치가 28.36.1010 보다 크거나 같은 펌웨어 버전이 있습니다.
펌웨어 버전에 대한 자세한 내용은 Mellanox 설명서를 참조하십시오.
mstflint
패키지는 소스 및 대상 호스트 모두에 설치됩니다.dnf install mstflint
# dnf install mstflint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Mellanox CX-7 네트워킹 장치에는
VF_MIGRATION_MODE
가MIGRATION_ENABLED
로 설정되어 있습니다.mstconfig -d <device_pci_address> query | grep -i VF_migration
# mstconfig -d <device_pci_address> query | grep -i VF_migration VF_MIGRATION_MODE MIGRATION_ENABLED(2)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 사용하여
VF_MIGRATION_MODE
를MIGRATION_ENABLED
로 설정할 수 있습니다.mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2
# mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
openvswitch
패키지는 소스 및 대상 호스트 모두에 설치됩니다.dnf install openvswitch
# dnf install openvswitch
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 호스트의 CPU 및 펌웨어는 I/O Memory Management Unit(IOMMU)을 지원합니다.
- Intel CPU를 사용하는 경우 Directed I/O(VT-d)에 대한 Intel Virtualization Technology를 지원해야 합니다.
- AMD CPU를 사용하는 경우 AMD-Vi 기능을 지원해야 합니다.
호스트 시스템은ACS(Access Control Service)를 사용하여 PCIe 토폴로지에 대한 직접 메모리 액세스(DMA) 격리를 제공합니다. 시스템 벤더에서 이를 확인합니다.
자세한 내용은 SR-IOV 구현을 위한 하드웨어 고려 사항을 참조하십시오.
VF를 생성하는 데 사용할 호스트 네트워크 인터페이스가 실행 중입니다. 예를 들어 eth1 인터페이스를 활성화하고 실행 중인지 확인하려면 다음 명령을 사용합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SR-IOV 장치 할당이 작동하려면 호스트 BIOS 및 커널에서 IOMMU 기능을 활성화해야 합니다. 이렇게 하려면 다음을 수행합니다.
Intel 호스트에서 Directed I/O(VT-d)에 대한 Intel Virtualization Technology를 활성화합니다.
intel_iommu=on
및iommu=pt
매개변수를 사용하여 GRUB 설정을 다시 생성합니다.grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
# grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 호스트를 재부팅합니다.
AMD 호스트에서 AMD-Vi를 활성화합니다.
iommu=pt
매개변수를 사용하여 GRUB 설정을 다시 생성합니다.grubby --args="iommu=pt" --update-kernel=ALL
# grubby --args="iommu=pt" --update-kernel=ALL
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 호스트를 재부팅합니다.
- 소스 호스트와 대상 호스트는 모두 KVM 하이퍼바이저를 사용합니다.
-
소스 호스트와 대상 호스트는 네트워크를 통해 서로 연결할 수 있습니다.
ping
유틸리티를 사용하여 이를 확인합니다. 대상 호스트에서 다음 포트가 열려 있습니다.
- SSH를 사용하여 대상 호스트에 연결하려면 포트 22가 필요합니다.
- TLS를 사용하여 대상 호스트에 연결하려면 포트 16509가 필요합니다.
- TCP를 사용하여 대상 호스트에 연결하려면 포트 16514가 필요합니다.
- 메모리 및 디스크 마이그레이션 데이터를 전송하기 위해 QEMU에 포트 49152-49215가 필요합니다.
- 소스 호스트와 대상 호스트는 마이그레이션을 허용하는 운영 체제 및 시스템 유형을 사용하고 있습니다. 이 경우 가상 머신 마이그레이션에 대한 지원되는 호스트를 참조하십시오.
- VM은 대상 호스트의 CPU 기능과 호환되어야 합니다. 이 경우 가상 머신 마이그레이션에 대한 호스트 CPU 호환성 확인을 참조하십시오.
마이그레이션할 VM의 디스크 이미지는 소스 호스트와 대상 호스트 둘 다에 액세스할 수 있는 별도의 네트워크 위치에 있습니다. 오프라인 마이그레이션에는 선택 사항이지만 실행 중인 VM을 마이그레이션하는 데 필요합니다.
이러한 공유 VM 스토리지를 설정하는 방법은 다른 호스트와 가상 머신 디스크 이미지 공유를 참조하십시오.
- 실행 중인 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
프로세스
소스 호스트에서 Mellanox 네트워킹 장치를
switchdev
모드로 설정합니다.devlink dev eswitch set pci/<device_pci_address> mode switchdev
# devlink dev eswitch set pci/<device_pci_address> mode switchdev
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 소스 호스트에서 Mellanox 장치에 가상 기능을 생성합니다.
echo 1 > /sys/bus/pci/devices/0000\:e1\:00.0/sriov_numvfs
# echo 1 > /sys/bus/pci/devices/0000\:e1\:00.0/sriov_numvfs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 파일 경로의
/0000\:e1\:00.0/
부분은 장치의 PCI 주소를 기반으로 합니다. 예에서는0000:e1:00.0
입니다.소스 호스트에서 드라이버에서 VF를 바인딩 해제합니다.
virsh nodedev-detach <vf_pci_address> --driver pci-stub
# virsh nodedev-detach <vf_pci_address> --driver pci-stub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 사용하여 VF의 PCI 주소를 볼 수 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 소스 호스트에서 VF의 마이그레이션 기능을 활성화합니다.
devlink port function set pci/0000:e1:00.0/1 migratable enable
# devlink port function set pci/0000:e1:00.0/1 migratable enable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서
pci/0000:e1:00.0/1
은 지정된 PCI 주소가 있는 Mellanox 장치의 첫 번째 VF를 나타냅니다.소스 호스트에서 VF 마이그레이션을 위해 OVS(Open vSwitch)를 구성합니다. Mellanox 장치가
switchdev
모드에 있는 경우 네트워크를 통해 데이터를 전송할 수 없습니다.openvswitch
서비스가 실행 중인지 확인합니다.systemctl start openvswitch
# systemctl start openvswitch
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 하드웨어 오프로드를 활성화하여 네트워킹 성능을 개선할 수 있습니다.
ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
# ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 마이그레이션 중에 네트워크 연결이 열린 상태로 유지되도록 최대 유휴 시간을 늘립니다.
ovs-vsctl set Open_vSwitch . other_config:max-idle=300000
# ovs-vsctl set Open_vSwitch . other_config:max-idle=300000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OVS 인스턴스에 새 브릿지를 만듭니다.
ovs-vsctl add-br <bridge_name>
# ovs-vsctl add-br <bridge_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openvswitch
서비스를 다시 시작합니다.systemctl restart openvswitch
# systemctl restart openvswitch
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 물리적 Mellanox 장치를 OVS 브리지에 추가합니다.
ovs-vsctl add-port <bridge_name> enp225s0np0
# ovs-vsctl add-port <bridge_name> enp225s0np0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서 <
bridge_name
>은 단계 d 에서 생성한 브리지의 이름이며enp225s0np0
은 Mellanox 장치의 네트워크 인터페이스 이름입니다.Mellanox 장치의 VF를 OVS 브리지에 추가합니다.
ovs-vsctl add-port <bridge_name> enp225s0npf0vf0
# ovs-vsctl add-port <bridge_name> enp225s0npf0vf0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서 <
bridge_name
>은 단계 d 에서 생성한 브리지의 이름이며enp225s0npf0vf0
은 VF의 네트워크 인터페이스 이름입니다.
- 대상 호스트에서 1-5단계를 반복합니다.
소스 호스트에서
mlx_vf.xml
과 같은 새 파일을 열고 VF의 다음 XML 구성을 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서는 VF의 통과를 VM의 네트워크 인터페이스로 구성합니다. MAC 주소가 고유한지 확인하고 소스 호스트에서 VF의 PCI 주소를 사용합니다.
소스 호스트에서 VF XML 파일을 VM에 연결합니다.
virsh attach-device <vm_name> mlx_vf.xml --live --config
# virsh attach-device <vm_name> mlx_vf.xml --live --config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예제에서
mlx_vf.xml
은 VF 구성이 포함된 XML 파일의 이름입니다. 장치를 실행 중인 VM에 연결하려면--live
옵션을 사용합니다.소스 호스트에서 연결된 VF를 사용하여 실행 중인 VM의 실시간 마이그레이션을 시작합니다.
virsh migrate --live --domain <vm_name> --desturi qemu+ssh://<destination_host_ip_address>/system
# virsh migrate --live --domain <vm_name> --desturi qemu+ssh://<destination_host_ip_address>/system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
마이그레이션된 VM에서 Mellanox VF의 네트워크 인터페이스 이름을 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 마이그레이션된 VM에서 Mellanox VF가 작동하는지 확인합니다. 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow