Bug 22747 - Failover: libvirt Instanz sollte auf ausgefallenem Rechner entfernt werden
Summary: Failover: libvirt Instanz sollte auf ausgefallenem Rechner entfernt werden
Status: CLOSED FIXED
Alias: None
Product: Z_UCS DVS
Classification: Unclassified
Component: Session Broker
Version: UCS DVS 1.0
Hardware: Other Linux
: P5 normal
Target Milestone: UCS DVS 1.0
Assignee: Arvid Requate
QA Contact: Felix Botner
URL:
Keywords:
Depends on: 22769
Blocks:
  Show dependency treegraph
 
Reported: 2011-06-15 17:39 CEST by Felix Botner
Modified: 2023-03-25 06:48 CET (History)
3 users (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Customer ID:
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Felix Botner univentionstaff 2011-06-15 17:39:35 CEST
Auf Rechner A wird DVS Instanz "i1" angelegt. Dieser Rechner fällt aus und nun wird diese Instanz , ebenfalls als "i1" auf Rechner B angelegt. Nach dem Neustart vom Rechner A gibt es dort aber weiterhin die Instanz "i1" in libvirt:

-> virsh list --all


Unter Umständen (wenn z.B. durch einen Ausfall von Rechner B die Instanz wieder auf Rechner A umgezogen wird) kann es damit Probleme geben, weil keine weitere Instanz mit diesem Namen auf Rechner A angelegt werden kann.

Es sollte also auf dem ausgefallenem Rechner auch die libvirt Konfigurationen der Instanzen gelöscht werden.
Comment 1 Felix Botner univentionstaff 2011-06-15 17:45:46 CEST
Vielleicht reicht es hier alle Instanzen zu löschen, die ein "univentionVirtualMachineReplacedBy: 510190ce-1ca2-2e39-13cf-35314f38bf19" haben.
Comment 2 Felix Botner univentionstaff 2011-06-15 18:04:19 CEST
Ich habe jetzt einen doppelten Failover fabriziert. Dann habe ich folgende UVMM Information Objekte im LDAP:

# 4c0b7254-7bef-ae72-d86f-e768ea5377ec, Information, Virtual Machine Manager,
  dvs10.local
dn: univentionVirtualMachineUUID=4c0b7254-7bef-ae72-d86f-e768ea5377ec,cn=Infor
 mation,cn=Virtual Machine Manager,dc=dvs10,dc=local
univentionVirtualMachineOS: Microsoft Windows XP
objectClass: univentionVirtualMachine
univentionVirtualMachineUUID: 4c0b7254-7bef-ae72-d86f-e768ea5377ec
univentionVirtualMachineReplacedBy: 510190ce-1ca2-2e39-13cf-35314f38bf19

# 510190ce-1ca2-2e39-13cf-35314f38bf19, Information, Virtual Machine Manager,
  dvs10.local
dn: univentionVirtualMachineUUID=510190ce-1ca2-2e39-13cf-35314f38bf19,cn=Infor
 mation,cn=Virtual Machine Manager,dc=dvs10,dc=local
univentionVirtualMachineOS: Microsoft Windows XP
objectClass: univentionVirtualMachine
univentionVirtualMachineUUID: 510190ce-1ca2-2e39-13cf-35314f38bf19

# 0b4647a4-c1fe-a49e-ac58-60e6e45a4df4, Information, Virtual Machine Manager,
  dvs10.local
dn: univentionVirtualMachineUUID=0b4647a4-c1fe-a49e-ac58-60e6e45a4df4,cn=Infor
 mation,cn=Virtual Machine Manager,dc=dvs10,dc=local
univentionVirtualMachineOS: Microsoft Windows XP
objectClass: univentionVirtualMachine
univentionVirtualMachineUUID: 0b4647a4-c1fe-a49e-ac58-60e6e45a4df4

Die aktuell (laufende) Instanz ist "0b4647a4-c1fe-a49e-ac58-60e6e45a4df4", jedoch wurde an der vorherigen Instanz "510190ce-1ca2-2e39-13cf-35314f38bf19" nicht das "univentionVirtualMachineReplacedBy" gesetzt. Beim ersten Failover wurde das noch getan, siehe "4c0b7254-7bef-ae72-d86f-e768ea5377ec"
Comment 3 Arvid Requate univentionstaff 2011-06-15 20:40:43 CEST
Das Template für /etc/init.d/libvirt-guests wurde im Paket univention-dvs-node entsprechend angepasst:

 * Während der "ON_BOOT=start" Phase der Instanzen wird nach dem LDAP-Attribut univentionVirtualMachineReplacedBy gesucht (eingeführt durch Bug 22416).

 * Wenn diese LDAP-Suche erfolgreich ist, wird per "virsh undefine" die ersetzte UUID in libvirt entfernt und danach im UDM das uvmm/info Objekt.

Die Ursache für die Beobachtung in Comment 2 ist noch unklar, ggf. waren die Pakete auf xen12 nicht aktuell? Erstmal fixed.
Comment 4 Arvid Requate univentionstaff 2011-06-16 17:42:02 CEST
Auch der dvs-suspend-replaced-vm Listener wurde so angepasst dass für die als "replacedBy" markierten VMs ein virsh destoroy und virsh undefine ausgeführt wird.
Comment 5 Felix Botner univentionstaff 2011-06-17 10:00:40 CEST
Die Instanzen auf dem ausgefallenem Rechner werden gelöscht (virsh undefine). Getestet mit "poweroff" und "ifdown eth0".

Das Problem mit "univentionVirtualMachineReplacedBy" ist mir nicht nochmal auftreten.
Comment 6 Felix Botner univentionstaff 2011-06-17 13:18:29 CEST
Nochmal auf,

ein paar mal (2 von ca. 10) hat das Löschen der Instanz auf dem ausgefallenem Rechner nicht geklappt. Im Listener log sieht man folgendes:

3ac2464,cn=Information,cn=Virtual Machine Manager,dc=dvs10pt,dc=local     cmd: m
17.06.11 13:03:32  LISTENER    ( INFO    ) : updating univentionVirtualMachineUUID=e09f620c-9854-5b17-a036-0710b3ac2464,cn=Information,cn=Virtual Machine Manager,dc=dvs10pt,dc=local
17.06.11 13:03:32  LISTENER    ( INFO    ) : running handlers for univentionVirtualMachineUUID=e09f620c-9854-5b17-a036-0710b3ac2464,cn=Information,cn=Virtual Machine Manager,dc=dvs10pt,dc=local
17.06.11 13:03:32  LISTENER    ( INFO    ) : univentionVirtualMachineReplacedBy ? univentionVirtualMachineReplacedBy
17.06.11 13:04:02  LISTENER    ( PROCESS ) : DVS halted replaced virtual machine "e09f620c-9854-5b17-a036-0710b3ac2464": virsh destroy output:
error: Failed to destroy domain e09f620c-9854-5b17-a036-0710b3ac2464
error: Timed out during operation: cannot acquire state change lock


17.06.11 13:04:02  LISTENER    ( PROCESS ) : DVS undefined replaced virtual machine "e09f620c-9854-5b17-a036-0710b3ac2464": virsh undefine output:
error: Failed to undefine domain e09f620c-9854-5b17-a036-0710b3ac2464
error: Requested operation is not valid: cannot delete active domain


17.06.11 13:04:02  LISTENER    ( INFO    ) : handler: dvs-suspend-
Comment 7 Stefan Gohmann univentionstaff 2011-06-17 14:04:32 CEST
(In reply to comment #6)
> Nochmal auf,
> 
> ein paar mal (2 von ca. 10) hat das Löschen der Instanz auf dem ausgefallenem
> Rechner nicht geklappt. Im Listener log sieht man folgendes:

Wie besprochen, bitte nochmal testen, wenn das Netzwerkkabel gezogen wird. Ich denke das ist relevanter.

Wenn es sich dann nicht reproduzieren lässt, dann bitte zu dem ifup/ifdown einen neuen Bug erstellen.
Comment 8 Philipp Hahn univentionstaff 2011-06-17 14:05:28 CEST
svn24962: Es wurde ein fehlendes %s im Formatstring ergänzt.
Comment 9 Arvid Requate univentionstaff 2011-06-17 14:32:27 CEST
Könnte ein Problem der libvirt Version 0.8.x sein. Laut
https://bugzilla.redhat.com/show_bug.cgi?id=676205 ist das Verhalten in 0.9.0
verbessert, allerdings lässt sich im changelog kein konkreter Hinweis dazu
finden (http://libvirt.org/news.html). Falls das weiterhin problematisch ist,
kann man als Workaround im Falle dieses virsh timeouts im listener den libvirtd
(/etc/init.d/univention-virtual-machine-manager-node-common) restarten, kurz
warten und dann noch einmal das virsh destroy/undefine versuchen.
Comment 10 Felix Botner univentionstaff 2011-06-17 16:51:50 CEST
Tritt nicht auf, wenn ich das Netzwerkkabel ziehe, anscheinend nur bei ifdown/up eth0.
Comment 11 Stefan Gohmann univentionstaff 2011-06-20 08:51:56 CEST
Da es grundsätzlich funktioniert, sollten wir diesen Fall zur nächsten Version beheben.
Comment 12 Arvid Requate univentionstaff 2011-06-20 12:12:51 CEST
Falls virsh destroy im Listener dvs-suspend-replyced-vm nicht erfolgreich verläuft, wird uvmmd-common neu gestartet und das virsh Kommando erneut ausgeführt.
Comment 13 Felix Botner univentionstaff 2011-06-20 13:25:11 CEST
Auf einem Testsystem hängt der libvirtd, auch ein Neustart hat hier nichts gebracht:

-> strace  -p 3945
Process 3945 attached - interrupt to quit
futex(0x426019e0, FUTEX_WAIT, 4035, NULL^C <unfinished ...>
Process 3945 detached
Comment 14 Arvid Requate univentionstaff 2011-06-20 14:39:16 CEST
libvritd wird jetzt wie in comment 9 beschrieben manuell per sigkill beendet und dann per Initskript restartet falls virsh destroy nicht funktioniert.
Comment 15 Philipp Hahn univentionstaff 2011-06-21 08:59:27 CEST
(In reply to comment #13)
> Auf einem Testsystem hängt der libvirtd, auch ein Neustart hat hier nichts
> gebracht:
> 
> -> strace  -p 3945

Da "libvirtd" multi-threaded ist, ist ein strace auf dem Haupt-thread wenig aussagekräftig, da dieser i.d.R. nur auf das Beenden der gestarteten anderen Threads wartet. Von daher in so einem Fall zusätzlich "-f" angeben, um alle Threads zu tracen!

(In reply to comment #9)
> Könnte ein Problem der libvirt Version 0.8.x sein. Laut
> https://bugzilla.redhat.com/show_bug.cgi?id=676205 ist das Verhalten in 0.9.0
> verbessert, allerdings lässt sich im changelog kein konkreter Hinweis dazu
> finden (http://libvirt.org/news.html).

Ich vermute mal "[libvirt] [PATCH 3/6] use virObject to manage reference-count of virDomainObj" aka "[PATCH] qemu: fix a dead-lock problem", weil das genau im Fehlerfall auftritt.
Comment 16 Felix Botner univentionstaff 2011-06-21 09:42:16 CEST
Die Instanzen auf den ausgefallenen Rechner wurden nun immer gelöscht.
Comment 17 Arvid Requate univentionstaff 2011-06-21 09:44:57 CEST
Da der Workaround für Comment 6 in UCS-DVS erstmal ausreicht, im Plattform-Produkt UCS aber behoben werden sollte, gibt es jetzt Bug #22789.