AIX LVM: Mechanik von migratepv (Part III)

Mit dem AIX LVM Kommando migratepv können Physical Volumes in Spiegel-Kopien von Logical Volumes ausgetauscht werden. Im dritten Teil geht es um die Korrektur „falscher“ Spiegelung. Die auftretenden Möglichkeiten werden diskutiert. Anhand eines größeren Beispiels aus der Praxis werden die gezeigten Möglichkeiten demonstriert.

In der Praxis kommt es gelegentlich vor, das gespiegelte Logical Volumes „falsch“ gespiegelt sind. Unter „falscher“ Spiegelung ist im folgenden verstanden das eine Spiegel-Kopie die nur Physical Volumes aus einem Rechenzentrum enthalten sollte, auch Physical Volumes aus einem anderen Rechenzentrum enthält. Dies kann relativ schnell passieren, wenn keine Mirror Pools verwendet werden, und Logical Volumes häufiger vergrößert werden.

Wir betrachten in diesem Artikel ausschließlich den Fall von gespiegelten Logical Volumes mit 2 Spiegel-Kopien. In allen betrachteten Fällen hat dabei jede Logical Partition Kopien in beiden Rechenzentren. Das heisst insbesondere, das bei Ausfall eines Rechenzentrums, insgesamt für jede Logical Partition noch eine gültige Kopie verfügbar ist. Ziel ist bei allen folgenden Beispielen dies zu korrigieren, so dass am Ende jede Spiegel-Kopie nur Physical Volumes eines Rechenzentrums enthält. Bei der Korrektur der Spiegelung wird darauf geachtet das immer Kopien in beiden Rechenzentren verfügbar sind und damit Redundanz im Falle eines Ausfalls eines der beiden Rechenzentren gegeben ist.

Der Soll-Zustand

Es werden nur gespiegelte Logical Volumes mit 2 Spiegel-Kopien betrachtet. Die Spiegel-Kopie 1 sollte komplett auf Physical Volumes aus dem Rechenzentrum DC01 (grün) liegen. Die Spiegel-Kopie 2 sollte komplett auf Physical Volumes aus dem Rechenzentrum DC02 (rot) liegen.

the target state

Fallunterscheidung

Bei der Untersuchung der Arbeitsweise von migratepv haben wir gesehen, das diese davon abhängt in welcher der beiden Spiegel-Kopien das zu ersetzende Physical Volume vorkommt. Dabei ist die höchste Logical Partition Nummer, in der das Physical Volume vorkommt, entscheidend. Wir unterscheiden daher wie folgt:

    • Fall A: Das höchste Vorkommen des Physical Volumes ist in der „richtigen“ Spiegel-Kopie.
    • Fall B: Das höchste Vorkommen des Physical Volumes ist in der „falschen“ Spiegel-Kopie.

Fall A: höchste Vorkommen in „richtiger“ Spiegel-Kopie

Case A: highest occurrence in „correct“ mirror copy

Das zu ersetzende Physical Volume muss in diesem Fall also mindestens zweimal im Logical Volume vorkommen, zuerst in der „falschen“ Spiegel-Kopie und als letztes in der „richtigen“ Spiegel-Kopie. Wir demonstrieren im Folgenden kurz die beiden möglichen Unterfälle:

    • Fall A1: Das zu ersetzende Physical Volume kommt als letztes in der Spiegel-Kopie 1 vor.
    • Fall A2: Das zu ersetzende Physical Volume kommt als letztes in der Spiegel-Kopie 2 vor.

Fall A1: höchste Vorkommen in „richtiger“ Spiegel-Kopie 1

Case A1: highest occurrence in „correct“ mirror copy 1

Das zu ersetzende Physical Volume hdisk11 (DC01) kommt insgesamt 4 mal vor, 2 mal in beiden Spiegel-Kopien. Das höchste Vorkommen von hdisk11 (DC01) in einer Logical Partition ist in der Spiegel-Kopie 1. Das Ersetzen findet daher in der Spiegel-Kopie 1 statt. Das Ziel Physical Volume muss damit ebenfalls aus dem Rechenzentrum DC01 stammen.

Wir verwenden das Physical Volume hdisk12 (DC01) als Ziel Physical Volume:

# migratepv -l lv00 hdisk11 hdisk12
Case A1: Correct mirroring after migratepv

Das Logical Volume ist jetzt korrekt gespiegelt. Das Ziel Physical Volume hdisk12 (DC01) wird ausschließlich in Spiegel-Kopie 1 verwendet.

Fall A2: höchste Vorkommen in richtiger Spiegel-Kopie 2

Case A2: highest occurrence in „correct“ mirror copy 2

Das zu ersetzende Physical Volume hdisk14 (DC02) kommt insgesamt 4 mal vor, 2 mal in beiden Spiegel-Kopien. Das höchste Vorkommen von hdisk14 (DC02) in einer Logical Partition ist in der Spiegel-Kopie 2. Das Ersetzen findet daher in der Spiegel-Kopie 2 statt. Das Ziel Physical Volume muss somit aus dem Rechenzentrum DC02 sein.

Wir verwenden das Physical Volume hdisk15 (DC02) als Ziel Physical Volume:

# migratepv -l lv00 hdisk14 hdisk15
Case A2: Correct mirroring after migratepv

Das Logical Volume ist jetzt korrekt gespiegelt. Das Ziel Physical Volume hdisk15 (DC02) wird ausschließlich in Spiegel-Kopie 2 verwendet.

Fall B: höchste Vorkommen in „falscher“ Spiegel-Kopie

Case B: highest occurrence in „wrong“ mirror copy

Dieser Fall ist deutlich komplexer. Ein einfacher Austausch des Physical Volumes hdiskY durch ein anderes Physical Volume führt nicht zu einer korrekten Spiegelung! Der Fall beinhaltet auch die Situation in der das Physical Volume hdiskY nur einmal vorkommt, aber eben in der „falschen“ Spiegel-Kopie. Es gibt die beiden folgenden Unterfälle:

    • Fall B1: Das zu ersetzende Physical Volume kommt als letztes in der Spiegel-Kopie 1 vor.
    • Fall B2: Das zu ersetzende Physical Volume kommt als letztes in der Spiegel-Kopie 2 vor.

Wir diskutieren den Fall B1 ausführlich. Für den Fall B2 gilt dann entsprechendes.

Fall B1: höchste Vorkommen in „falscher“ Spiegel-Kopie 1

Case B1: highest occurrence in „wrong“ mirror copy 1

Das zu ersetzende Physical Volume hdisk14 (DC02) kommt insgesamt 4 mal vor, 2 mal in beiden Spiegel-Kopien. Das höchste Vorkommen von hdisk14 (DC02) in einer Logical Partition ist in der Spiegel-Kopie 1. Würde man die hdisk14 (DC02) gegen ein Physical Volume aus DC01 tauschen, dann wären beide Spiegel-Kopien in DC01. Bei einem Ausfall des Rechenzentrums DC01 würde man damit beide Kopien verlieren. Tauscht man die hdisk14 (DC02) gegen ein Physical Volume aus DC02 aus, dann wären zwar die beiden Kopien auf beide Rechenzentren verteilt, allerdings wäre dann die Spiegel-Kopie 1 in DC02 (jetzt für alle 4 Vorkommen von hdisk14) und die Spiegel-Kopie 2 in DC01. Der Zustand hat sich dann verschlechtert.

Um die Spiegelung korrigieren zu können, muss man den Fall B in den Fall A überführen. Das Physical Volume hdisk14 (DC02) muss als letztes in der Spiegel-Kopie 2 vorkommen, dann wäre man beim Fall A2. Das könnte man z.B. erreichen, indem eine Physical Partition der hdisk13 (nach dem letzten Vorkommen von hdisk14) auf die hdisk14 kopiert wird. Voraussetzung sind:

    • Es gibt mindestens eine freie Physical Partition auf hdisk14.
    • Nach dem letzten Vorkommen von hdisk14 gibt es mindestens eine Logical Partition die korrekt zwischen den Rechenzentren gespiegelt ist.

Wir verschieben die letzte Physical Partition der Spiegel-Kopie 2 von hdisk13 (DC02) nach hdisk14 (DC02).

# migratelp lv00/45/2 hdisk14
Case B1 becomes case A2 after migratelp

Damit ist der Fall B1 auf den Fall A2 zurückgeführt!

Wie im Fall A2 oben, tauschen wir nun die hdisk14 (DC02) gegen die hdisk15 (DC02):

# migratepv -l lv00 hdisk14 hdisk15
Case B1: Correct mirroring after migratelp and migratepv

Das Logical Volume ist jetzt korrekt zwischen den beiden Rechenzentren gespiegelt! Wir verschieben noch die Physical Partition die im ersten Schritt verschoben wurde, zurück auf das ursprüngliche Physical Volume hdisk13 (DC02):

# migratelp lv00/45/2 hdisk13/25
Case B1: Correct mirroring again

Für den Fall B1 waren die folgenden Schritte nötig:

    1. Verschieben einer Physical Partition in Spiegel-Kopie 2 auf das Quell Physical Volume, mit dem Ziel das die höchste Logical Partition welche das Quell Physical Volume enthält, dieses in Spiegel-Kopie 2 enthält. Womit der Fall dann auf den Fall A2 zurückgeführt ist.
    2. Austauschen des Quell Physical Volumes gegen das Ziel Physical Volume, wobei das Ziel Physical Volume dann nur in der Spiegel-Kopie 2 vorkommt.
    3. Optional: Rückgängig machen von Schritt 1, indem die verschobene Physical Partition zurück auf das ursprüngliche Physical Volume verschoben wird.

Fall B1: keine freie PP auf Quell Physical Volume

Um den Fall B1 mittels migratelp auf den Fall A2 zurückzuführen, war eine freie Physical Partition auf dem Quell Physical Volume (hdisk14) notwendig. Um eine freie Physical Partition auf dem Quell Physical Volume zu gewinnen, könnte man eine der Physical Partitions auf ein anderes Physical Volume aus dem gleichen Rechenzentrum verschieben (migratelp). Es sollte eine Physical Partition aus der Spiegel-Kopie 2 ausgewählt werden!

Fall B1: es gibt keine PP die verschoben werden kann

Für den 1. Schritt mit migratelp war es notwendig eine Logical Partition nach dem letzten Vorkommen des Quell Physical Volumes (in unserem Fall hdisk14) zu finden, welche korrekt zwischen den beiden Rechenzentren gespiegelt ist. Gibt es keine solche Logical Partition, z.B. weil das Quell Physical Volume in der höchsten Logical Partition vorkommt, kann der Fall B1 nicht mit einem simplen migratelp in den Fall A2 überführt werden. Falls ein Vergrößern des Logical Volumes eine Option ist, könnte man mit extendlv um mindestens eine Logical Partition erweitern, wobei als erstes ein Physical Volume aus dem Rechenzentrum DC01 und als zweites das Quell Physical Volume aus dem Rechenzentrum DC02 angegeben werden muß.

Wir erweitern unser Ausgangs Logical Volume (mit inkorrekter Spiegelung) mittels extendlv:

# extendlv lv00 1 hdisk10 hdisk14
Case B1 becomes case A2 after extendlv

Für den Fall B1 waren die folgenden Schritte nötig:

    1. Erweitern des Logical Volumes auf ein Physical Volume von Rechenzentrum DC01 (in Spiegel-Kopie 1) und das Quell Physical Volume (in Spiegel-Kopie 2).
    2. Austauschen des Quell Physical Volumes gegen das Ziel Physical Volume, wobei das Ziel Physical Volume dann nur noch in der Spiegel-Kopie 2 vorkommt.

Fall B1: das Logical Volume kann/darf nicht vergrößert werden werden

Sollte eine Vergrößerung des Logical Volumes nicht möglich sein, bleibt noch die Möglichkeit in der höchsten Logical Partition in der das Quell Physical Volume vorkommt, die beiden Spiegel-Kopien gegeneinander zu vertauschen. Dazu geht man wie folgt vor:

    1. Kopieren der Physical Partition in Spiegel-Kopie 1 auf ein anderes Physical Volume (temporär).
    2. Kopieren der Physical Partition in Spiegel-Kopie 2 auf die Physical Partition der Spiegel-Kopie 1, die im Schritt 1 frei geworden ist.
    3. Kopieren der temporären Physical Partition auf die freigewordene Physical Partition der Spiegel-Kopie 2.

Nachteil des Verfahrens: Während der Kopier-Operationen liegt die Logical Partition zeitweise nur in einem Rechenzentrum! Für die Dauer der Kopier-Operationen verliert man die Redundanz zwischen den Rechenzentren.

Für unser Ausgangs Logical Volume (mit inkorrekter Spiegelung) wären das die folgenden Schritte:

    1. Migrieren von LP 40 Spiegel-Kopie 1 auf das verfügbare Physical Volume hdisk12, hierdurch wird die PP 20 auf hdisk14 frei:
      # migratelp lv00/40/1 hdisk12
    2. Migrieren der Spiegel-Kopie 2 des Quell Physical Volume hdisk14, hierdurch wird PP 40 auf hdisk10 frei:
      # migratelp lv00/40/2 hdisk14/20
    3. Migrieren der temporären Kopie von hdisk12 nach hdisk10:
      # migratelp lv00/40/1 hdisk10/40

Durch den Schritt 2 wird aus dem Fall B1 wiederum der Fall A2!

Case B1 becomes case A2 after two PPs have been exchanged

Fazit Fall B1

Der Fall B1 kann auf den Fall A2 zurückgeführt werden. Dabei gibt es die folgenden Möglichkeiten:

    1. Verschieben einer Physical Partition in Spiegel-Kopie 2 auf das Quell Physical Volume, mit dem Ziel das die höchste Logical Partition welche das Quell Physical Volume enthält, dieses in Spiegel-Kopie 2 enthält. Womit der Fall dann auf den Fall A2 zurückgeführt ist.
    2. Erweitern des Logical Volumes auf ein Physical Volume von Rechenzentrum DC01 (in Spiegel-Kopie 1) und das Quell Physical Volume (in Spiegel-Kopie 2).
    3. Vertauschen der Spiegel-Kopien in der höchsten Logical Partition in der das Quell Physical Volume vorkommt. (Kurzfristiger Verlust der Redundanz!)

Fall B2

Der Fall B2 kann in analoger Weise auf den Fall A1 zurückgeführt werden. Es gibt dazu die gleichen Fälle und Möglichkeiten wie beim Fall B1!

Ein Beispiel aus der Praxis

Ein gespiegeltes Logical Volume ist im Laufe der Zeit auf ca 10 TB angewachsen. Das Logical Volume ist auf 22 Physical Volumes verteilt. Teilweise sind die Spiegel-Kopien nicht korrekt auf zwei Rechenzentren verteilt. Im folgenden soll gezeigt werden, wie die Spiegelung online korrigiert werden kann.

Mirrored logical volume from practice

Das Logical Volume wurde an 3 Stellen „falsch“ gespiegelt. Die Physical Volumes hdisk38, hdisk39, hdisk59 und hdisk60 kommen zwar nur jeweils einmal in einer Spiegel-Kopie vor, aber dann in der Spiegel-Kopie des anderen Rechenzentrums. Das ist der Fall B1 bzw. B2. Die Physical Volumes hdisk42 und hdisk43 kommen in beiden Spiegel-Kopien vor, wobei das letzte Vorkommen, jeweils in der Spiegel-Kopie des richtigen Rechenzentrums liegt. Das ist der Fall A1 bzw. A2.

Optional: Einführen von Mirror Pools

Um für die Zukunft zu verhindern, das erneut „falsch“ gespiegelt werden kann, führen wir als erstes Mirror Pools ein.

Wir legen den Mirror Pool DC01 mit den Physical Volumes aus dem Rechenzentrum DC01 und entsprechend den Mirror Pool DC02 an.

# chpv -P DC01 hdisk30

Anschließend weisen wir die Spiegel-Kopien des Logical Volumes den beiden Mirror Pools zu:

# chlv -m copy1=DC01 -m copy2=DC02 lv_scc
0516-1812 lchangelv: Warning, existing allocation violates mirror pools.
   Consider reorganizing the logical volume to bring it into compliance.
#

 

Austausch von hdisk43 (Fall A2)

Wir schauen uns zunächst den einfacheren Fall mit hdisk42 und hdisk43 an. Man kann hier entweder die hdisk42 (DC01) austauschen (Fall A1) oder die hdisk43 (DC02) austauschen (Fall A2). Wir haben uns hier entschieden die hdisk43 (DC02) gegen ein neues Physical Volume (hdisk71) ausreichender Kapazität aus dem Rechenzentrum DC02 auszutauschen:

# chpv -P DC02 hdisk71 # optional
# migratepv -l lv_scc hdisk43 hdisk71
#
Logical volume after replacing hdisk43 (DC02)

Migration einer PP nach hdisk39 (DC02)

Als nächstes schauen wir uns den Fall mit hdisk38 (DC01) und hdisk39 (DC02) an. Beide liegen in der „falschen“ Spiegel-Kopie, womit wir beim Fall B sind. Um dies auf den Fall A zurückzuführen, müssen wir in einer Logical Partition, die im Logical Volume nach dem höchsten Vorkommen von hdisk38 bzw. hdisk39 vorkommt, eine der beiden Physical Partitions auf hdisk38 oder hdisk39 migrieren. Diese Logical Partition muß korrekt zwischen den Rechenzentren gespiegelt sein!

Sowohl auf hdisk38 (DC01) als auch auf hdisk39 (DC02) gibt es noch freie Physical Partitions. Wir haben uns hier entschieden die Spiegel-Kopie 2 der Logical Partition 20427, temporär, von hdisk55 (DC02) nach hdisk39 (DC02) zu migrieren:

# migratelp lv_scc/20427/2 hdisk39
0516-1291 migratelp: Mirror copy 2 of logical partition 20427 of logical volume
   lv_scc migrated to physical partition 8000 of hdisk39.
#
Migration of PP 20427/2 to hdisk39 (DC02)

Durch die Migration der Spiegel-Kopie 2 in Logical Partition 20427 haben wir den Fall B1 auf den Fall A2 zurückgeführt.

Austausch von hdisk39 (DC02)

Das Physical Volume hdisk39 (DC02) kann jetzt gegen ein anderes Physical Volume aus dem Rechenzentrum DC02 ausgetauscht werden.
Hierfür haben wir ein neues Physical Volume hdisk72 mit ausreichender Kapazität im Rechenzentrum DC02 bereitgestellt:

# chpv -p DC02 hdisk72 # optional
0516-1812 lchangepv: Warning, existing allocation violates mirror pools.
   Consider reorganizing the logical volume to bring it into compliance.
# migratepv -l lv_scc hdisk39 hdisk72
#
Logical volume after replacing hdisk39 (DC02)

Migration der PP zurück nach hdisk55 (DC02)

Wir migrieren die temporär verschobene Physical Partition zurück nach hdisk55 (DC02). Der Schritt ist nicht zwingend notwendig, da die Logical Partition 20427 schon korrekt zwischen den Rechenzentren gespiegelt ist. Wir wollen aber das Layout der beiden Spiegel-Kopien im Logical Volume möglichst ähnlich halten. Daher migrieren wir die Spiegel-Kopie 2 der Logical Partition 20427 wieder zurück nach hdisk55 (DC02) auf die ursprüngliche Physical Partition 1:

# migratelp lv_scc/20427/2 hdisk55/1
0516-1291 migratelp: Mirror copy 2 of logical partition 20427 of logical volume
  lv_scc migrated to physical partition 1 of hdisk55.
#
Temporarily moved PP migrated back to hdisk55

Damit ist das Logical Volume nur noch bezüglich hdisk59 und hdisk60 „falsch“ gespiegelt. Die Situation ist identisch zu hdisk38 und hdisk39. Allerdings gibt es hier eine zusätzlich Komplikation: auf beiden Physical Volumes gibt es keine freie Physical Partition mehr.

Wir betrachten hier die hdisk59 (DC01). Analog könnte man auch die hdisk60 (DC02) verwenden. Im Rechenzentrum DC01 gibt es das Physical Volume hdisk27, welches ein paar freie Physical Partitions besitzt. Das Physical Volume hdisk27 wird aktuell von unserem Logical Volume nicht verwendet! Wir migrieren temporär eine Physical Partition von hdisk59 (DC01) nach hdisk27 (DC01):

# migratelp lv_scc/6895/2 hdisk27
0516-1291 migratelp: Mirror copy 2 of logical partition 6895 of logical volume
   lv_scc migrated to physical partition 2036 of hdisk27.
#    

Damit haben wir eine freie Physical Partition auf hdisk59 (DC01) gewonnen.

Um dies auf den Fall A1 zurückzuführen, müssen wir in einer Logical Partition, die im Logical Volume nach dem höchsten Vorkommen von hdisk59 vorkommt, die Physical Partition der Spiegel-Kopie 1 nach hdisk59 migrieren. Diese Logical Partition muß korrekt zwischen den Rechenzentren gespiegelt sein! Wir verwenden dazu die höchste Logical Partition (40117) und migrieren die Physical Partition aus Spiegel-Kopie 1 von hdisk45 (DC01) nach hdisk59 (DC01):

# migratelp lv_scc/40117/1 hdisk59
0516-1291 migratelp: Mirror copy 1 of logical partition 40117 of logical volume
   lv_scc migrated to physical partition 1 of hdisk59.
#
After migrating 2 physical partitions

Wir haben damit die Situation auf den Fall A1 zurückgeführt. Das Physical Volume hdisk59 (DC01) kann damit auf ein anderes Physical Volume aus dem Rechenzentrum DC01 migriert werden. Hierzu steht das Physical Volume hdisk74 (DC01) mit ausreichender freier Kapazität zur Verfügung:

# migratepv -l lv_scc hdisk59 hdisk74
#
The logical volume after replacing hdisk59 (DC01)

Nun ist nur noch eine Logical Partition „falsch“ gespiegelt! Das neu verwendete Physical Volume hdisk27 (DC01) liegt in der „falschen“ Spiegel-Kopie 2, womit wir wieder beim Fall B2 wären. Kopiert man die Spiegel-Kopie 1 der letzten Logical Partition nach hdisk27 (DC01) ist man wiederum beim Fall A1 und kann dann die hdisk27 einfach ersetzen. Wir migrieren die Spiegel-Kopie 1 der Logical Partition 40117 nach hdisk27 (DC01):

# migratelp lv_scc/40117/1 hdisk27
0516-1291 migratelp: Mirror copy 1 of logical partition 40117 of logical volume
   lv_scc migrated to physical partition 2037 of hdisk27.
#
Migration of mirror copy 1 of the last LP to hdisk27

Jetzt kann das temporär verwendete Physical Volume hdisk27 (DC01) gegen hdisk74 (DC01) ausgetauscht werden:

# migratepv -l lv_scc hdisk27 hdisk74
#
Logical volume after replacing hdisk27 (DC01)

Das Logical Volume ist nun korrekt zwischen den beiden Rechenzentren gespiegelt! Wir migrieren noch die letzte Physical Partition zurück nach hdisk45 (DC01):

# migratelp lv_scc/40117/1 hdisk45/6079
0516-1291 migratelp: Mirror copy 1 of logical partition 40117 of logical volume
   lv_scc migrated to physical partition 6079 of hdisk45.
#
Final state of the logical volume

Fazit

Die Korrektur von „falscher“ Spiegelung ist mit Hilfe von migratepv und migratelp ohne Verlust der Redundanz möglich. Hierfür ist eine gute Kenntnis der Arbeitsweise von migratepv nötig. Außerdem muß geschickt ausgewählt werden, welche Physical Partitons mit migratelp verschoben werden müssen, um jeweils aus dem Fall B den Fall A zu machen. Mit Ausnahme einiger zusätzlichen Physical Partitions, mussten dabei nur die von der „falschen“ Spiegelung betroffenen Physical Partitions migriert werden.