Migration d'un serveur en cours d'exécution vers RAID

Il était une fois un serveur LAMP sur Ubuntu 12.04 qui fonctionnait sur un seul disque. En conséquence, le problème s'est posé d'assurer le transfert du serveur vers une configuration plus tolérante aux pannes - RAID1. Les camarades en charge de ce serveur ont installé le deuxième disque, et le reste m'a été attribué, et l'accès au serveur se faisait uniquement via ssh, ce qui a compliqué la tâche.

Après la recherche, un guide a été trouvé et la formation a commencé sur une machine virtuelle. Lorsque j'ai atteint le résultat souhaité, avec une certaine excitation, mais j'ai néanmoins transféré avec succès le serveur susmentionné vers RAID1 et établi à l'avance les étapes nécessaires. J'ai décidé de placer l'article dans lequel le processus de transfert est décrit plus en détail sur "Habr".

La répartition du disque était la suivante:

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

Le deuxième disque étant nouveau, aucune opération n'a été nécessaire pour supprimer la partition précédente.

Les premières choses ont été modifiées dans /etc/default/grub :
GRUB_TIMEOUT = 5 (raccourcir le délai);
GRUB_RECORDFAIL_TIMEOUT = 10 (ajouter pour que le système puisse démarrer en cas d'erreur, sans nécessiter d'intervention interactive; timeout à goûter);
GRUB_CMDLINE_LINUX_DEFAULT = "bootdegraded" (assurez-vous d'ajouter "bootdegraded" afin que le système puisse démarrer à partir d'un tableau inférieur);
# GRUB_HIDDEN_TIMEOUT_QUIET = true (doit être commenté pour que le menu GRUB soit toujours affiché).

Désactivez temporairement le swap, définissez fdisk sur la partition / dev / sda1 à l'aide de fdisk (Linux raid autodetect), puis partitionnez le deuxième disque de la même manière que le premier (toutes les opérations sont effectuées avec des droits de superutilisateur):

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

Ensuite, nous commençons à construire notre RAID étape par étape:

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

Créez une section sous swap :
 mkswap /dev/md0 

Nous corrigeons /etc/fstab , en remplaçant les partitions du premier disque par des partitions RAID et en changeant les nombres dans la sixième colonne (la nécessité de vérifier fsck) en zéros:

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

Activer l' swap :
 swapon -a 

Puisque notre serveur travaille actuellement sur le premier disque, nous créons le RAID en utilisant jusqu'à présent uniquement le deuxième disque:

 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 

Mise à jour de la configuration mdadm.conf :

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

initramfs pour qu'il initramfs informations sur notre RAID:

 update-initramfs -u 

Ensuite, le processus le plus long commence - la synchronisation des données. Étant donné que notre serveur effectue certaines tâches, il peut s'avérer qu'une fois la synchronisation terminée, une partie des informations sur les sections de la baie différera des données sur les sections correspondantes du disque de travail. Il existe plusieurs options: vous pouvez choisir l'heure de la moindre charge, vous pouvez arrêter une partie des services pendant la durée de la synchronisation, ou vous pouvez négliger les écarts. En général, nous montons et synchronisons:

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

Pour éviter que la synchronisation ne soit interrompue en raison d'une interruption inattendue de la connexion ssh, l'utilisation d'un multiplexeur de terminal ne gênera pas.

Après avoir attendu la fin de la synchronisation, montez les répertoires système sur une nouvelle racine:

 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 

Nous passons à un nouveau système
 chroot /mnt 
et installez le chargeur de démarrage sur les deux disques

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

Nous mettons à jour la configuration de démarrage pour charger les modules nécessaires pour RAID ( mdraid1x ):

 update-grub 

Nous revenons au système d'origine et, si nécessaire, resynchronisons les sections:

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

Puisque nous n'avons pas d'accès physique à la console ou au serveur et que nous ne pouvons pas sélectionner le disque à partir duquel le RAID va démarrer, nous utilisons cette astuce: nous transférons la configuration du chargeur de démarrage préparée sur le disque à partir duquel le système démarre et qui n'est pas en RAID Qui connaît le RAID. Copiez grub.cfg du disque situé dans le RAID sur notre disque de démarrage actuel. Cela permettra au système de démarrer avec / dev / sda, mais de monter les baies et de continuer à démarrer à partir de la partition déjà dans le RAID. Tout d'abord, enregistrez l'ancien fichier, qui peut être nécessaire lors de la restauration du système s'il n'est pas possible de démarrer à partir du RAID, puis copiez le fichier de configuration «combat»:

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

De plus, vous pouvez comparer ces fichiers et vous assurer que dans le nouveau fichier de configuration du chargeur de démarrage, la partition racine est répertoriée comme étant sur RAID.

Nous passons maintenant à l'étape la plus importante du travail effectué et redémarrons. Vous pouvez lancer une commande ping vers le serveur dans la console afin qu'il soit clair quand le serveur sera à nouveau disponible. Nous nous lsblk et voyons que tout s'est déroulé comme nous le voulions: lsblk montre que les répertoires / et /home sont sur des partitions RAID.

Un travail facile et agréable reste pour l'apéritif - ajoutez deux partitions du premier disque à la matrice, après les avoir fdisk avec fdisk taper fd :

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

puis regardez périodiquement comment se déroule la synchronisation du miroir:

 watch -n 5 cat /proc/mdstat 

Permettez-moi de terminer ici, merci de votre attention!

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


All Articles