Migrando um servidor em execução para RAID

Era uma vez um servidor LAMP no Ubuntu 12.04 que funcionava em uma única unidade. Consequentemente, surgiu o problema de garantir a transferência do servidor para uma configuração mais tolerante a falhas - RAID1. Os camaradas encarregados desse servidor instalaram o segundo disco e o restante foi designado a mim, e o acesso ao servidor foi apenas via ssh, o que complicou a tarefa.

Após a pesquisa, um guia foi encontrado e o treinamento começou em uma máquina virtual. Quando atingi o resultado desejado, com alguma empolgação, transferi com êxito o servidor mencionado para o RAID1 e desenhei as etapas necessárias com antecedência. Eu decidi colocar o artigo no qual o processo de transferência é descrito em mais detalhes em "Habr".

A divisão do disco foi a seguinte:

/dev/sda1 2048 1574911 786432 swap /dev/sda2 * 1574912 16254975 7340032 / /dev/sda3 16254976 31457279 7601152 /home 

Como o segundo disco era novo, nenhuma operação foi necessária para excluir a partição anterior.

As primeiras coisas foram alteradas em /etc/default/grub :
GRUB_TIMEOUT = 5 (diminua o tempo limite);
GRUB_RECORDFAIL_TIMEOUT = 10 (adicione para que o sistema possa inicializar no caso de um erro, sem exigir intervenção interativa; tempo limite a gosto);
GRUB_CMDLINE_LINUX_DEFAULT = "bootdegraded" (certifique-se de adicionar "bootdegraded" para que o sistema possa inicializar a partir de uma matriz inferior);
# GRUB_HIDDEN_TIMEOUT_QUIET = true (deve ser comentado para que o menu GRUB seja sempre exibido).

Desative temporariamente a troca, configure o fdisk para a partição / dev / sda1 usando o fdisk (detecção automática de raide do Linux) e particione o segundo disco da mesma forma que o primeiro (todas as operações são executadas com direitos de superusuário):

 sfdisk –d /dev/sda | sfdisk –f /dev/sdb 

Então começamos a construir nosso RAID passo a passo:

 mdadm --create --verbose /dev/md0 --raid-devices=2 --level=1 --metadata=1.2 /dev/sda1 /dev/sdb1 

Crie uma seção em swap :
 mkswap /dev/md0 

/etc/fstab , substituindo as partições do primeiro disco pelas partições RAID e alterando os números na sexta coluna (a necessidade de verificar o fsck) para zeros:

 /dev/sda1 → /dev/md0 # SWAP /dev/sda2 → /dev/md1 # / /dev/sda3 → /dev/md2 # /home 

Ative a swap :
 swapon -a 

Como nosso servidor está atualmente trabalhando no primeiro disco, criamos o RAID usando até o momento apenas o segundo disco:

 mdadm --create --verbose /dev/md1 --raid-devices=2 --level=1 --metadata=1.2 missing /dev/sdb2 mkfs.ext4 /dev/md1 mdadm --create --verbose /dev/md2 --raid-devices=2 --level=1 --metadata=1.2 missing /dev/sdb3 mkfs.ext4 /dev/md2 

Atualizando a configuração do mdadm.conf :

 mdadm --examine --scan >> /etc/mdadm/mdadm.conf 

initramfs para que ele initramfs informações sobre o nosso RAID:

 update-initramfs -u 

Em seguida, o processo mais longo começa - sincronização de dados. Como nosso servidor executa algumas tarefas, pode ser que, após a conclusão da sincronização, parte das informações nas seções da matriz sejam diferentes dos dados nas seções correspondentes do disco de trabalho. Existem várias opções: você pode escolher o horário de menor carregamento, interromper parte dos serviços pela duração da sincronização ou negligenciar as discrepâncias. Em geral, montamos e sincronizamos:

 mount /dev/md1 /mnt/ && [tmux|screen] rsync -axu / /mnt mount /dev/md2 /mnt/home && [tmux|screen] rsync -axu /home/ /mnt/home 

Para impedir que a sincronização seja interrompida devido a uma interrupção inesperada na conexão ssh, o uso de um multiplexador de terminal não prejudicará.

Após aguardar o final da sincronização, monte os diretórios do sistema em uma nova raiz:

 mount --bind /proc /mnt/proc mount --bind /dev /mnt/dev mount --bind /var /mnt/var mount --bind /run /mnt/run mount --bind /sys /mnt/sys 

Estamos mudando para um novo sistema
 chroot /mnt 
e instale o carregador de inicialização nos dois discos

 grub-install -–recheck /dev/sda grub-install --recheck /dev/sdb 

Atualizamos a configuração de inicialização para carregar os módulos necessários para o RAID ( mdraid1x ):

 update-grub 

Retornamos ao sistema original e, se necessário, sincronizamos novamente as seções:

 [tmux|screen] rsync -axu / /mnt [tmux|screen] rsync -axu /home/ /mnt/home 

Como não temos acesso físico ao console ou ao servidor e não podemos selecionar o disco no qual o RAID inicializará, usamos este truque: transferimos a configuração do carregador de inicialização preparado para o disco no qual o sistema inicia e que não está no RAID Quem sabe sobre RAID. Copie o grub.cfg do disco localizado no RAID para o nosso disco de inicialização atual. Isso permitirá que o sistema inicie com / dev / sda, mas monte as matrizes e continue a inicializar a partir da partição que já está no RAID. Primeiro, salve o arquivo antigo, que pode ser necessário ao restaurar o sistema, se não for possível inicializar a partir do RAID, e depois copie o arquivo de configuração "combat":

 cp -p /boot/grub/grub.cfg /boot/grub/grub.old cp -p /mnt/boot/grub/grub.cfg /boot/grub/grub.cfg 

Além disso, você pode comparar esses arquivos e garantir que, no novo arquivo de configuração do carregador de inicialização, a partição raiz esteja listada como RAID.

Agora vamos para a etapa mais importante do trabalho realizado e reinicializamos. Você pode iniciar o ping no servidor no console para que fique claro quando o servidor estará disponível novamente. lsblk login e vemos que tudo saiu como desejávamos: lsblk mostra que os diretórios / e /home estão em partições RAID.

Um trabalho fácil e agradável permanece para o aperitivo - adicione duas partições do primeiro disco à matriz, depois de configurá-las com fdisk digitar fd :

 mdadm /dev/md1 --add /dev/sda2 mdadm /dev/md2 --add /dev/sda3 

e observe periodicamente como está a sincronização do espelho:

 watch -n 5 cat /proc/mdstat 

Deixe-me terminar aqui, obrigado por sua atenção!

Source: https://habr.com/ru/post/pt481818/


All Articles