[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Shutdown-Reihenfolge



Hallo Matthias,

wieder einmal herzlichsten Dank für deine Ausführungen.

Ich bin jetzt einfach mal so frei und poste hier meine Lösung. Mit der fahre ich gut und alles ist (aus meiner Sicht) wunderbar.

Thema: Start
------------
Hier nutze ich deine Idee mit dem Ändern des LSB-Headers von mdadm-raid. Der sieht wie folgt aus.

/etc/insserv/overrides/mdadm-raid

# Required-Start:    mountkernfs open-iscsi

In Anbetracht dessen, dass auf dem Raid das Datenverzeichnis von PostgreSQL rumwabert und das vorherige Mounten aus bereits dargelegten Gründen nicht sauber klappt, wird auch für PostgreSQl ein Override erstellt.

/etc/insserv/overrides/postgresql

# Default-Start:

Sprich, das Teil soll nicht starten. Das soll erst nach dem Mount erfolgen. Das passiert in der rc.local. In der rc.local werden daher der Mount und das anschließende Starten von PostgreSQl durchgeführt.

Durch diese Reihenfolge habe ich zumindest schon einmal ein gemountetes Raid. Im nächsten Schritt zeige ich, wie ich das Raid auch noch so hinbekomme, dass es auch nach dem Stop/Neustart konsistent ist.


Thema: Neustart/Halt
--------------------
Der Start von PostgreSQl sieht soweit sauber aus. Soll heißen, dass der Shutdown gleich am Anfang erfolgt.

Für mdadm-raid und open-iscsi sieht das schon anders aus. Folgende Reihenfolge ist angestrebt.
- 1. Raid unmounten
- 2. Raid stoppen
- 3. Pause
- 4. LUNs stoppen

1. Raid unmounten

Hierfür habe ich ein Init-Skript erstellt mit Namen umountmd. Es macht nichts anderes als das md-Gerät zu unmounten.

Der Header ist so gestaltet (nur die wichtigen Felder).

/etc/init.d/umountmd

# Required-Stop:     mdadm-raid
# X-Stop-After:      postgresql

2. Raid stoppen

Das Teil soll nach dem Stop von umountmd ausgeführt werden.

/etc/innserv/overrides/mdadm-raid

# Required-Stop:     mountkernfs pause
# X-Stop-After:      umountmd

pause ist ein Skript, was die zuvor schon angedeutete Pause erzeugt.

3. Pause

Die Pause wurde eingefügt, weil der Stop vom Raid bei mir etwas länger dauert. Sofern diese nicht gemacht wird, erscheint beim Stop von open-iscsi eine formvollendete Fehlermeldung, weil z.B. sdc1 durch md0 verwendet wird.

Daher gibts nen Initskript mit dem Namen pause, was wirklich nur eine Pause von 10 sek macht.

/etc/init.d/pause

# Required-Stop:     open-iscsi
# X-Stop-After:      mdadm-raid

4. LUNs stoppen

Abschließend müssen nur noch die LUNs gestoppt werden. Dafür wurde der Header von open-iscsi angepasst.

/etc/insserv/overrides/open-iscsi

# X-Stop-After:      pause

Schlußendlich wurde nur noch insserv ausgeführt und ich habe eine Reihenfolge wie folgt erhalten (für Halt/Neustart):

K01mdadm
K01postgresql
K01umountiscsi.sh
K02umountmd
K03mdadm-raid
K04pause
K05open-iscsi

Durch diese "harte" Definierung der Reihenfolge habe ich erreicht, dass das Raid bei jedem Start sauber ist und nicht ständig gesynct werden muss.

Sicherlich kann man die umountmd- und pause-Geschichte zusammenfassen und wahrscheinlich wird auch irgendwo eine Lösung existieren, die um Längen einfacher ist, aber für mich reicht es.

Zudem bin ich auch der Meinung, dass die Konstellation md-Gerät/open-iscsi gar nicht mal so abwägig ist.

Ich hoffe, dass ich anderen eine kleine Hilfe bin.

Gruß und herzlichen Dank für eure Denkansätze.

Michael


Reply to: