AIX LVM: Mechanik von migratepv (Part II)

Mit dem AIX LVM Kommando migratepv können Physical Volumes in Spiegel-Kopien von Logical Volumes ausgetauscht werden. Im zweiten Teil wollen wir uns genauer anschauen wie das Kommando migratepv im Falle von gespiegelten Logical Volumes mit 3 Kopien arbeitet.

3. Fall: gespiegeltes Logical Volume (3 Kopien)

Bei einem gespiegelten Logical Volume mit 3 Spiegel-Kopien ist es nicht möglich, temporär, eine weitere Spiegel-Kopie hinzuzufügen. (LVM unterstützt nur maximal 3 Spiegel-Kopien). Daher muß die Spiegel-Kopie welche das Quell Physical Volume enthält entfernt werden, bevor dann das Ziel Physical Volume in Form einer Spiegel-Kopie hinzugefügt werden kann.

Nachdem eine Spiegel-Kopie entfernt wurde, bleiben 2 Spiegel-Kopien übrig. Es gibt hier 3 verschiedene Varianten die dritte Kopie hinzuzufügen (wie auch bei migratelp):

    • Variante 1: Einfügen der dritten Spiegel-Kopie vorne, d.h. Kopie 2 wird zu Kopie 3 und die Kopie 1 zur Kopie 2. Die neue Kopie wird als Kopie 1 eingefügt.
    • Variante 2: Einfügen der dritten Spiegel-Kopie in der Mitte, d.h. Kopie 2 wird zu Kopie 3 und die neue Kopie wird als Kopie 2 eingefügt.
    • Variante 3: Anhängen der dritten Spiegel-Kopie hinten als Kopie 3.

Welche Variante von migratepv verwendet wird, hängt davon ab in welchen Spiegel-Kopien das Quell Physical Volume verwendet wird.

Das Quell Physical Volume wird verwendet in:

    • Ausschließlich in der Spiegel-Kopie 1, dann wird die Variante 1 verwendet.
    • Ausschließlich in der Spiegel-Kopie 2, dann wird die Variante 2 verwendet.
    • Ausschließlich in der Spiegel-Kopie 3, dann wird die Variante 3 verwendet.
    • In mehreren Spiegel-Kopien (z.B. weil Strictness nicht auf super-strict gesetzt ist): entscheidend ist hier die höchste Logical Partition die das Quell Physical Volume verwendet. Wird für diese Logical Partition das Quell Physical Volume in der Spiegel-Kopie 1 verwendet, dann wird die Variante 1 verwendet, wird das Quell Physical Volume in der Spiegel-Kopie 2 verwendet, dann wird die Variante 2 verwendet und wird das Quell Physical Volume in der Spiegel-Kopie 3 verwendet, dann wird die Variante 3 verwendet!

Um die Arbeitsweise von migratepv, für den interessanten Fall das Physical Volumes in mehreren Spiegel-Kopien verwendet werden, zu illustrieren erzeugen wir ein kleines Logical Volume mit den folgenden Mapping Files:

# cat bad_mirror3_cp1.map
hdisk10:1-2
hdisk14:1-2
hdisk17:1-2
hdisk11:5-6
hdisk10:3-4
# mklv —m bad_mirror3_cp1.map vg00 10
lv00
# cat bad_mirror3_cp2.map
hdisk13:1-2
hdisk11:1-2
hdisk13:3-4
hdisk14:3-4
hdisk13:5-6
# mklvcopy —m bad_mirror3_cp2.map lv00 2
# cat bad_mirror3_cp3.map
hdisk16:1-2
hdisk16:3-4
hdisk11:3-4
hdisk17:3-4
hdisk16:5-6
# mklvcopy —m bad_mirror3_cp3.map lv00 3
# syncvg -l lv00
#

Das Logical Volume sieht dann wie folgt aus:

# lslv -m lv00
lv00:N/A
LP    PP1  PV1          PP2  PV2          PP3  PV3
0001  0001 hdisk10      0001 hdisk13      0001 hdisk16          
0002  0002 hdisk10      0002 hdisk13      0002 hdisk16          
0003  0001 hdisk14      0001 hdisk11      0003 hdisk16          
0004  0002 hdisk14      0002 hdisk11      0004 hdisk16          
0005  0001 hdisk17      0003 hdisk13      0003 hdisk11          
0006  0002 hdisk17      0004 hdisk13      0004 hdisk11          
0007  0005 hdisk11      0003 hdisk14      0003 hdisk17          
0008  0006 hdisk11      0004 hdisk14      0004 hdisk17          
0009  0003 hdisk10      0005 hdisk13      0005 hdisk16          
0010  0004 hdisk10      0006 hdisk13      0006 hdisk16        
#

Die hdisk11 (DC01) wird in allen 3 Spiegel-Kopien verwendet. Die hdisk14 (DC02) und die hdisk17 (DC03) werden in 2 Spiegel-Kopien verwendet. Ziel wäre in der Spiegel-Kopie 1 nur Physical Volumes aus DC01 zu verwenden, in Spiegel-Kopie 2 nur Physical Volumes aus DC02 und in Spiegel-Kopie 3 nur Physical Volumes aus DC03.

Die Kandidaten als Quell Physical Volume sind eindeutig hdisk11 (DC01), hdisk14 (DC02) und hdisk17 (DC03). In unserer Test-Umgebung haben wir die Physical Volumes hdisk12 (DC01), hdisk15 (DC02) und hdisk18 (DC03) zur Verfügung.

Da hdisk11 (DC01) in allen drei Spiegel-Kopien vorkommt, empfiehlt es sich diese zuerst auszutauschen.

Variante 1

Wir entscheiden uns zunächst für den Austausch von hdisk11 (DC01) und damit die Variante 1 von migratepv. Der Graphik kann man entnehmen das die höchste Logical Partition die die hdisk11 (DC01) verwendet, die LP 0008 ist. (Die hdisk11 wird dort in der Spiegel-Kopie 1 verwendet, womit wir bei Variante 1 wären.)

Bei der Variante 1 werden zunächst die Spiegel-Kopien, die das Quell Physical Volume enthalten, entfernt. Das LV besitzt dann nur noch 2 Spiegel-Kopien. Dann wird das Ziel Physical Volume vorne als Spiegel-Kopie 1 eingefügt. Da in Spiegel-Kopie 1 nur Physical Volumes aus DC01 verwendet werden sollen, kommt als Ziel Physical Volume damit nur die hdisk12 (DC01) in Frage.

Wir tauschen also mittels migratepv die hdisk11 (DC01) gegen die hdisk12 (DC01) aus

# migratepv -l lv00 hdisk11 hdisk12

Wir verfolgen wieder die Arbeit von migratepv graphisch.

Zunächst werden die Spiegel-Kopien, welche das Quell Physical Volume verwenden, entfernt. Entstehende Lücken werden durch Verschieben von Spiegel-Kopien von rechts aufgefüllt.

Lücken in Spiegel-Kopien wurden von rechts aufgefüllt.

Die Spiegel-Kopien 1 und 2 werden nach rechts verschoben, um Platz für die Physical Partitions des Ziel Physical Volumes zu machen.

Durch das Verschieben von Physical Partitions nach rechts entsteht Platz in der Spiegel-Kopie 1.

Der Platz in Spiegel-Kopie 1 wird mit Physical Partitions des Ziel Physical Volumes aufgefüllt.

Die Spiegel-Kopie 1 wird aufsynchronisiert.

Das Logical Volume ist nun wieder dreifach gespiegelt.

Das resultierende Logical Volume sieht dann so aus:

# lslv -m lv00
lv00:N/A
LP    PP1  PV1             PP2  PV2               PP3  PV3
0001  0001 hdisk10         0001 hdisk13         0001 hdisk16
0002  0002 hdisk10         0002 hdisk13         0002 hdisk16
0003  0009 hdisk12         0001 hdisk14         0003 hdisk16
0004  0010 hdisk12         0002 hdisk14         0004 hdisk16
0005  0011 hdisk12         0001 hdisk17         0003 hdisk13
0006  0012 hdisk12         0002 hdisk17         0004 hdisk13
0007  0013 hdisk12         0003 hdisk14         0003 hdisk17
0008  0014 hdisk12         0004 hdisk14         0004 hdisk17
0009  0003 hdisk10         0005 hdisk13         0005 hdisk16
0010  0004 hdisk10         0006 hdisk13         0006 hdisk16
#

Alle Physical Partitions der Spiegel-Kopie 1 liegen auf Physical Volumes von DC01. Die hdisk13 (DC02) und hdisk17 (DC03) werden in 2 Spiegel-Kopien (Kopie 2 und 3) verwendet.

Um auch die Spiegel-Kopien 2 und 3 zu korrigieren, kann nun entweder die hdisk13 (DC02) gegen hdisk15 (DC02) oder die hdisk17 (DC03) gegen hdisk18 (DC03) getauscht werden. Der Tausch von hdisk13 (DC02) gegen hdisk15 (DC02) erfordert das Synchronisieren von 6 Physical Partitions. Der Tausch von hdisk17 (DC03) gegen hdisk18 (DC03) erfordert das Synchronisieren von lediglich 4 Physical Partitions.

Variante 2

Wir zeigen im Folgenden noch den Tausch von hdisk13 (DC02) gegen hdisk15 (DC02), auch wenn 50% mehr Physical Partitions synchronisiert werden müssen. Der Graphik kann man entnehmen das die höchste Logical Partition welche die hdisk13 (DC02) verwendet, die LP 0010 ist. (Die hdisk13 wird dort in der Spiegel-Kopie 2 verwendet, womit wir bei Variante 2 wären.)

Bei der Variante 2 werden zunächst die Spiegel-Kopien welche das Quell Physical Volume enthalten entfernt. Das LV besitzt dann nur noch 2 Spiegel-Kopien. Dann wird das Ziel Physical Volume in der Mitte als Spiegel-Kopie 2 eingefügt. Da in Spiegel-Kopie 2 nur Physical Volumes aus DC02 verwendet werden sollen, kommt als Ziel Physical Volume damit nur die hdisk15 (DC02) in Frage.

Wir tauschen also mittels migratepv die hdisk13 (DC02) gegen die hdisk15 (DC02) aus:

# migratepv -l lv00 hdisk13 hdisk15

Wir verfolgen die Arbeit von migratepv wieder graphisch.

Spiegel-Kopien, welche das Quell Physical Volume enthalten, werden entfernt. Entstehende Lücken werden von rechts aufgefüllt.

Es entstehen Lücken in der Spiegel-Kopie 3.

Die Lücken in Spiegel-Kopie 3 werden durch Verschieben von Spiegel-Kopie 2 aufgefüllt.

Hierdurch entstehen Lücken in der Spiegel-Kopie 2 für das Ziel Physical Volume.

Die Lücken in Spiegel-Kopie 2 werden durch das Ziel Physical Volume aufgefüllt.

Die neuen Physical Partitions in Spiegel-Kopie 2 werden aufsynchronisiert.

Das Logical Volume ist wieder komplett dreifach gespiegelt. Wobei jede Spiegel-Kopie jetzt nur noch Physical Volumes aus einem Rechenzentrum verwendet.

# lslv -m lv00
lv00:N/A
LP    PP1  PV1             PP2  PV2               PP3  PV3
0001  0001 hdisk10         0006 hdisk15           0001 hdisk16
0002  0002 hdisk10         0007 hdisk15           0002 hdisk16
0003  0009 hdisk12         0001 hdisk14           0003 hdisk16
0004  0010 hdisk12         0002 hdisk14           0004 hdisk16
0005  0011 hdisk12         0008 hdisk15           0001 hdisk17
0006  0012 hdisk12         0009 hdisk15           0002 hdisk17
0007  0013 hdisk12         0003 hdisk14           0003 hdisk17
0008  0014 hdisk12         0004 hdisk14           0004 hdisk17
0009  0003 hdisk10         0010 hdisk15           0005 hdisk16
0010  0004 hdisk10         0011 hdisk15           0006 hdisk16
#

Jetzt liegen auch alle Physical Partitions der Spiegel-Kopie 2 auf Physical Volumes von DC02. Und auch die Spiegel-Kopie 3 verwendet nur noch Physical Volumes aus DC03.

Die Arbeitsweise von migratepv im Falle eines gespiegelten LVs mit 3 Kopien:

    1. Entfernen der Spiegel-Kopien welche das Quell Physical Volume verwenden.
    2. Hinzufügen einer Spiegel-Kopie für das Ziel Physical Volume (entweder Vorne, in der Mitte oder Hinten).
    3. Aufsynchronisieren der neuen Spiegel-Kopie.

Durch geschicktes Ausnutzen der Arbeitsweise von migratepv, kann in vielen Fällen eine korrekte Spiegelung zwischen Rechenzentren hergestellt werden. Im Vergleich zu reorgvg müssen in der Regel deutlich weniger Physical Partitions kopiert werden. Außerdem entscheidet der Administrator bei migratepv genau wie das Ziel-Layout aussehen soll. Bei reorgvg kann dies nicht vom Administrator beeinflußt werden.