Qualquer pessoa que pelo menos uma vez na vida precisou transferir um contêiner OpenVZ para um servidor com virtualização KVM completa encontrou alguns problemas:
- A maior parte das informações está simplesmente desatualizada e era relevante para sistemas operacionais que já haviam ultrapassado o ciclo EOL há muito tempo.
- Informações diferentes são sempre fornecidas para sistemas operacionais diferentes e possíveis erros durante a migração nunca são considerados
- Às vezes você tem que lidar com configurações que de vez em quando não querem funcionar após a migração
Ao transferir 1 servidor, você sempre pode consertar algo na hora, mas quando transfere um cluster inteiro?
Neste artigo tentarei explicar como migrar corretamente um contêiner OpenVZ para KVM com tempo de inatividade mínimo e uma solução rápida para todos os problemas.
Um pequeno programa educacional: o que é OpenVZ e o que é KVM?
Não nos aprofundaremos na terminologia, mas diremos em termos gerais:
OpenVZ — virtualização no nível do sistema operacional, você pode até implantá-la em um micro-ondas, já que não há necessidade de instruções de CPU e tecnologias de virtualização na máquina host.
KVM - virtualização completa, utilizando todo o poder da CPU e capaz de virtualizar qualquer coisa, de qualquer forma, cortando-a longitudinalmente e transversalmente.
Ao contrário da crença popular, no meio ambiente provedores de hospedagem O OpenVZ está supervalorizado, mas o KVM não. Felizmente para este último, o KVM agora também está supervalorizado, assim como seu irmão.
O que vamos transportar?
В качестве подопытных для переноса пришлось использовать весь лес операционных систем, которые доступны на OpenVZ: CentOS (6 и 7 версии), Ubuntu (14, 16 и 18 LTS), Debian 7.
Supunha-se que a maioria dos contêineres OpenVZ já estavam executando algum tipo de LAMP, e alguns até tinham algum software muito específico. Na maioria das vezes, eram configurações com o ISPmanager, painel de controle VestaCP (e na maioria das vezes, sem atualização há anos). Os seus pedidos de transferência também devem ser tidos em conta.
A migração é realizada com preservação. Endereços IP Para um contêiner portátil, vamos assumir que o endereço IP do contêiner está preservado na máquina virtual e funcionará sem problemas.
Antes de transferir, vamos nos certificar de que temos tudo em mãos:
- Servidor OpenVZ, acesso root completo à máquina host, capacidade de parar/montar/iniciar/excluir contêineres
- Servidor KVM, acesso root completo à máquina host, com tudo o que isso implica. Presume-se que tudo já esteja configurado e pronto para funcionar.
Vamos começar a transferir
Antes de iniciarmos a transferência, vamos definir termos que ajudarão você a evitar confusões:
KVM_NODE - Máquina host KVM
VZ_NODE - Máquina host OpenVZ
IDCT - Contêiner OpenVZ
VM - Servidor virtual KVM
Preparação para migração e criação de máquinas virtuais.
Passo 1
Como precisamos mover o contêiner para algum lugar, criaremos VM com uma configuração semelhante a KVM_NODE.
Importante! Создавать VM нужно именно на той операционной системе, которая сейчас крутится на CTID. Например, если на CTID установлена Ubuntu 14, то и на VM нужно ставить Ubuntu 14. Минорные версии не важны и их несовпадение не столь критично, а вот мажорные — должны быть одинаковыми.
Após a criação da VM, iremos atualizar os pacotes no CTID e na VM (não confundir com atualização do SO - não atualizamos, apenas atualizamos os pacotes e, se chegar, a versão do SO dentro do principal versão).
Para CentOS этот процесс выглядит безобидно:
# yum clean all
# yum update -yИ не менее безобидно для Ubuntu, Debian:
# apt-get update
# apt-get upgradePasso 2
Instalar em IDCT, VZ_NODE и VM utilidade rsync:
CentOS:
# yum install rsync -yDebian, Ubuntu:
# apt-get install rsync -yNão estamos instalando mais nada lá ou ali.
Passo 3
Fazemos uma parada IDCT em VZ_NODE a equipe
vzctl stop CTIDMontando a imagem IDCT:
vzctl mount CTIDVá para a pasta /vz/root/IDCT e executar
mount --bind /dev dev && mount --bind /sys sys && mount --bind /proc proc && chroot .Na raiz, crie um arquivo /root/exclude.txt - ele conterá uma lista de exceções que não chegarão ao novo servidor
/boot
/proc
/sys
/tmp
/dev
/var/lock
/etc/fstab
/etc/mtab
/etc/resolv.conf
/etc/conf.d/net
/etc/network/interfaces
/etc/networks
/etc/sysconfig/network*
/etc/sysconfig/hwconf
/etc/sysconfig/ip6tables-config
/etc/sysconfig/kernel
/etc/hostname
/etc/HOSTNAME
/etc/hosts
/etc/modprobe*
/etc/modules
/net
/lib/modules
/etc/rc.conf
/usr/share/nova-agent*
/usr/sbin/nova-agent*
/etc/init.d/nova-agent*
/etc/ips
/etc/ipaddrpool
/etc/ips.dnsmaster
/etc/resolv.conf
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-ens3Nós nos conectamos a KVM_NODE e lançar nosso VMpara que funcione e seja acessível pela rede.
Agora tudo está pronto para transferência. Ir!
Passo 4
Ainda sob o feitiço, nós atuamos
rsync --exclude-from="/root/exclude.txt" --numeric-ids -avpogtStlHz --progress -e "ssh -T -o Compression=no -x" / root@KVM_NODE:/O comando rsync realizará a transferência, esperamos que as chaves estejam claras - a transferência é realizada preservando links simbólicos, direitos de acesso, proprietários e grupos, e a criptografia está desabilitada para maior velocidade (você poderia usar alguma cifra mais rápida, mas isso não é tão importante para esta tarefa), assim como a compactação está desativada.
Após completar o rsync, saia do chroot (pressionando ctrl+d) e execute
umount dev && umount proc && umount sys && cd .. && vzctl umount CTIDPasso 5
Vamos realizar várias etapas que nos ajudarão a iniciar a VM após a transferência do OpenVZ.
Em servidores com Systemd vamos executar um comando que nos ajudará a fazer login em um console normal, por exemplo, por meio de uma tela de servidor VNC
mv /etc/systemd/system/getty.target.wants/getty@tty2.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceEm servidores CentOS 6 и CentOS 7 Certifique-se de instalar um kernel novo:
yum install kernel-$(uname -r)O servidor pode ser carregado a partir dele, mas após a transferência ele pode parar de funcionar ou ser excluído.
No servidor CentOS 7 você precisa aplicar uma pequena correção para PolkitD, caso contrário o servidor irá travar para sempre:
getent group polkitd >/dev/null && echo -e "e[1;32mpolkitd group already existse[0m" || { groupadd -r polkitd && echo -e "e[1;33mAdded missing polkitd groupe[0m" || echo -e "e[1;31mAdding polkitd group FAILEDe[0m"; }
getent passwd polkitd >/dev/null
&& echo -e "e[1;32mpolkitd user already existse[0m" || { useradd -r -g polkitd -d / -s /sbin/nologin -c "User for polkitd" polkitd && echo -e "e[1;33mAdded missing polkitd usere[0m" || echo -e "e[1;31mAdding polkitd user FAILEDe[0m"; }
rpm -Va polkit* && echo -e "e[1;32mpolkit* rpm verification passede[0m" || { echo -e "e[1;33mResetting polkit* rpm user/group ownership & permse[0m"; rpm --setugids polkit polkit-pkla-compat; rpm --setperms polkit polkit-pkla-compat; }Em todos os servidores, se o mod_fcgid para Apache foi instalado, faremos uma pequena correção com direitos, caso contrário os sites que usam mod_fcgid irão travar com o erro 500:
chmod +s `which suexec` && apachectl restartИ последнее, пригодится для Ubuntu, Debian дистрибутивов. Эта ОС может упасть в вечный бут с ошибкой
loop muito rápido. estrangulando um pouco a execução
desagradável, mas facilmente corrigido, dependendo da versão do sistema operacional.
На Debian 9 a correção fica assim:
nós realizamos
dbus-uuidgense obtivermos um erro
/usr/local/lib/libdbus-1.so.3: versão `LIBDBUS_PRIVATE_1.10.8′ não encontrada
verifique a presença do LIBDBUS
ls -la /lib/x86_64-linux-gnu | grep dbus
libdbus-1.so.3 -> libdbus-1.so.3.14.15
libdbus-1.so.3.14.15 <-- нужен этот
libdbus-1.so.3.14.16se tudo estiver em ordem, nós fazemos
cd /lib/x86_64-linux-gnu
rm -rf libdbus-1.so.3
ln -s libdbus-1.so.3.14.15 libdbus-1.so.3Se não ajudar, tente a segunda opção.
A segunda solução para o problema com estrangulando um pouco a execução подходит практически для всех Ubuntu и Debian дистрибутивов.
Realizamos
bash -x /var/lib/dpkg/info/dbus.postinst configureE para Ubuntu 14, Debian 7 Adicionalmente realizamos:
adduser --system --home /nonexistent --no-create-home --disabled-password --group messagebus
rm -rf /etc/init.d/modules_dep.sh Что мы сделали? Восстановили messagebus, которого не хватало для запуска Debian/Ubuntu и удалили modules_dep, который пришел от OpenVZ и мешал загрузки многих модулей ядра.
Passo 6
Reinicializamos a VM, verificamos no VNC como está o carregamento e, idealmente, tudo carregará sem problemas. Embora seja possível que alguns problemas específicos apareçam após a migração, eles estão além do escopo deste artigo e serão corrigidos à medida que surgirem.
Eu espero que esta informação seja útil! 🙂
Fonte: habr.com
