Projet

Général

Profil

Cluster Ganeti » Historique » Version 7

« Précédent - Version 7/135 (diff) - Suivant » - Version actuelle
Mehdi Abaakouk, 17/03/2012 08:43


Maintenance Ganeti

Comment demarrer et arreter une instance ?

Avec les commandes suivantes:

gnt-instance start vm1

et

gnt-instance stop vm1

Comment tout savoir sur une vm ?

gnt-instance info vm1

Comment forcer le déplacement d'une instance sur un machine donnée

Si la machine a ces disques au format plain (sans drbd), taper:

gnt-instance stop vm1
gnt-instance move -n h6 vm1
gnt-instance start vm1

Si la machine utilise drbd (uniquement le disque de la node secondaire bascule):

gnt-instance replace-disks -n h6 vm1

Si vous voulais déplacer l'autre disque du drbd, il faut basculer la machine, puis refaire la même chose

Comment basculer une machine qui utilise drbd pour les disques ?

Bascule avec arret de la machine:

gnt-instance failover vm1

Sans arret, à chaud:
gnt-instance migrate vm1

En cas de soucis primaire/secondaire:
gnt-instance migrate --cleanup vm1

Éteindre/rebooter provisoirement un H? sans coupure de service

On migre toutes les machines de h?

gnt-node migrate h?

On éteint
shutdown -h now

On rallume et on rééquilibre le cluster sans déplacement de disque
hbal -L --no-disk-moves -X

La liste ici est presque identique à celle de "gnt-node migrate"
hbal exécute des "gnt-instance migrate"
Les synchro drbd sont automatique.

Comment vérifier l'état de son cluster

Sur le masternode normalement h1 faire:

gnt-cluster verify

Comment supprimer une machine

gnt-instance remove vm1

si la vm est en drbd et que une des nodes du drbd ne fonctionne plus
gnt-instance remove --ignore-failures vm1

Mon dieu h2 est tombé que faire ?

On bascule les machines qui n'ont pas le failover en automatique

gnt-node failover [ --ignore-consistency ] h2

--ignore-consistency permet de forcer ganeti à ne pas contrôler le disk avant le basculement
Puis on désactive la node:
gnt-node modify -O yes h2

h2 est tombé et ne pourra être rallumé rapidement, que faire ?

Je commence par relancer la machine sur sa node secondaire si ce n'est pas encore fais.
La machine virtuelle vm1 étant hébergé sur h2 et h4 je vais déplacer le disque redondant de h2 vers h?

gnt-instance replace-disks -I hail vm1

aie, c'est h1 qui est tombé et c'est le masternode

On peux changer le masternode, allez sur h4 par exemple et taper ceci:

gnt-node masterfailover

Gestion des fichiers de configuration (ie: /etc/ganeti)

J'ai modifié un(ou plusieurs) fichier(s) de configuration de ganeti, et je tape:

/etc/ganeti/pushconf.sh

Je viens de recevoir h48, et je veux taper le moins de commande possible

  • Installer squeeze basique avec juste ssh
  • Ajouter wheezy dans /etc/apt/sources.list
# deb http://ftp.fr.debian.org/debian/ squeeze main
deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
deb http://ftp.fr.debian.org/debian/ sid main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ sid main contrib non-free
deb http://ftp.de.debian.org/debian-backports/ squeeze-backports main contrib non-free
deb-src http://ftp.de.debian.org/debian-backports/ squeeze-backports main contrib non-free
deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main
# squeeze-updates, previously known as 'volatile'
deb http://ftp.fr.debian.org/debian/ squeeze-updates main
deb-src http://ftp.fr.debian.org/debian/ squeeze-updates main
  • Allouer un port avec 3131, 3175, 3195 tagged sur le procurve
  • Monter le reseau manuellement IP X
ip link add link eth0 name eth0.3131 type vlan id 3131
ip link set eth0.3131 up
ip addr add 91.224.149.15X/25 dev eth0.3131
  • Creer /etc/rc.local.conf avec X et Y
IP_3131="91.224.149.15X/25" 
GW_3131="91.224.149.254" 
IP_3175="192.168.3.Y/24" 
KVM_DISKS="sdb" 
  • Installer les packages
#TODO liste en fichier commit qqpart
#TODO: passer a une version compilée en local de ganeti pour eviter les update de version wheezy
dpkg --get-selections | ssh root@h48 dpkg --set-selections
ssh root@h48 apt-get dselect-upgrade
  • changer le filter lvm dans /etc/lvm/lvm.conf pour
# filter = [ "a/.*/" ]
filter = ["r|/dev/cdrom|", "r|/dev/drbd[0-9]+|" ]
  • vider le volume group et le recreer
pvs
vgs
lvs
lvremove
vgcreate kvmvg /dev/sdb... #TODO check
  • activer drbd
echo "drbd minor_count=128 usermode_helper=/bin/true" >> /etc/modules
  • munin:
    dans /etc/munin/munin-node.conf ajouter: allow ^91\.224\.149\.194$
  • TODO patch munin Loic
    http://trac.fsffrance.org/wiki/PatchInventory#Munin
  • reboot
  • Installer le node dans le cluster ganeti apres s'etre assure que la version de ganeti est bien la meme
dpkg -l|grep -i ganeti
gnt-node add h48
/etc/ganeti/pushconf.sh

Appliquer ce patch à ganeti-instance-debootstrap:

--- /usr/share/ganeti/os/debootstrap/common.sh.ori  2010-09-15 22:34:12.000000000 +0200
+++ /usr/share/ganeti/os/debootstrap/common.sh  2011-07-27 12:33:55.695617766 +0200
@@ -91,7 +91,7 @@
# some versions of sfdisk need manual specification of
# head/sectors for devices such as drbd which don't
# report geometry
-  sfdisk -H 255 -S 63 --quiet --Linux "$1" <<EOF
+  sfdisk -H 255 -S 63 -D --quiet --Linux "$1" <<EOF
0,,L,*
EOF
}

Ci dessous ajouter dkms et r8168 si necessaire.

Ma premiére VM++, upgrade disk, net, cpu, mem

Et hop une nouvelle carte réseau sur le vlan tsf

gnt-instance  modify --net add:link=br1 vm1

Un petit disk en plus
gnt-instance  modify --disk add:size=50G vm1

Un petite upgrade cpu et mémoire
gnt-instance modify -B vcpus=2,memory=512M vm1
gnt-instance reboot -t full vm1

L'extinction d'une node proprement pas à pas

gnt-node failover h2
gnt-node evacuate -I hail h2
gnt-node modify -O yes h2

J'ai fini de réparer h2, et je me rappelle plus les vm qui était dessus

Ben, on s'en fou, ganeti est la:

gnt-node modify -O no h2
hbal -L -X
Je voudrais bien booter mon kernel ! ou un cdrom
Je peux désactivé le kernel commun pour une vm
gnt-instance modify -H kernel_path="" vm1

Ou booter sur le cdrom pour le prochain démarrage commme ceci:
gnt-instance start -H boot_order=cdrom,cdrom_image_path=/path/to/debian-504-amd64-netinst.iso vm1

Importer une image disque venant de l’extérieur

Convertion de l'image au format raw (si c'est pas déjà le cas)

kvm-img convert DISQUEVM.qcow -O raw DISQUEVM.raw

Copie du disque au format raw sur un lvm

size=$(kvm-img info DISQUEVM.raw | sed -n -e 's/^virtual size:[^(]*(\([[:digit:]]*\).*)/\1/gp')
lvcreate -L ${size}b -n lv_migration_DISQUEVM kvmvg
dd if=DISQUEVM.raw of=/dev/kvmvg/lv_migration_DISQUEVM

Création de la VM

gnt-instance add -B memory=512M --no-start -t plain -n $(hostname) --disk 0:adopt=lv_migration_DISQUEVM --net 0 -o debootstrap+default VMNAME.tetaneutral.net

Et pour finir, on transforme le format de disque de la VM en drbd:

gnt-instance modify -t drbd -n h6 VMNAME.tetaneutral.net

Copier un VM sur une autre machine (§ en cours, c'est pas terminée)

On regarde ou tourne la VM:

gnt-instance list sileht2
Instance                Hypervisor OS                  Primary_node       Status     Memory
sileht2.tetaneutral.net kvm        debootstrap+default h1.tetaneutral.net UP         256M

Ensuite on lance un backup de celle-ci (cette commande éteint la machine):

gnt-backup export -n h1 sileht2

Pour kvm, on peut lancer la VM comme ca:

kvm -m 256 -drive file=*sileht.raw*,format=raw,if=virtio,boot=on,cache=writeback -usbdevice tablet -netdev type=tap,id=netdev0,fd=10 -device virtio-net-pci,mac=*aa:00:00:62:e3:a0*,netdev=netdev0

Monter une partition de machine virtuelle sur la machine hôte (!Attention DANGER!)

Arret de la machine et activation des disques

 $ gnt-instance stop VMNAME.tetaneutral.net
 $ gnt-instance activate-disks VMNAME.tetaneutral.net
 h1.tetaneutral.net:disk/0:/dev/drbd34

Ensuite pour voir les partitions du disque, ici le /dev/drbd34:

kpartx -l /dev/drbd34

On créé ensuite les partitions dans /dev avec devmapper

kpartx -a /dev/drbd34
ls -la /dev/mapper/drbd34*

A partir de maintenant on peut faire mumuse avec la partition, exemple:

mount /dev/mapper/drbd34p1 /mnt/
....
umount /mnt

Puis très important, il faut nettoyer devmapper et déactiver les disk pour ganeti

kpartx -d /dev/drbd34
gnt-instance deactivate-disks VMNAME.tetaneutral.net
gnt-instance start VMNAME.tetaneutral.net

J'ai n'est pas trouvé mon bonheur, comment je vais faire ?!

Voici quelques ressources:

Autres chose à savoir sur les machines du cluster

le script /etc/rc.local, qui s'occupe de préparer la configuration réseaux pour ganeti (avec les vlan, bridge and co)
le script /etc/rc.local.conf, contient les adresses IP de la machine et les gw
Sur h1,h2,h4,h5 et h6, le pilote (r8169.ko) de la carte réseau (r8168/8111) provoque des kernels panic, il a été remplacé la version du constructeur (r8168.ko).
Pilote dispo ici: (http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false)

apt-get install gcc dkms
cd /usr/src
wget http://url_to_pilot/r8168-8.024.00.tar.bz2
tar -xjf r8168-8.024.00.tar.bz2
cd r8168-8.024.00
cat > dkms.conf << EOF
PACKAGE_NAME=r8168
PACKAGE_VERSION=8.024.00
MAKE[0]="make" 
BUILT_MODULE_NAME[0]=r8168
BUILT_MODULE_LOCATION[0]="src/" 
DEST_MODULE_LOCATION[0]="/kernel/updates/dkms" 
AUTOINSTALL="YES" 
EOF
dkms add -m r8168 -v 8.024.00
dkms build -m r8168 -v 8.024.00
dkms install -m r8168 -v 8.024.00
echo "r8168" >> /etc/modules
echo "blacklist r8169" >> /etc/modprobe.d/blacklist-network.conf
update-initramfs -u
reboot

Pour les machines a base de e1000e:

apt-get install gcc dkms
cd /usr/src
wget http://downloadmirror.intel.com/15817/eng/e1000e-1.3.17.tar.gz
tar -xzf e1000e-1.3.17.tar.gz
cd e1000e-1.3.17
cat > dkms.conf << EOF
PACKAGE_NAME=e1000e
PACKAGE_VERSION=1.3.17
CLEAN="make -C src/ clean" 
MAKE[0]="make -C src/" 
BUILT_MODULE_NAME[0]=e1000e
BUILT_MODULE_LOCATION[0]="src/" 
DEST_MODULE_LOCATION[0]="/kernel/updates/dkms" 
AUTOINSTALL="YES" 
EOF
dkms add -m e1000e -v 1.3.17
dkms build -m e1000e -v 1.3.17
dkms install -m e1000e -v 1.3.17
reboot

Mac spoofing configuration

Le script ifup de ganeti pour kvm a été modifier (ie: /etc/ganeti/kvm-vif-bridge) pour écrire la relation entre la vm, le numero de ces interfaces réseaux et ces tap.
Le fichier prends la forme suivante:
munin.tetaneutral.net:0:tap3
trac.tetaneutral.net:0:tap5
munin.tetaneutral.net:1:tap5
Les règles ebtables sont écrites par le script /etc/ganeti/spoofing/spoofing-protection avec les informations de ce fichier.
Les scripts de hook de ganeti (ie:/etc/ganeti/hook/) utilise ce script, pour lancer ou arreter le spoofing.

Protection VNC

Le VNC de kvm est utiliser sur chaque MV.
Des règles de firewall sont automatiquement mise en place par le script /etc/ganeti/vnc-firewall pour que seul la machine gntwebmgr.tetaneutral.net soit autoriser a s'y connecter
Ce script est appelé par les hooks ganeti.

Patch maison pour ganeti

Ajout de l'option -D à sfdisk au script /usr/share/ganeti/os/debootstrap/common.sh ligne 84 pour créer des partitions avec assez d'espace pour grub