Netzwerk:VM

Aus Hochschule Darmstadt - Fachschaft Informatik Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Ubuntu Xenial Xerus)
(Installation)
Zeile 381: Zeile 381:
 
   (dom0-min-mem 0)
 
   (dom0-min-mem 0)
 
   (enable-dom0-ballooning no)
 
   (enable-dom0-ballooning no)
 +
 +
 +
==== SSH Hacks to Support DSS-Keys in Ubuntu >14.04 ====
 +
Prior to Ganeti 2.16 DSS-Keys are used to communicate between nodes. Ubuntu dropped Support of DSS-Keys in 14.04, so we need to enable it again.
 +
Put the following in all Ubuntu-Nodes' /etc/ssh/sshd_config:
 +
<source lang=bash>
 +
PubkeyAcceptedKeyTypes +ssh-dss
 +
</source>
 +
  
 
==== init the cluster (only on the master node) ====
 
==== init the cluster (only on the master node) ====

Version vom 22. Mai 2017, 14:25 Uhr

Inhaltsverzeichnis

Hardware

  • 2 x Dell R510 Server mit folgender Konfiguration:
  • Festplatten
    • 2x300 GB 15k RPM SAS (RAID1, vgSystem (/dev/sda), 64 KB Stripes)
    • 5x2 TB 7,2k RPM Nearline-SAS (RAID5, vgData (/dev/sdb), 128 KB Stripes)
  • "IP": node1.fbihome.de
  • "IP": node2.fbihome.de
  • siehe auch: Netzwerk:IP-Adressen

Administration

ganeti

Neue VM anlegen

Achtung: vorher: im gateway1 neuen DNS-Recordeintrag für neue IP hinzufügen. Edit unter /etc/bind/zones/db.fbihome.de und auch die Serial am Anfang der Datei verändern, um den Sync der Konfigurationsdateien mit gateway2 zu erreichen. Anschließend /etc/init.d/bind9 reload ausführen. nachher:

  • Unter backup.fbihome.de in /root/Backup/backup-servers die Adresse des Servers eintragen. Achtung: von backup aus auf jeden eingetragenen einmal connecten (known-hosts damit updaten)
  • dpkg-reconfigure locales (en_US.utf8 wählen)
  • dpkg-reconfigure tzdata (Europe, Berlin wählen)

Default (Debian)

gnt-instance add \
  -H xen-pvm \
  -o debootstrap+default \
  -n node1.fbihome.de:node2.fbihome.de \
  --no-wait-for-sync -t drbd \
  --disk 0:size=1g,vg=vgSystem \
  --disk 1:size=1g,vg=vgData \
  --net 0:mac=generate,ip=141.100.40.X,mode=bridged,link=brServer \
  -B memory=512,vcpus=2,auto_balance=true \
  <instance>.fbihome.de
Ist veraltet !

Ubuntu lucid

gnt-instance add \
  -H xen-pvm:kernel_path=/boot/xen/ubuntu-lucid-vmlinuz,initrd_path=/boot/xen/ubuntu-lucid-initrd,root_path=/dev/sda1 \
  -o debootstrap+lucid \
  ...
Ist veraltet !

Ubuntu Xenial Xerus

#-o : Operating System
#-n : Auf welchem Node soll die VM laufen
#-B : Backend Parameters
#> memory : RAM-Speicher
#> vcpu : Anzahl der Virtuellen Kerne
#> auto_balance : bei Ausfall, automatisch auf den anderen Node ausweichen
#
#--disk : Virtuelle Festplatte
#> Size : Größe
#> vg : Physische Festplatte (default vgSystem)
#
#--net: Network Interface
#> mac : MAC-Adresse
#> IP : IP-Adresse
#> mode : Art der Netzwerk übergabe vom Node an die VM
#> link : ?
#
#--no-wait-for-sync : nicht warten, bis die VM gespiegelt wurde
#
#--no-name-check : VM anlegen ohne DNS-Eintrag zu überprüfen
#--no-ip-check : VM anlegen ohne IP-Adresse zu überprüfen
 
 
 
 
gnt-instance add \
  -o debootstrap+xenial \
  -n node1.fbihome.de:node2.fbihome.de \
  --no-wait-for-sync -t drbd \ 
  --disk 0:size=1g,vg=vgSystem \ 
  --disk 1:size=1g,vg=vgData \
  --net 0:mac=generate,ip=141.100.40.X,mode=bridged,link=brServer \
  -B memory=512,vcpus=2,auto_balance=true \
  --no-name-check \
  --no-ip-check \
  <instance>.fbihome.de
 
 
gnt-instance start -H kernel_path=/vmlinuz,initrd_path=/initrd.img,kernel_args="ro single" <instance>.fbihome.de
 
 
gnt-instance console <instance>.fbihome.de 
 
 
ENTER drücken #sonst erscheint keine Ausgabe
# evtl. mehrfach wiederholen
 
root@(<instance>): vim /etc/network/interfaces
# Gateway und DNS ggf anpassen (141.100.40.126 beide!!!)
# unbedingt den Namen des Interfaces auf ens5 ändern!
auto ens5
iface ens5 inet static
        address <IP-Adresse>
        netmask 255.255.255.192
        gateway 141.100.40.126
        dns-nameservers 141.100.40.126
        dns-search fbihome.de
 
 
 
root@(<instance>): vim /etc/hosts 
# alles auskommentieren und danach ip der VM eintragen mit DNS-Namen z.B. 1.1.1.1 cups.fbihome.de cups
    127.0.0.1       localhost
    <IP-Adresse>   <instance>.fbihome.de <instance>
 
 
root@(<instance>): apt-get install grub2
root@(<instance>): update-grub
root@(<instance>): grup-install /dev/vda
 
exit mit "STRG + 5"
 
gnt-instance reboot --shutdown-timeout=30 <instance>.fbihome.de 
 
 
## Auf Service.fbihome.de wechseln
 
    ssh root@service.fbihome.de
 
    vim /etc/bind/zones/db.fbihome.de
 
    # DNS und IP-Adresse eintragen
 
    service bind9 reload
 
    exit
 
exit

Mini Ganeti FAQ

  • Wenn die Partition auf "vgSystem" liegen soll muss dies nicht extra angegeben werden.
  • Wenn man die "/etc/default/ganeti-*" ändert muss dannach die "/var/cache/ganeti-*" gelöscht werden.

Instance Konfiguration anzeigen

gnt-instance info <instance>

NIC hinzufügen

gnt-instance modify --net add:mac=generate,ip=141.100.40.X,mode=bridged,link=brServer <instance>

In die VM Wechseln zur Administration

Info: Login erfolgt als root ohne Passwort:

gnt-instance console <vmname>

Info: Das VM-System wird mit Strg + 5 verlassen.

Festplatte hinzufügen

# add a new X GB disk with
gnt-instance modify --disk add:size=Xg,vg=vgData/vgSystem <instance>


Innerhalb der VM:

# for small (< 2 TB) filesystems create a MSDOS partion table spanning the entire disk:
# Ignore any errors about rereading the partition table, partition block devices will be created by using kpartx
sfdisk -H 255 -S 63 --quiet --force --Linux /dev/xvdX <<EOF
0,,L,*
EOF
 
# for big (>= 2 TB) filesystems create a GPT partition table:
# "Error: Failed to add partition 1 (Invalid argument)" is normal and can be ignored
# Ignore any errors about rereading the partition table, partition block devices will be created by using kpartx
parted /dev/drbdX -s -- mklabel gpt
parted /dev/drbdX -s -- mkpart primary 0 -1
parted /dev/drbdX -s -- print
 
# reboot if the new partition doesn't show up
 
# format partition with raid optimized settings:
# vgSystem:
mkfs.ext4 -b 4096 -E stride=16,stripe-width=16 /dev/xvdX
# vgData:
mkfs.ext4 -b 4096 -E stride=32,stripe-width=128 /dev/xvdX

Festplatte vergrößern

# add X GB to an instances disk
gnt-instance grow-disk <instance> <DiskID> Xg


Innerhalb der VM:

# recreate (resized) partion table
 
# for small (< 2 TB) filesystems create a MSDOS partion table spanning the entire disk:
# Ignore any errors about rereading the partition table, partition block devices will be created by using kpartx
sfdisk -H 255 -S 63 --quiet --force --Linux /dev/xvdX <<EOF
0,,L,*
EOF
 
# for big (>= 2 TB) filesystems create a GPT partition table:
# "Error: Failed to add partition 1 (Invalid argument)" is normal and can be ignored
# Ignore any errors about rereading the partition table, partition block devices will be created by using kpartx
parted /dev/xvdX -s -- mklabel gpt
parted /dev/xvdX -s -- mkpart primary 0 -1
parted /dev/xvdX -s -- print
 
 
X = Laufwerksname
KEINE PARTITIONSNUMMER!!!
 
 
# resize the filesystem
resize2fs /dev/xvdXY

Bestehendes System in VM migrieren

# add instance without checking if the IP is already in use and installing the system
gnt-instance add --no-ip-check --no-install ...
 
# make sure the instance isn't running
gnt-instance shutdown <instance>
 
# make blockdevices available (to Dom0), the output will show the corresponding drbd devices (/dev/drbdX)
gnt-instance activate-disks <instance>
 
# create partitions on the drbd disk devices listed by the activate-disk commands
sfdisk ... /dev/drbdX
 
# activate block devices (read partition table and create partition block devices)
kpartx -av /dev/drbdX
 
# create filesystems on the partitions
mkfs.ext4 -E ... /dev/mapper/drbdXpY
 
# mount the root partition to /mnt/tmp
mount /dev/mapper/drbdXpY /mnt/tmp
 
# create mountpoint directories and mount any additional (non root) partition relative to /mnt/tmp
 
# copy the filesystem from the old to the new server:
rsync -avzHAX --numeric-ids -e "ssh" --exclude="/dev/*" --exclude="/proc/*" --exclude="/sys/*" oldserver.fbihome.de:/ /mnt/tmp
 
# shutdown services and/or remount read only (mount -o remount,ro /dev/...) the old server and sync again
 
# mount special filesystems
mount -o bind /proc /mnt/tmp/proc
mount -o bind /sys /mnt/tmp/sys
mount -o bind /dev /mnt/tmp/dev
 
# generate /etc/iftab
gnt-instance info <instance> | grep "nic/" | awk '{gsub(/,$/,"",$4); gsub(/^br/,"eth",$10); print $10 "\tmac " $4 }' > /mnt/tmp/etc/iftab
 
# enter the new servers environment (chroot)
chroot /mnt/tmp
 
# make sure /etc/inittab contains the hvc0 console (special xen console):
#hvc0:2345:respawn:/sbin/getty 38400 hvc0
# disable the other gettys
 
# install ifrename
aptitude install ifrename
 
# purge any old installed kernel/module packages
aptitude purge linux-modules-... linux-image-...
 
# install correct xen kernel modules
aptitude install linux-modules-2.6.32-5-xen-amd64
 
# purge any grub bootloader packages
 
# make sure the interface names in /etc/network/interfaces match the interfaces in /etc/iftab
 
# update /etc/fstab to use the xen block devices (/dev/xvdXY)
 
# disable root password
passwd -d root
 
# exit the chroot
exit
 
# optional: umount any additional (non root) partition
 
# umount all other directories/root partition
umount /mnt/tmp/proc 
umount /mnt/tmp/dev 
umount /mnt/tmp/sys
umount /mnt/tmp
 
# remove all previously created partition block devices
kpartx -dv /dev/drbdX
 
# deactivate the instances disks
gnt-instance deactivate-disks <instance>
 
# stop/take offline the old server or change the IPs to avoid IP conflicts
 
# start the new server (only if deactivate-disks was successful, otherwise starting the Vm will result in data loss!)
gnt-instance startup <instance>
 
# check the console for any errors
gnt-instance console <instance>


VM Kopieren

Ganeti Export

Ganeti Import

Installation

aptitude install firmware-bnx2 ifenslave vlan bridge-utils \
xen-linux-system-2.6.32-5-xen-amd64 xen-hypervisor-4.0-amd64 \
linux-image-xen-amd64 xen-utils-4.0 ganeti2 drbd8-utils \
ganeti-instance-debootstrap lvm2 iproute iputils-arping \
python python-pyopenssl openssl python-pyparsing \
python-simplejson python-pyinotify socat xen-qemu-dm-4.0

/ets/hostname must contain the full hostname (including domain)

grub

# put xen at the first position (default)
mv /etc/grub.d/10_linux /etc/grub.d/25_linux
 
# configure grub
sed -i /etc/default/grub -e "s/\(GRUB_CMDLINE_LINUX\)=\(.*\)/\1=\"rootdelay=20 maxcpus=1 3\"/g"
sed -i /etc/default/grub -e "s/\(GRUB_CMDLINE_LINUX_DEFAULT\)=\(.*\)/\1=\"\"/g"
cat >> /etc/default/grub <<EOF
 
GRUB_CMDLINE_XEN="dom0_mem=1024M"
GRUB_CMDLINE_XEN_DEFAULT=""
GRUB_DISABLE_OS_PROBER=true
EOF
update-grub2

Dell OM

# smbios von Debian Squezze ist zu alt, daher wird das Ubuntu Paket benutzt.
wget http://linux.dell.com/repo/community/deb/latest/amd64/libsmbios2_2.2.13-0ubuntu4_amd64.deb
wget http://linux.dell.com/repo/community/deb/latest/amd64/smbios-utils_2.2.13-0ubuntu4_amd64.deb
dpkg -i libsmbios2_2.2.13-0ubuntu4_amd64.deb smbios-utils_2.2.13-0ubuntu4_amd64.deb
echo "deb http://linux.dell.com/repo/community/deb/latest /" > /etc/apt/sources.list.d/linux.dell.com.sources.list
aptitude update
aptitude install srvadmin-base srvadmin-idrac srvadmin-storageservices

ganeti

# We need at least version 2.4 to support multiple volume groups
aptitude install ganeti2/unstable ganeti-htools/unstable
# drbd options
echo "options drbd minor_count=255 usermode_helper=/bin/true" > /etc/modprobe.d/drbd.conf
echo "drbd" >> /etc/modules
# domU default kernel/initrd
cd /boot
ln -s vmlinuz-2.6.32-5-xen-amd64 vmlinuz-2.6-xenU 
ln -s initrd.img-2.6.32-5-xen-amd64 initrd-2.6-xenU
# prevent xen from saving instances on shutdown
sed -i /etc/default/xendomains -e "s/\(XENDOMAINS_SAVE\)=\(.*\)/\1=/g"

/etc/xen/xend-config.sxp:

 (xend-relocation-server yes)
 (xend-relocation-port 8002)
 (xend-relocation-address '169.254.1.X')
 (dom0-min-mem 0)
 (enable-dom0-ballooning no)


SSH Hacks to Support DSS-Keys in Ubuntu >14.04

Prior to Ganeti 2.16 DSS-Keys are used to communicate between nodes. Ubuntu dropped Support of DSS-Keys in 14.04, so we need to enable it again. Put the following in all Ubuntu-Nodes' /etc/ssh/sshd_config:

PubkeyAcceptedKeyTypes +ssh-dss


init the cluster (only on the master node)

gnt-cluster init --nic-parameters link=brServer --master-netdev brServer --vg-name vgSystem --enabled-hypervisors=xen-hvm,xen-pvm -s 169.254.1.1 -d cluster1.fbihome.de -m 00:16:3e
gnt-node add -d -s 169.254.1.2 node2.fbihome.de
# fix ganeti default settings
gnt-cluster modify -H xen-hvm:device_model=/usr/lib/xen-4.0/bin/qemu-dm
gnt-cluster modify -H xen-hvm:kernel_path=/usr/lib/xen-4.0/boot/hvmloader
gnt-cluster modify -H xen-pvm:blockdev_prefix=xvd
gnt-cluster modify -H xen-pvm:root_path=/dev/xvda1
gnt-cluster modify -H xen-pvm:initrd_path=/boot/initrd-2.6-xenU
gnt-cluster modify --reserved-lvs=vgSystem/root # don't complain about orphan Dom0 root LVs

ganeti-instance-debootstrap

  • /etc/default/ganeti-instance-debootstrap:
    • MIRROR="http://ftp.fbihome.de/debian"
    • SUITE="squeeze"
    • EXTRA_PKGS="linux-image-xen-amd64 ..." (siehe Serverrichtlinien)
  • /etc/ganeti/instance-debootstrap/hooks/ enthält diverse extra Scripte zum anlegen der DomUs (siehe Serverrichtlinien)
    • Die scripte müssen manuel synchronisiert werden: /usr/local/sbin/syncconfig

ganeti-pygrub

 gnt-cluster modify --hypervisor-parameters \
 xen-pvm:bootloader_path=/usr/bin/pygrub,use_bootloader=False
 gnt-instance modify -H use_bootloader=True instance1.example.com

Update

  • In case grub is updated make sure the xen kernel is still booted first:
    • mv /etc/grub.d/10_linux.dpkg-dist /etc/grub.d/25_linux && update-grub2

Troubleshooting

xend läuf auf nicht auf den slave node(s)

  • Ursache: gnt-cluster redist-conf überschreibt /etc/xen/xend-config.sxp, allerdings unterscheiden sich die IPs des bond1 interfaces.
  • Lösung: xend-relocation-address in der jeweiligen /etc/xen/xend-config.sxp wieder auf die IP des jeweiligen bond1 interfaces setzten und xend neustarten (/etc/init.d/xend restart)

Can't create block device <LogicalVolume(..., not visible, size=2048m)> on node node1.fbihome.de for instance pm.fbihome.de: Can't create block device: Can't compute PV info for vg vgSystem

  • /var/log/ganeti/node-daemon.log contains a line like this one:
    • ERROR Can't get PV information: Can't parse pvs output: line ' /dev/sda2|vgSystem|174628.00|a--v/sdb/dev/sda2|vgSystem|174628.00|'
  • Problem: pvs lvm output is broken
  • workaround:
cat > /usr/local/sbin/pvs <<EOF
#!/bin/sh
# fix pvs output for ganeti
# lvm pvs --noheadings --nosuffix --units=m --unbuffered --separator=\| -o pv_name,vg_name,pv_free,pv_attr
# output creates some garbage with pv_attr as last field
lvm pvs $@ | sed 's/a--.*$/a--/g'
EOF
 
# replace pvs symlink
rm /sbin/pvs
ln -s /usr/local/sbin/pvs /sbin/pvs
Nach einem Update von drbd wird der Symlink wieder auf die alte Datei zurückgesetzt.
/sbin/pvs -> lvm
und muss deswegen neu verlinkt werden

Installation und Einbindung neuer VM-Images

Zunächst muss die aktuelle debootstrap Version upgedated werden. Danach können damit neue Basesysteme installiert werden. Diese gibt es z.B. mit Fokus auf Ubuntu unter http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/ Diese mit dpkg -i installieren.

 debootstrap --arch amd64 precise /temp/minibuntu http://archive.ubuntu.com/ubuntu

Debootstrap installiert wie oben angegeben z.B. das Basesystem von ubuntu 12.04LTS "Precise Penguin" 64bit in einen Temp Ordner. Dies bietet die Grundlage für ein zu erstellendes Basisimage.

Als nächster Schritt muss die Konfiguration vorgenommen werden. Als Grundlage kann ein bestehendes Image einer veralteten Distribution dienen.

Meine Werkzeuge