4.4.3. Gespiegelte Datenträger erstellen

Anmerkung

Zum Erstellen eines gespiegelten logischen LVM-Datenträgers in einem Cluster verwenden Sie dieselben Befehle und Prozeduren wie zum Erstellen eines gespiegelten logischen LVM-Datenträgers auf einem einzigen Knoten. Um jedoch einen gespiegelten logischen LVM-Datenträger in einem Cluster zu erzeugen, muss die Cluster-Infrastruktur ausgeführt werden und einsatzfähig sein, und der Sperrtyp in der lvm.conf-Datei muss richtig eingestellt sein, um Cluster-Sperren zu aktivieren. Ein Beispiel zur Erstellung eines gespiegelten Datenträgers in einem Cluster finden Sie in Abschnitt 5.5, »Erstellen eines gespiegelten logischen LVM-Datenträgers in einem Cluster«.
Wenn Sie versuchen, mehrere Befehle zur LVM-Mirror-Erstellung und -Konvertierung schnell hintereinander auszuführen, kann dies unter Umständen zu einem Rückstau dieser Befehle führen. Dadurch sind ggf. Zeitüberschreitungen für einige der angefragten Operationen die Folge, welche daraufhin fehlschlagen. Um dieses Problem zu vermeiden, empfehlen wir Ihnen, Befehle zur Cluster-Mirror-Erstellung von einem anderen Knoten im Cluster auszuführen.
Geben Sie beim Erstellen eines gespiegelten Datenträgers die Anzahl der Kopien, die von den Daten erstellt werden sollen mit dem Parameter -m des Befehls lvcreate an. Wird -m1 angegeben, erstellt dies einen Mirror, der aus zwei Kopien des Dateisystems besteht: einem linearen logischen Datenträger plus einer Kopie. In gleicher Weise werden zwei Mirrors durch die Angabe von -m2 erstellt, die aus drei Kopien des Dateisystems bestehen.
Der folgende Befehl erstellt einen gespiegelten logischen Datenträger mit einem einzelnen Mirror. Der Datenträger ist 50 Gigabytes groß, hat die Bezeichnung mirrorlv und wird aus der Datenträgergruppe vg0 erstellt:
lvcreate -L 50G -m1 -n mirrorlv vg0
Ein LVM-Mirror unterteilt das Gerät, das kopiert wird, in Bereiche, die typischerweise 512 KB groß sind. Mithilfe des Parameters -R des lvcreate-Befehls können Sie die Bereichsgröße in MB spezifizieren. Sie können die Standardgröße für Bereiche ändern, indem Sie die mirror_region_size-Einstellung der lvm.conf-Datei ändern.

Anmerkung

Aufgrund von Einschränkungen in der Cluster-Infrastruktur können Cluster-Mirrors größer als 1.5 TB nicht mit der standardmäßigen Bereichsgröße von 512 KB erstellt werden. Benutzer, die größere Mirrors benötigen, sollten den Standardwert für die Bereichsgröße auf einen größeren Wert ändern. Wird die Bereichsgröße nicht angepasst, werden die LVM-Erstellung und ggf. andere LVM-Befehle hängen bleiben.
Als Faustregel zum Bestimmen der Bereichsgröße für Mirrors größer als 1,5 TB nehmen Sie Ihre Mirror-Größe in Terabytes, runden diesen Wert auf die nächste Zweierpotenz auf und verwenden diesen Wert als -R-Parameter zum lvcreate-Befehl. Ist Ihre Mirror-Größe beispielsweise 1,5 TB, können Sie -R 2 angeben. Ist Ihre Mirror-Größe 3 TB, können Sie -R 4 angeben. Für eine Mirror-Größe von 5 TB können Sie -R 8 angeben.
Der folgende Befehl erzeugt einen gespiegelten logischen Datenträger mit einer Bereichsgröße von 2MB:
lvcreate -m1 -L 2T -R 2 -n mirror vol_group
LVM pflegt eine kleine Protokolldatei, in der festgehalten wird, welche Bereiche mit dem (den) Mirror(s) synchron sind. Standardmäßig wird diese Protokolldatei auf der Platte gespeichert, so dass sie über Neustarts hinaus bestehen bleibt. Alternativ können Sie angeben, dass diese Protokolldatei mit dem Parameter --mirrorlog core im Speicher behalten wird. Auf diese Weise wird kein extra Gerät zur Protokollierung benötigt, dies erfordert jedoch eine erneute Synchronisation des gesamten Mirrors bei jedem Neustart.
Der folgende Befehl erstellt einen gespiegelten logischen Datenträger aus der Datenträgergruppe bigvg. Der logische Datenträger hat die Bezeichnung ondiskmirvol und besitzt einen einzelnen Mirror. Er ist 12 MB groß und behält die Protokolldatei des Mirrors im Speicher.
# lvcreate -L 12MB -m1 --mirrorlog core -n ondiskmirvol bigvg
  Logical volume "ondiskmirvol" created
Das Mirror-Protokoll wird auf einem separaten Gerät erstellt, getrennt von den Mirrors selbst. Es ist jedoch möglich, das Mirror-Protokoll auf demselben Gerät anzulegen, auf dem sich auch eines der Mirror-Standbeine befindet, indem Sie den --alloc anywhere-Parameter des vgcreate-Befehls angeben. Dies kann sich nachteilig auf die Leistung auswirken, erlaubt Ihnen jedoch das Anlegen eines Mirrors, selbst wenn Sie nur über zwei zugrunde liegende Geräte verfügen.
Der folgende Befehl erstellt einen gespiegelten logischen Datenträger mit einem einzelnen Mirror, dessen Mirror-Protokoll sich auf demselben Gerät wie eines der Mirror-Standbeine befindet. In diesem Beispiel besteht die Datenträgergruppe vg0 aus nur zwei Geräten. Dieser Befehl erstellt einen 500 Megabytes großen Datenträger namens mirrorlv in der vg0 Datenträgergruppe.
lvcreate -L 500M -m1 -n mirrorlv -alloc anywhere vg0

Anmerkung

Bei geclusterten Mirrors ist der Cluster-Knoten mit der derzeit niedrigsten Cluster-ID für die Verwaltung des Mirror-Protokolls verantwortlich. Wenn das Gerät, welches das Cluster-Mirror-Protokoll enthält, auf einem Teilbereich des Clusters nicht verfügbar ist, kann der geclusterte Mirror somit ohne Einschränkungen weiterhin funktionieren, solange der Cluster-Knoten mit der niedrigsten ID weiterhin Zugriff auf das Mirror-Protokoll hat. Da der Mirror davon unberührt bleibt, wird auch keinerlei Aktion zur Korrektur (Reparation) veranlasst. Falls jedoch der Cluster-Knoten mit der niedrigsten ID den Zugriff auf das Mirror-Protokoll verliert, wird eine automatische Aktion ausgelöst (ungeachtet dessen, ob von anderen Knoten auf das Protokoll zugegriffen werden kann).
Um ein Mirror-Protokoll zu erstellen, das selbst wiederum gespiegelt ist, können Sie den --mirrorlog mirrored-Parameter angeben. Der folgende Befehl erstellt einen gespiegelten logischen Datenträger aus der Datenträgergruppe bigvg. Der logische Datenträger hat die Bezeichnung twologvol und besitzt einen einzelnen Mirror. Der Datenträger ist 12 MB groß, sein Mirror-Protokoll wird gespiegelt, und jede Protokolldatei wird auf einem separaten Gerät bewahrt.
# lvcreate -L 12MB -m1 --mirrorlog mirrored -n twologvol bigvg
  Logical volume "twologvol" created
Wie auch beim standardmäßigen Mirror-Protokoll ist es möglich, die redundanten Mirror-Protokolle auf demselben Gerät wie die Mirror-Standbeine zu platzieren, indem Sie den --alloc anywhere-Parameter des vgcreate-Befehls angeben. Dies kann sich nachteilig auf die Leistung auswirken, erlaubt Ihnen jedoch das Anlegen eines redundanten Mirror-Protokolls, selbst wenn Sie nicht über genügend zugrunde liegende Geräte verfügen, um jedes Protokoll auf einem separaten Gerät zu den Mirror-Standbeinen zu platzieren.
Beim Erstellen eines Mirrors werden die Abschnitte desselben synchronisiert. Bei großen Mirror-Komponenten kann der Synchronisationsprozess lange dauern. Wenn Sie einen neuen Mirror erstellen, der nicht erneuert werden muss, können Sie den Parameter nosync verwenden, um zu signalisieren, dass eine ursprüngliche Synchronisation vom ersten Gerät aus nicht erforderlich ist.
Sie können angeben, welche Geräte für die Protokolldatei des Mirrors und die Protokolldatei verwendet werden sollen und welche Extents der Geräte benutzt werden sollen. Um zu erzwingen, dass die Protokolldatei auf einer bestimmten Platte gespeichert werden soll, geben Sie genau einen Extent auf der Platte an, auf der diese platziert werden soll. LVM respektiert nicht unbedingt die Reihenfolge, in der Geräte auf der Befehlszeile aufgelistet sind. Falls ein beliebiger physischer Datenträger aufgelistet ist, ist dies der einzige Platz, auf dem die Zuweisung stattfindet. Jegliche physischen Extents in der Liste, die bereits zugewiesen sind, werden ignoriert.
Der folgende Befehl erstellt einen gespiegelten logischen Datenträger mit einem einzelnen Mirror und einem einzelnen, nicht gespiegelten Protokoll. Der Datenträger ist 500 Megabytes groß, hat die Bezeichnung mirrorlv und wird aus der Datenträgergruppe vg0 heraus erstellt. Das erste Standbein des Mirrors liegt auf dem Gerät /dev/sda1, das zweite Standbein des Mirrors befindet sich auf dem Gerät /dev/sdb1 und die Protokolldatei des Mirrors ist auf /dev/sdc1.
lvcreate -L 500M -m1 -n mirrorlv vg0 /dev/sda1 /dev/sdb1 /dev/sdc1
Der folgende Befehl erstellt einen gespiegelten logischen Datenträger mit einem einzelnen Mirror. Er ist 500 Megabytes groß, hat die Bezeichnung mirrorlv und wird aus der Datenträgergruppe vg0 heraus erstellt. Das erste Standbein des Mirrors befindet sich auf den Extents 0 bis 499 auf dem Gerät /dev/sda1, das zweite Standbein des Mirrors befindet sich auf den Extents 0 bis 499 auf dem Gerät /dev/sdb1 und die Protokolldatei des Mirrors fängt auf Extent 0 des Geräts /dev/sdc1 an. Letztere sind 1 MB Extents. Falls irgendwelche der angegebenen Extents bereits zugewiesen wurden, werden sie ignoriert.
lvcreate -L 500M -m1 -n mirrorlv vg0 /dev/sda1:0-499 /dev/sdb1:0-499 /dev/sdc1:0

Anmerkung

Ab der Red Hat Enterprise Linux 6.1 Release können Sie RAID0 (Striping) und RAID1 (Mirroring) auf einem einzigen logischen Datenträger kombinieren. Wenn Sie beim Erstellen eines logischen Datenträgers gleichzeitig die Anzahl der Mirrors (--mirrors X) sowie die Anzahl der Stripes (--stripes Y) angeben, wird dadurch ein Mirror-Gerät erstellt, dessen zugrunde liegenden Geräte gestriped sind.

4.4.3.1. Ausfallrichtlinie für gespiegelte logische Datenträger

Mithilfe der mirror_image_fault_policy und mirror_log_fault_policy-Parameter im activation-Abschnitt der lvm.conf-Datei können Sie definieren, wie ein gespiegelter logischer Datenträger sich bei einem Ausfall des Gerätes verhalten soll. Ist dieser Parameter auf remove gesetzt, versucht das System, das fehlerhafte Gerät zu entfernen und ohne es weiterzuarbeiten. Ist dieser Parameter auf allocate gesetzt, versucht das System, das fehlerhafte Gerät zu entfernen und Speicherplatz auf einem neuen Gerät als Ersatz für das ausgefallene Gerät zuzuweisen; diese Richtlinie verhält sich wie die remove-Richtlinie, falls kein passendes Gerät als Ersatz zugewiesen werden kann.
Standardmäßig ist der mirror_log_fault_policy-Parameter auf allocate festgelegt. Der Einsatz dieser Richtlinie für das Protokoll ist schnell und ermöglicht das Beibehalten des Sync-Zustands über Ausfälle und Neustarts hinweg. Wenn Sie diese Richtlinie auf remove setzen, konvertiert der Mirror beim Ausfall eines Protokollierungsgeräts zur Verwendung eines speicherinternen Protokolls und der Mirror behält seinen Sync-Zustand nicht über Ausfälle und Neustarts hinweg, so dass der gesamte Mirror neu synchronisiert werden muss.
Standardmäßig ist der mirror_image_fault_policy-Parameter auf remove festgelegt. Mit dieser Richtlinie wird der Mirror beim Ausfall eines Mirror-Images zu einem nicht-gespiegelten Gerät konvertiert, wenn es nur noch eine einzige intakte Kopie gibt. Setzen Sie diese Richtlinie auf allocate für ein Mirror-Gerät, verlangsamt dies den Prozess, da der Mirror die Geräte neu synchronisieren muss; doch die Mirror-Charakteristiken des Geräts bleiben erhalten.

Anmerkung

Wenn in einem LVM-Mirror ein Gerät ausfällt, erfolgt eine Wiederherstellung in zwei Stufen. In der ersten Stufe wird das ausgefallene Gerät entfernt. Dies kann dazu führen, das der Mirror zu einem linearen Gerät degradiert wird. Falls der mirror_log_fault_policy-Parameter auf allocate gesetzt ist, wird in der zweiten Stufe versucht, das ausgefallene Gerät zu ersetzen. Beachten Sie jedoch, dass es keine Garantie dafür gibt, dass in der zweiten Stufe Geräte gewählt werden, die bereits vom Mirror verwendet wurden, jedoch nicht vom Ausfall betroffen waren, wenn andere Geräte zur Verfügung stehen.
Informationen über die manuelle Wiederherstellung nach einem LVM-Mirror-Ausfall finden Sie in Abschnitt 6.3, »Wiederherstellung beim Ausfall eines LVM-Mirrors«.