S3lph Made – libvirt para proxmox ve migração

S3lph Made – libvirt para proxmox ve migração


Em nosso espaço de hackers, estávamos executando um hipervisor de um único nó para algumas máquinas virtuais em hardware com cerca de 15 anos de idade. Como esse sistema não era apenas antigo, mas também alto e sedento de poder, queríamos substituí-lo por um mais moderno que obtivemos recentemente.

Também queríamos substituir a solução do hipervisor: o sistema antigo estava usando o LibVirt pelos discos da VM nos volumes LVM. Para o novo sistema, queríamos mudar para o Proxmox VE e seu armazenamento do ZFS incorporado.

No entanto, essa mudança no formato de armazenamento também significava que não podíamos simplesmente copiar os discos da VM com dd ou similar, como foi necessária uma conversão pelo Proxmox. Felizmente, essa migração de armazenamento é apenas uma questão de alguns cliques na interface da Web Proxmox. Além disso, isso pode ser feito ao vivo, ou seja, enquanto uma VM está em execução.

Portanto, criamos a seguinte abordagem para migrar todas as VMs com o mínimo de tempo possível.

Abordagem de migração de armazenamento

A idéia geral era configurar o antigo hipervisor como um alvo ISCSI que expõe os volumes LVM como LUNSe configure o Proxmox para usar esse alvo ISCSI para armazenamento.

Em seguida possível necessário e inicialmente configurado essas VMs para inicializar a partir dos volumes ISCSI já existentes. Como um passo final, realizaríamos uma migração de armazenamento ao vivo para o armazenamento do ZFS no novo hipervisor.

Seguindo essa abordagem, o tempo de inatividade para cada VM deve ser apenas o tempo entre ser fechado no host antigo e ser iniciado no novo host.

ISCSI Target & Initiator Setup

Para atingir a taxa de transferência de dados necessária, adicionamos uma conexão de rede direta entre o servidor antigo e o novo que consiste em dois links de 10 Gbps em uma configuração de ligação LACP com configuração de IP estática e quadros de jumbo Ethernet ativados.

A configuração de rede relevante para /etc/network/interfaces No novo servidor parecia assim:

# The physical SFP+ interfaces
iface eno49 inet manual
iface eno50 inet manual

# The bond interface with static IP configuration
auto bond1
iface bond1 inet6 static
  address fd00::1/64
  # LACP bond configuration
  bond-slaves eno1 eno2
  bond-miimon 100
  bond-mode 802.3ad
  # Jumbo frames
  mtu 9000

O outro lado parece praticamente idêntico, além do endereço IP (lá escolhemos fd00::2) e os nomes da interface física.

Em seguida, passamos a configurar o alvo ISCSI no servidor antigo, instalando tgtd e configurar o alvo e os LUNs:

# Install and start tgtd
apt install tgt
systemctl enable --now tgt.service
# Create the iSCSI target
tgtadm --lld iscsi --mode target --op new --tid 1 -T iqn.2025-06.old:tgt1
# Permit access for the Proxmox hypervisor
tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address fd00::1
# Create LUN 1 from vm01's image
tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store /dev/vg_old/vm01
# ... repeat for additional LUNs

Observe que essa configuração não é persistida no disco; Se você deseja configurar a configuração persistente de TGTD, confira man 5 targets.conf.

A configuração do iniciador ISCSI é ainda mais simples; São apenas alguns cliques na interface da Web do Proxmox:

Adicionando armazenamento ISCSI ao Proxmox

Figura 1: Adicionando armazenamento ISCSI ao Proxmox

  1. Navegue até as configurações de armazenamento do PVE Datacenter
  2. Adicione um novo armazenamento e escolha iSCSI. Se esta opção não estiver disponível, pode ser necessário instalar o iscsi-tools pacote.
  3. Escolha um nome (ID) para o armazenamento e insira o endereço IP do alvo ISCSI para o portal. O alvo mais abaixo deve ser preenchido automaticamente com o IQN que você configurou antes.
  4. Verifique se os “ativados” e “usam LUNs diretamente” estão marcados.
  5. Clique em “Adicionar” para concluir a adição do armazenamento.

Depois que isso for concluído, você poderá ver os LUNs ISCSI como imagens VM no armazenamento ISCSI do Proxmox Node, ou como discos executando por exemplo lsblk No sistema Proxmox.

Nota lateral: impedir que os LVs sejam ativados

Se você estiver usando uma imagem de disco inteira como volume físico LVM em uma VM (em vez de ter uma tabela de partição e usar uma de suas partições como PV), o Proxmox se recusará a usar esse disco – ele nem será exibido na lista de LUNs.

Para evitar isso, você pode configurar o novo servidor para ignorar um dispositivo LVM. Para fazer isso, edite /etc/lvm/lvm.confnavegue até o fundo e adicione uma entrada ao já existente global_filter linha:

devices {
     # added by pve-manager to avoid scanning ZFS zvols and Ceph rbds
     global_filter=("r|/dev/zd.*|","r|/dev/rbd.*|","r|/dev/theVGtoIgnore.*|")
}

Você pode precisar correr systemctl restart lvm2-monitor Após essa mudança.

VM migração

Primeiro, reunimos todas as informações relevantes da configuração LibVirt da VM:

  • Número de interfaces de rede, seus endereços MAC e ID da VLAN aos quais estão anexados.
  • Número de núcleos da CPU e quantidade de RAM.
  • Número de discos e seu LV de apoio.
  • Qualquer hardware adicional conectado à VM que possa precisar ser migrado.

Em seguida, usamos essas informações para criar uma VM correspondente no Proxmox. No entanto, ainda não inicializamos a nova VM! Primeiro, precisávamos garantir que a rede da VM aparecesse no novo host.

Como o layout de hardware do VMS no Proxmox é diferente daquele no LibVirt, as interfaces de rede dentro da VM serão nomeadas de maneira diferente se essa VM estiver executando um sistema Linux moderno. Felizmente, estes são bastante previsíveis; Em VMs criadas com nossa versão Proxmox VE, 8.4.1, sem alterar o layout de hardware padrão, a primeira interface de rede sempre seria nomeada ens18seguido pela
ens19 e assim por diante para qualquer interfaces adicionais.

Isso nos permitiu alterar a configuração de rede da VM enquanto ela ainda estava em execução no antigo sistema LibVirt, juntamente com qualquer outra configuração que se baseasse no nome da interface, como as regras do firewall.

No momento, também adicionamos hardware adicional às VMs, como um console serial, ou passando pelos dispositivos USB do host.

Agora chegou a hora de desligar a VM no antigo hipervisor da LibVirt, Desative o começo na inicializaçãoe clique em “Iniciar VM” no Proxmox. Ao fazer isso em rápida sucessão, o tempo de inatividade da VM não foi muito mais longo do que uma reinicialização regular.

Em seguida, migramos o armazenamento por meio do recurso de migração de armazenamento ao vivo do Proxmox:

S3lph Made – libvirt para proxmox ve migração

Figura 2: Migração ao vivo de um disco VM no Proxmox

  1. Navegue até a guia “hardware” da VM.
  2. Selecione o disco que você deseja migrar.
  3. Em “Ação do disco”, escolha “Mover Storage”.
  4. Escolha o armazenamento de destino (local-zfs nesse caso).
  5. Clique em “Mover Disk”.

Depois que a migração foi concluída, ficamos com uma entrada adicional de “disco não utilizado” na lista de hardware. A etapa final foi remover esses discos ISCSI.

Depois que todas as VMs forem migradas, fizemos questão de remover o armazenamento ISCSI do Proxmox e assinar o host Proxmox fora do alvo iSCSI (infelizmente, o Proxmox não faz isso automaticamente ao remover o armazenamento ISCSI):

iscsiadm -m node -T iqn.2025-06.oldhost:tgt1 --portal fd00::2 -u

Prevendo erros do usuário

Inicialmente, expusemos todos os discos de VMS via ISCSI simultaneamente, mas rapidamente percebemos que – já que eles só aparecem como o número de alvo e LUN no lado Proxmox – há um risco notável de atribuir discuss acidentalmente às VMs erradas.

Portanto, em vez disso, expusemos apenas os discos de uma VM de cada vez e, depois de concluir cada migração, executou as seguintes etapas para remover os LUNs que não precisavam mais:

  1. Remova o armazenamento ISCSI na interface da Web do Proxmox.
  2. Assine o initador do ISCSI do alvo: iscsiadm -m node -T iqn.2025-06.oldhost:tgt1 --portal fd00::2 -u
  3. Remova o LUN no alvo: tgtadm --lld iscsi --mode logicalunit --op delete --tid 1 --lun 1.
  4. Configure o armazenamento ISCSI na interface da Web do Proxmox novamente.



Source link

Postagens Similares

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *