Gibt es eine API unter KVM einen ZoneID zu erhalten?
-
12-10-2019 - |
Frage
Wenn Zoning unter Solaris verwendet, wird die Host-ID nicht durch Zone ändern, sondern Sie auch erhalten (über einen Funktionsaufruf, getzoneid ()) eine einzigartige zoneid für Ihre Zone.
Mit KVM unter Linux, die Host-ID ändert (Schritte) von Zone - was ziemlich gut ist, aber es ist nicht perfekt -. Sie mit jemandem anderem hostid kollidieren könnten
Es gibt eine API von KVM zur Verfügung gestellt, die mir ermöglicht eine zoneid zu bekommen?
Lösung
In Bezug auf Ihre Bedenken über doppelten hostids:
Im Gegensatz zu Solaris, der Linux-Kernel bietet keine "gethostid" nennen. Stattdessen "gethostid" (vom /usr/bin/hostid
Programm verwendet) ist implementiert von glibc , die versucht, zu:
- Sie fest, ob eine feste Datei (
/etc/hostid
auf meinem System) vorhanden ist; wenn ja, verwendet den 4-Byte-Wert dort; - in Ermangelung eines solchen, versucht, eine Host-ID erstellen auf der Grundlage der IP-Adresse des Systems;
- Gelingt das nicht, wird eine Host-ID von
0
.
Das bedeutet, dass, wenn jedes System eine eindeutige IP-Adresse hat, wird sie auch eine einzigartige Host-ID hat.
Wenn Sie Ihre Systeme keine eindeutigen IP-Adressen haben, können Sie immer noch die Host-ID außer Kraft setzen, indem Sie den sethostid
glibc-Bibliothek-Aufruf (die in die Datei schreibt gelesen von Schritt (1) von gethostid
Algorithmus glibc oben).
Im Hinblick auf die zoneid einer KVM-Instanz holen:
Im Gegensatz zu Solaris Zonen (wo alle Instanzen den gleichen Kernel teilen), jede Instanz von KVM läuft seine eigene Kopie des Linux-Kernels, von denen alle anderen Instanzen nicht bewusst sind aktiv. Soweit ich weiß, gibt es keine direkte Entsprechung eines Solaris zoneid, da jede Linux-Instanz keine Möglichkeit der Zusammenarbeit mit anderen Linux-Instanzen hat.
Wenn Sie eine eindeutige Kennung für jede ausgeführte KVM Instanz benötigen, einige Optionen sind:
-
Abrechnung nur für die IP-Adresse / Host-ID, wie oben beschrieben;
-
Beim Einrichten / Booten Ihre Instanzen, erzeugen ein UUID für das System mit
uuidgen
und es an einem sicheren Ort auf dem Dateisystem speichern. , so erzeugt UUID wird nie mit sehr hoher Wahrscheinlichkeit andere UUID übereinstimmen
-
Wenn jede Instanz des Systemstarts auf der Kernel-Befehlszeile übergibt in eine manuell aufgebauten eindeutige Kennung für die Instanz (das
-append
KVM Befehlszeilenargument verwenden). Dies kann später von/proc/cmdline
abgerufen werden.