Mate (Server)/Technische Doku: Unterschied zwischen den Versionen

Aus RaumZeitLabor Wiki
KKeine Bearbeitungszusammenfassung
 
(4 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 20: Zeile 20:
<pre>
<pre>
virt-install --connect qemu:///system --name=$VMNAME --ram=$VMMEM --vcpus=1 \
virt-install --connect qemu:///system --name=$VMNAME --ram=$VMMEM --vcpus=1 \
--disk path=/srv/vm/$VMNAME.img,format=raw,cache=none,bus=virtio --os-type $VMOSTYPE \
--disk path=/srv/vm/$VMNAME.img,format=raw,cache=writeback,bus=virtio --os-type $VMOSTYPE \
--os-variant $VMOSVARIANT  --network=bridge=br0,model=virtio --nographics \
--os-variant $VMOSVARIANT  --network=bridge=br0,model=virtio --nographics \
--location $VMINSTALLER \
--location $VMINSTALLER \
Zeile 42: Zeile 42:
* Das '''Platten-Image''' muß '''raw''' und '''pre-allokiert''' sein. qcow2 und dynamische Allokierung ist wirklich langsam.
* Das '''Platten-Image''' muß '''raw''' und '''pre-allokiert''' sein. qcow2 und dynamische Allokierung ist wirklich langsam.
* Der Modus des Festplatten-Controllers muß '''virtio''' sein (Achtung: Die Platten in den VMs sind dann '''vda, vdb etc''' anstatt '''sda, sdb etc''')
* Der Modus des Festplatten-Controllers muß '''virtio''' sein (Achtung: Die Platten in den VMs sind dann '''vda, vdb etc''' anstatt '''sda, sdb etc''')
* Das '''Plattenimage''' muß den '''Cache-Modus''' auf '''none''' gesetzt haben ('''<driver name='qemu' type='raw' cache='none'/>''')
* Das '''Plattenimage''' muß den '''Cache-Modus''' auf '''writeback''' gesetzt haben ('''<driver name='qemu' type='raw' cache='writeback'/>''')
* Der Typ des '''Netzwerkinterfaces''' muß '''virtio''' sein ('''<model type='virtio'/>''')
* Der Typ des '''Netzwerkinterfaces''' muß '''virtio''' sein ('''<model type='virtio'/>''')
=== In der VM selbst ===
=== In der VM selbst ===
* '''Default-Scheduler von cfq auf noop''' (Kernel-Parameter elevator=noop <ref name="KER-PAR-01">[http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#796 Dokumentation zum Kernel-Parameter elevator] </ref> in '''/etc/default/grub''' setzen, danach '''update-grub2''' ausführen)
* '''Default-Scheduler von cfq auf noop''' (Kernel-Parameter elevator=noop <ref name="KER-PAR-01">[http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#796 Dokumentation zum Kernel-Parameter elevator] </ref> in '''/etc/default/grub''' setzen, danach '''update-grub2''' ausführen)
Zeile 126: Zeile 127:
* Restore mittels folgendem Snippet starten: <pre>restore where=/ client=<name, z.b. infra.rzl> replace=always all</pre> Danach die Option "5" drücken und entsprechenden Client auswählen. Beim folgenden Prompt einfach "done" eintippen und den Job starten
* Restore mittels folgendem Snippet starten: <pre>restore where=/ client=<name, z.b. infra.rzl> replace=always all</pre> Danach die Option "5" drücken und entsprechenden Client auswählen. Beim folgenden Prompt einfach "done" eintippen und den Job starten
* grub2-config neu generieren, da sich die UUIDs geändert haben. update-grub2 unter Debian
* grub2-config neu generieren, da sich die UUIDs geändert haben. update-grub2 unter Debian
* grub-install /dev/vda ausführen
* in /etc/fstab die neuen UUIDs eintragen
* VM runterfahren
* VM runterfahren
* Alte VM-config umkopieren
* Alte VM-config umkopieren
Zeile 135: Zeile 138:
== Einzelnachweise ==
== Einzelnachweise ==
<references />
<references />
[[Kategorie:Wiki_Cleanup/ToDo]]
[[Kategorie:Archäologie]]
[[Kategorie:Infrastruktur]]

Aktuelle Version vom 12. Dezember 2023, 22:14 Uhr

Neue Debian-VM ohne GUI, nur mittels shell installieren (serielle console)

Vor der Installation neues, leeres Image anlegen (Images liegen unter /srv/vm):

export VMNAME=foobar
export VMSIZE=20G
export VMMEM=256
export VMOSTYPE=linux
export VMOSVARIANT=debianwheezy
export VMINSTALLER=http://ftp.de.debian.org/debian/dists/wheezy/main/installer-amd64/
fallocate -l $VMSIZE /srv/vm/$VMNAME.img

Dann Netzinstallation starten:

virt-install --connect qemu:///system --name=$VMNAME --ram=$VMMEM --vcpus=1 \
--disk path=/srv/vm/$VMNAME.img,format=raw,cache=writeback,bus=virtio --os-type $VMOSTYPE \
--os-variant $VMOSVARIANT  --network=bridge=br0,model=virtio --nographics \
--location $VMINSTALLER \
--extra-args="console=tty0 console=ttyS0,115200n8" -v

Besondere Einstellungen auf dem Hypervisor

Die Default-Linux-Einstellungen (bzw die von Debian) sind etwas ungünstig für Performance. Folgendes sollte geändert werden:

  • Default-Scheduler von cfq auf deadline (Kernel-Parameter elevator=deadline <ref name="KER-PAR-01">Dokumentation zum Kernel-Parameter elevator </ref> in /etc/default/grub setzen, danach update-grub2 ausführen)
  • Hugepages erlauben (in /etc/rc.local) <ref name=KVM-TUN-01">KVM Memory Tuning</ref>:
    • echo 1 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag
    • echo always > /sys/kernel/mm/transparent_hugepage/enabled
    • echo never > /sys/kernel/mm/transparent_hugepage/defrag
  • Prüfen, ob das Modul vhost_net geladen ist

Besondere Einstellungen auf den virtuellen Maschinen

In der Config für die VM

  • Das Platten-Image muß raw und pre-allokiert sein. qcow2 und dynamische Allokierung ist wirklich langsam.
  • Der Modus des Festplatten-Controllers muß virtio sein (Achtung: Die Platten in den VMs sind dann vda, vdb etc anstatt sda, sdb etc)
  • Das Plattenimage muß den Cache-Modus auf writeback gesetzt haben (<driver name='qemu' type='raw' cache='writeback'/>)
  • Der Typ des Netzwerkinterfaces muß virtio sein (<model type='virtio'/>)

In der VM selbst

  • Default-Scheduler von cfq auf noop (Kernel-Parameter elevator=noop <ref name="KER-PAR-01">Dokumentation zum Kernel-Parameter elevator </ref> in /etc/default/grub setzen, danach update-grub2 ausführen)
  • Tickless Kernel aktivieren (Kernel-Parameter nohz=on <ref name="KER-PAR-02">Dokumentation zum Kernel-Parameter nohz </ref> in /etc/default/grub setzen, danach update-grub2 ausführen)
  • Prüfen, ob die Module virtio-blk und virtio-net geladen sind
  • Serielle Konsole in /etc/inittab aktivieren: T0:23:respawn:/sbin/getty -L ttyS0 115200 vt102
  • Serielle Konsole zusätzlich zur normalen Konsole aktivieren (in /etc/default/grub), wenn man schon dabei ist, kann man auch grub serial beibringen:
    GRUB_TERMINAL=serial
    GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
    sowie
    console=ttyS0,115200n8 console=tty0

Für die faulen Hunde, wie ich einer bin, hier nochmal der komplette GRUB_CMDLINE-Kram:

GRUB_CMDLINE_LINUX_DEFAULT="elevator=noop nohz=on transparent_hugepage=always console=ttyS0,115200n8 console=tty0"

<blink>DON'T FORGET THE MAGIC update-grub2</blink>

Puppet

Um eine VM unter die Kontrolle von Puppet zu bekommen, ist folgendes zu erledigen:
  • mate.rzl:/etc/puppet/manifests/nodes.pp: die Node eintragen
  • <neuevm>.rzl:
    • Puppet installieren
    • Deamon Autostart in /etc/default/puppet aktivieren
    • puppet agent --test ausführen
  • mate.rzl:
    #Liste der neuen Zertifikate:
    puppet cert list
    
    #Zertifikat signieren:
    puppet cert sign <neuevm.rzl>
  • <neuevm.rzl>: Nochmal puppet agent --test ausführen

Wenn alles geklappt hat, so wird puppet zumindest mal alle fehlenden Pakete nachinstallieren.

Zabbix

Um eine VM zu monitoren:

  • Ändere in der Datei /etc/zabbix/zabbix_agentd.conf den Parameter "Server" auf "172.22.36.251" und den Parameter "Hostname" auf den hostnamen inkl. .rzl-Domain
  • Füge den Server in Zabbix hinzu (Configuration->Hosts->Create), linke die Templates Template_Linux sowie Template_Puppet_Agent

Bacula backups

  • Config-Änderungen auf mate:
    • in /etc/bacula/clients die jeweilige Config umkopieren und die Namen sowie das Director-Passwort ändern
    • die leeren files in /etc/bacula/clients/includes sowie excludes erzeugen
    • in /etc/bacula/bacula-dir.conf das neue config file includen
    • bacula neustarten
    • Das file /etc/puppet/templates/bacula-fd_conf.erb in die VM kopieren und die Variablen ersetzen
  • In der VM:
    • /etc/init.d/bacula-fd restart
    • prüfen, ob bacula-fd auf 0.0.0.0:9102 lauscht (bei Fehlern lauscht er nur auf localhost)

Schließlich über bconsole, danach run den entsprechende Job auswählen und testweise laufen lassen.

Bacula restores

Achtung: Die Anleitung ist nicht optimal. Idealerweise bootet man ein Recovery Image, damit man keine neue VM aufsetzen muß, sondern diese direkt Recovern kann.

Um eine komplette VM wiederherzustellen ohne vorhandenes Disk-Image:

  • Alte VM-Konfiguration sichern! (wegen allen Einstellungen/MAC-Adresse etc)
  • Neue, blanke VM mittels virt-install installieren
  • Bacula-fd installieren
  • Folgende Config in /etc/bacula/bacula-fd.conf legen:
Director {
	Name = cookiemonster.rzl
	Password = "Passwort aus der Client-config auf cookiemonster"
}

FileDaemon {
	Name = <lokaler host, z.b. infra.rzl>
	FDport = 9102
	WorkingDirectory = /var/lib/bacula
	Pid Directory = /var/run/bacula
	Maximum Concurrent Jobs = 20
}

Messages {
  Name = Standard
  director = cookiemonster.rzl = all, !skipped, !restored
}
  • Bacula-fd auf dem Client neu starten
  • Restore mittels folgendem Snippet starten:
    restore where=/ client=<name, z.b. infra.rzl> replace=always all
    Danach die Option "5" drücken und entsprechenden Client auswählen. Beim folgenden Prompt einfach "done" eintippen und den Job starten
  • grub2-config neu generieren, da sich die UUIDs geändert haben. update-grub2 unter Debian
  • grub-install /dev/vda ausführen
  • in /etc/fstab die neuen UUIDs eintragen
  • VM runterfahren
  • Alte VM-config umkopieren
  • VM starten

TODO

  • Automatisches Discovery von VMs in Zabbix?

Einzelnachweise

<references />