Migrieren eines ausgeführten Servers zu RAID

Es war einmal ein LAMP-Server unter Ubuntu 12.04, der auf einem einzelnen Laufwerk funktionierte. Dementsprechend bestand das Problem darin, die Übertragung des Servers auf eine fehlertolerantere Konfiguration - RAID1 - sicherzustellen. Die für diesen Server verantwortlichen Kameraden installierten die zweite Festplatte, und der Rest wurde mir zugewiesen, und der Zugriff auf den Server erfolgte nur über ssh, was die Aufgabe erschwerte.

Nach der Suche wurde eine Anleitung gefunden und das Training in einer virtuellen Maschine gestartet. Als ich mit ein wenig Aufregung das gewünschte Ergebnis erzielt habe, habe ich den oben genannten Server jedoch erfolgreich auf RAID1 übertragen und die erforderlichen Schritte im Voraus ausgearbeitet. Ich habe mich entschlossen, den Artikel, in dem der Übertragungsprozess genauer beschrieben ist, auf "Habr" zu stellen.

Die Aufteilung der Scheibe war wie folgt:

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

Da der zweite Datenträger neu war, waren keine Vorgänge erforderlich, um die vorherige Partition zu löschen.

Die ersten Dinge wurden in /etc/default/grub geändert:
GRUB_TIMEOUT = 5 (verkürzen Sie das Timeout);
GRUB_RECORDFAIL_TIMEOUT = 10 (Hinzufügen, damit das System im Fehlerfall booten kann, ohne dass ein interaktives Eingreifen erforderlich ist; Timeout nach Belieben);
GRUB_CMDLINE_LINUX_DEFAULT = "bootdegraded" (stellen Sie sicher, dass Sie "bootdegraded" hinzufügen, damit das System von einem untergeordneten Array booten kann);
# GRUB_HIDDEN_TIMEOUT_QUIET = true (muss auskommentiert werden, damit das GRUB-Menü immer angezeigt wird).

Deaktivieren Sie Swap vorübergehend, setzen Sie fdisk mit fdisk (Linux raid autodetect) auf die Partition / dev / sda1 und partitionieren Sie die zweite Festplatte auf dieselbe Weise wie die erste (alle Vorgänge werden mit Superuser-Rechten ausgeführt):

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

Dann fangen wir an, unser RAID Schritt für Schritt aufzubauen:

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

Erstellen Sie einen Abschnitt unter swap :
 mkswap /dev/md0 

Wir korrigieren /etc/fstab , ersetzen die Partitionen der ersten Festplatte durch RAID-Partitionen und ändern die Zahlen in der sechsten Spalte (die Notwendigkeit, fsck zu überprüfen) in Nullen:

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

swap aktivieren:
 swapon -a 

Da unser Server derzeit auf der ersten Festplatte arbeitet, erstellen wir das RAID mit bisher nur der zweiten Festplatte:

 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 

Aktualisieren der Konfiguration von mdadm.conf :

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

initramfs so, dass Informationen über unser RAID gespeichert werden:

 update-initramfs -u 

Als nächstes beginnt der längste Prozess - die Datensynchronisation. Da unser Server einige Aufgaben ausführt, kann sich herausstellen, dass nach Abschluss der Synchronisierung ein Teil der Informationen in den Abschnitten des Arrays von den Daten auf den entsprechenden Abschnitten der Arbeitsfestplatte abweicht. Es gibt verschiedene Möglichkeiten: Sie können den Zeitpunkt der geringsten Auslastung auswählen, einen Teil der Dienste für die Dauer der Synchronisierung anhalten oder die Abweichungen vernachlässigen. Im Allgemeinen montieren und synchronisieren wir:

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

Um zu verhindern, dass die Synchronisation aufgrund einer unerwarteten Unterbrechung der SSH-Verbindung unterbrochen wird, wird die Verwendung eines Terminal-Multiplexers nicht behindert.

Nachdem Sie auf das Ende der Synchronisierung gewartet haben, hängen Sie die Systemverzeichnisse in einem neuen Stammverzeichnis an:

 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 

Wir bewegen uns auf ein neues System
 chroot /mnt 
und installieren Sie den Bootloader auf beiden Festplatten

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

Wir aktualisieren die Boot-Konfiguration, um die erforderlichen Module für RAID ( mdraid1x ) zu laden:

 update-grub 

Wir kehren zum ursprünglichen System zurück und synchronisieren gegebenenfalls die Abschnitte neu:

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

Da wir keinen physischen Zugriff auf die Konsole oder den Server haben und nicht die Festplatte auswählen können, von der das RAID gestartet werden soll, verwenden wir diesen Trick: Wir übertragen die vorbereitete Bootloader-Konfiguration auf die Festplatte, von der das System gestartet wird und die sich nicht im RAID befindet Wer kennt sich mit RAID aus? Kopieren Sie grub.cfg von der Festplatte im RAID auf unsere aktuelle Bootdiskette. Auf diese Weise kann das System mit / dev / sda starten, die Arrays jedoch mounten und von der Partition booten, die sich bereits im RAID befindet. Speichern Sie zunächst die alte Datei, die möglicherweise für die Wiederherstellung des Systems erforderlich ist, wenn das Booten von RAID nicht möglich ist, und kopieren Sie dann die Konfigurationsdatei "combat":

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

Darüber hinaus können Sie diese Dateien vergleichen und sicherstellen, dass in der neuen Bootloader-Konfigurationsdatei die Root-Partition als RAID-Partition aufgeführt ist.

Jetzt gehen wir zum wichtigsten Punkt der Arbeit über und starten neu. Sie können in der Konsole einen ping an den Server senden, damit klar wird, wann der Server wieder verfügbar ist. Wir melden uns an und stellen fest, dass alles so lief, wie wir es wollten: lsblk zeigt, dass sich die Verzeichnisse / und /home auf RAID-Partitionen befinden.

Für die Vorspeise bleibt eine einfache und angenehme Aufgabe - fügen Sie dem Array zwei Partitionen der ersten Festplatte hinzu, nachdem Sie sie mit fdisk fd gesetzt haben :

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

und schauen Sie sich dann regelmäßig an, wie die Spiegelsynchronisation abläuft:

 watch -n 5 cat /proc/mdstat 

Lassen Sie mich hier beenden, danke für Ihre Aufmerksamkeit!

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


All Articles