Cluster Management · 7 min read · Jan 30, 2026
Xen Cluster Management Mit Ganeti Auf Debian Lenny
Xen Cluster Management Mit Ganeti Auf Debian Lenny
Version 1.0
Autor: Falko Timme
Ganeti ist ein Cluster-Virtualisierungsmanagementsystem, das auf Xen basiert. In diesem Tutorial werde ich erklären, wie man eine virtuelle Xen-Maschine (genannt Instanz) auf einem Cluster von zwei physischen Knoten erstellt und wie man diese Instanz zwischen den beiden physischen Knoten verwaltet und failover.
Dieses Dokument kommt ohne jegliche Gewährleistung! Ich gebe keine Garantie, dass dies bei Ihnen funktioniert!
[Update 21.01.2010] Ich habe eine Nachricht vom Ganeti-Entwicklungsteam erhalten:
“ […] In den letzten Monaten haben wir leider festgestellt, dass Menschen versuchen, Ihre Anweisungen genau zu befolgen und am Ende alte oder sehr alte Versionen von Ganeti installieren. Könnten Sie bitte beide Tutorials mit Hinweisen aktualisieren, die besagen, dass sie nicht für neuere Ganeti-Versionen aktualisiert wurden, und die Leute bitten, sich die aktuelle Dokumentation auf http://docs.ganeti.org/ganeti/? anzusehen. “
Dieses Tutorial basiert auf einer alten Version von Ganeti. Bitte beziehen Sie sich auf die aktuelle Dokumentation auf http://docs.ganeti.org/ganeti/.
1 Vorbemerkung
In diesem Tutorial werde ich die physischen Knoten node1.example.com und node2.example.com verwenden:
- node1.example.com: IP-Adresse 192.168.0.100; wird der Master des Clusters sein.
- node2.example.com: IP-Adresse 192.168.0.101; wird der primäre Knoten der virtuellen Maschine (aka Instanz) sein.
Beide haben eine 500GB-Festplatte, von der ich 20GB für die /-Partition, 1GB für Swap verwende und den Rest unpartitioniert lasse, damit er von Ganeti verwendet werden kann (das Minimum sind 20GB!). Natürlich können Sie die Partitionierung nach Ihren Wünschen ändern, aber denken Sie an den Mindestwert des ungenutzten Speicherplatzes.
Der Cluster, den ich erstellen werde, wird cluster1.example.com heißen und die IP-Adresse 192.168.0.102 haben. Die Cluster-IP 192.168.0.102 wird immer an den Cluster-Master gebunden sein, sodass Sie, selbst wenn Sie nicht wissen, welcher Knoten der Master ist, die Cluster-IP (oder den Hostnamen cluster1.example.com) verwenden können, um sich über SSH mit dem Master zu verbinden.
Die Xen-virtuelle Maschine (in Ganeti-Sprache als Instanz bezeichnet) wird inst1.example.com heißen mit der IP-Adresse 192.168.0.105. inst1.example.com wird zwischen den beiden physischen Knoten mit DRBD gespiegelt - Sie können dies als eine Art Netzwerk-RAID1 betrachten.
Wie Sie sehen, wird node1.example.com der Cluster-Master sein, d.h. die Maschine, von der aus Sie den Cluster steuern und verwalten können, und node2.example.com wird der primäre Knoten von inst1.example.com sein, d.h. inst1.example.com wird auf node2.example.com laufen (mit allen Änderungen an inst1.example.com, die mit DRBD zurück zu node1.example.com gespiegelt werden), bis Sie es zu node1.example.com failover (wenn Sie node2.example.com beispielsweise für Wartungsarbeiten herunternehmen möchten). Dies ist eine aktive-passive Konfiguration.
Ich denke, es ist eine gute Praxis, die Rollen zwischen den beiden Knoten aufzuteilen, damit Sie den Cluster-Master und den primären Knoten nicht gleichzeitig verlieren, falls ein Knoten ausfällt.
Es ist wichtig, dass alle hier genannten Hostnamen von allen Hosts auflösbar sind, was bedeutet, dass sie entweder im DNS existieren müssen oder Sie müssen alle Hostnamen in allen /etc/hosts-Dateien auf allen Hosts eintragen (was ich hier tun werde).
Alle Cluster-Knoten müssen dasselbe Netzwerk-Interface verwenden (z.B. eth0). Wenn ein Knoten eth0 und der andere eth1 verwendet, funktioniert Ganeti nicht mehr korrekt.
Ok, lassen Sie uns anfangen…
2 Vorbereitung Der Physischen Knoten
node1:
Ich möchte, dass node1 die statische IP-Adresse 192.168.0.100 hat, daher sieht meine /etc/network/interfaces-Datei wie folgt aus (bitte beachten Sie, dass ich allow-hotplug eth0 durch auto eth0 ersetzt habe; andernfalls funktioniert das Neustarten des Netzwerks nicht, und wir müssten das gesamte System neu starten):
vi /etc/network/interfaces| # Die Loopback-Netzwerkschnittstelle auto lo iface lo inet loopback # Die primäre Netzwerkschnittstelle #allow-hotplug eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 |
Wenn Sie die Datei geändert haben, starten Sie Ihr Netzwerk neu:
/etc/init.d/networking restartDann bearbeiten Sie /etc/hosts. Lassen Sie es wie folgt aussehen:
vi /etc/hosts| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 node1.example.com node1 192.168.0.101 node2.example.com node2 192.168.0.102 cluster1.example.com cluster1 192.168.0.105 inst1.example.com inst1 # Die folgenden Zeilen sind wünschenswert für IPv6-fähige Hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |
Als nächstes müssen wir sicherstellen, dass die Befehle
hostnameund
hostname -fden vollständigen Hostnamen (node1.example.com) ausgeben. Wenn Sie etwas anderes erhalten (z.B. nur node1), tun Sie dies:
echo node1.example.com > /etc/hostname
/etc/init.d/hostname.sh startDanach sollten die Hostnamen-Befehle den vollständigen Hostnamen anzeigen.
Dann aktualisieren Sie das System:
aptitude updateaptitude safe-upgradenode2:
Jetzt machen wir dasselbe wieder auf node2.example.com (bitte beachten Sie, dass node2 eine andere IP hat!):
vi /etc/network/interfaces| # Die Loopback-Netzwerkschnittstelle auto lo iface lo inet loopback # Die primäre Netzwerkschnittstelle #allow-hotplug eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.0.101 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 |
/etc/init.d/networking restartvi /etc/hosts| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 node1.example.com node1 192.168.0.101 node2.example.com node2 192.168.0.102 cluster1.example.com cluster1 192.168.0.105 inst1.example.com inst1 # Die folgenden Zeilen sind wünschenswert für IPv6-fähige Hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |
echo node2.example.com > /etc/hostname
/etc/init.d/hostname.sh startaptitude updateaptitude safe-upgrade3 Einrichtung Von LVM Auf Dem Freien HDD-Speicher
node1/node2:
Lassen Sie uns mehr über unsere Festplatte herausfinden:
fdisk -lnode1:~# fdisk -l
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00023cd1
Device Boot Start End Blocks Id System
/dev/sda1 * 1 62 497983+ 83 Linux
/dev/sda2 63 6141 48829567+ 8e Linux LVM
node1:~#Wir werden jetzt die Partition /dev/sda3 (auf beiden physischen Knoten) mit dem Rest der Festplatte erstellen und für LVM vorbereiten:
fdisk /dev/sdanode1:~# fdisk /dev/sda
Die Anzahl der Zylinder für diese Festplatte ist auf 60801 gesetzt.
Es ist nichts falsch damit, aber es ist größer als 1024,
und könnte in bestimmten Setups Probleme verursachen mit:
- Software, die beim Booten läuft (z.B. alte Versionen von LILO)
- Boot- und Partitionierungssoftware von anderen OSs
(z.B. DOS FDISK, OS/2 FDISK)
Command (m für Hilfe): <– n
Command action
e extended
p primary partition (1-4)
<– p
Partition number (1-4): <– 3
First cylinder (6142-60801, default 6142): <– ENTER
Using default value 6142
Last cylinder or +size or +sizeM or +sizeK (6142-60801, default 60801): <– ENTER
Using default value 60801
Command (m für Hilfe): <– t
Partition number (1-4): <– 3
Hex code (type L to list codes): <– L
0 Empty 1e Hidden W95 FAT1 80 Old Minix be Solaris boot
1 FAT12 24 NEC DOS 81 Minix / old Lin bf Solaris
2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
5 Extended 41 PPC PReP Boot 85 Linux extended c7 Syrinx
6 FAT16 42 SFS 86 NTFS volume set da Non-FS data
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
8 AIX 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM df BootIt
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS access
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f W95 Ext’d (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT
1c Hidden W95 FAT3 75 PC/IX
Hex code (type L to list codes): <– 8e
Changed system type of partition 3 to 8e (Linux LVM)
Command (m für Hilfe): <– w
Die Partitionstabelle wurde geändert!
Aufruf von ioctl(), um die Partitionstabelle erneut zu lesen.
WARNUNG: Das erneute Lesen der Partitionstabelle ist mit Fehler 16 fehlgeschlagen: Gerät oder Ressource beschäftigt.
Der Kernel verwendet weiterhin die alte Tabelle.
Die neue Tabelle wird beim nächsten Neustart verwendet.
Synchronisieren der Festplatten.
node1:~#
Jetzt schauen wir uns unsere Festplatte erneut an:
fdisk -l
node1:~# fdisk -l
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00023cd1
Device Boot Start End Blocks Id System
/dev/sda1 * 1 62 497983+ 83 Linux
/dev/sda2 63 6141 48829567+ 8e Linux LVM
/dev/sda3 6142 60801 439056450 8e Linux LVM
node1:~#
Sieht gut aus. Jetzt müssen wir beide physischen Knoten neu starten, damit der Kernel die neue Partitionstabelle einlesen kann:
reboot
Nach dem Neustart installieren wir LVM (wahrscheinlich ist es bereits installiert, aber es ist besser, sicherzugehen):
aptitude install lvm2
Nach dem Neustart bereiten wir /dev/sda3 auf beiden Knoten für LVM vor und fügen es zur Volume-Gruppe xenvg hinzu:
pvcreate /dev/sda3
vgcreate xenvg /dev/sda3
(Ganeti möchte eine eigene Volume-Gruppe verwenden, deshalb erstellen wir xenvg; theoretisch könnten wir eine vorhandene Volume-Gruppe mit genügend unzugewiesenem Speicherplatz verwenden, aber der Befehl gnt-cluster verify wird sich darüber beschweren.)Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.