Cluster Ganeti » Historique » Version 10
« Précédent -
Version 10/135
(diff) -
Suivant » -
Version actuelle
Mehdi Abaakouk, 19/03/2012 15:54
Maintenance Ganeti¶
- Contenu
- Maintenance Ganeti
- Administration des VMs
- Changer les cractéristique d'une VM, upgrade disk, net, cpu, mem
- Administration des serveurs/nodes
- Ãteindre/rebooter provisoirement un des serveurs sans coupure de service
- L'extinction d'une node proprement dans le but de la désactivé du cluster
- Vérifier l'état du cluster
- Change le node principal (masternode) de "ganeti", celui qui permet de lancer des commandes ganeti.
- Gestion des fichiers de configuration (ie: /etc/ganeti, /etc/hosts, /etc/rc.local, ...)
- Désactiver un serveur qui serait HS du cluster provisoirement.
- Réinsertion dans le cluster d'un node désactivé
- Setup d'un nouveau NODE
- Importer une image disque venant de lâextérieur
- Copier un VM sur une autre machine (§ en cours, c'est pas terminée)
- Monter une partition de machine virtuelle sur la machine hôte (!Attention DANGER!)
- J'ai n'est pas trouvé mon bonheur, comment je vais faire ?!
- Autres chose à savoir sur les machines du cluster
- Mac spoofing configuration
- Protection VNC
- Patch maison pour ganeti
Administration des VMs¶
Demarrer et arrêter une instance ?¶
gnt-instance start vm1 gnt-instance stop vm1
Comment tout savoir sur une vm ?¶
gnt-instance info vm1
Déplacement le(s) disque(s) dur d'une VM¶
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
Basculer/migrer une machine qui utilise drbd¶
Bascule avec arret de la machine:
gnt-instance failover vm1
Sans arrêt, migration à chaud:
gnt-instance migrate vm1
En cas de soucis primaire/secondaire:
gnt-instance migrate --cleanup vm1
Création d'une machine¶
Un script est présent sur h1 voici ca doc:
# /root/gnt-addvm usage: gnt-addvm [options] VIRTUAL_MACHINE_HOSTNAME -o OS | --os OS OS can be default natty32 natty64 sid64 squeeze32 squeeze64 wheezy64 -s SIZE | --size SIZE default SIZE is 10G -m MEM | --mem MEM default MEM is 256M -c CPU | --cpu CPU default CPU is 1 -n NODES | --nodes NODES default NODES is -d MODE | --disk MODE default MODE is drbd -q | --quick don't wait drbd sync --dry-run show executed command --cdrom PATH installation from iso file
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
Changer les cractéristique d'une 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
Reboot pour prendre en compte le tout
gnt-instance reboot -t full vm1Je 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
Relocalisé les disques secondaires si un serveur est HS.¶
Ceci déplace le disque redondant (qui n'est plus présent si le serveur est HS) est le reconstruit sur un autre serveur
gnt-instance replace-disks -I hail vm1
Administration des serveurs/nodes¶
Ãteindre/rebooter provisoirement un des serveurs sans coupure de service¶
La procédure est la suivante:
- migration des machines virtuelles sur leurs secondaires
- Arret/Ralummage ou reboot du serveur
- remigration des machines virtuelles sur le serveur hX
gnt-node migrate hX shutdown -h now # ou reboot hbal -L --no-disk-moves -X
La resynchro drbd est automatique.
L'extinction d'une node proprement dans le but de la désactivé du cluster¶
gnt-node migrate hX # gnt-node failover hX gnt-node evacuate -I hail hX gnt-node modify -O yes hX
Ici toutes les VMs seront migrés et les données auront été déplacé vers les autres nodes.
Vérifier l'état du cluster¶
Sur le masternode normalement h1 faire:
gnt-cluster verify
Change le node principal (masternode) de "ganeti", celui qui permet de lancer des commandes ganeti.¶
Allez sur un node, taper ceci et il deviendra "maternode":
gnt-node masterfailover
Gestion des fichiers de configuration (ie: /etc/ganeti, /etc/hosts, /etc/rc.local, ...)¶
Tous les fichiers de configuration à synchroniser entre toutes les nodes du cluster sont contenues dans ce script:
/etc/ganeti/pushconf.sh
Le lancer recopie ces fichiers du masternode vers les autres nodes.
Désactiver un serveur qui serait HS du cluster provisoirement.¶
On bascule les machines qui n'ont pas le failover en automatique
gnt-node failover [ --ignore-consistency ] h2
le --ignore-consistency permet de forcer ganeti à ne pas contrôler le disk avant le basculement
On peux (optionnellement) déplacer les disques durs secondaires des VMs
gnt-node evacuate [--early-release] -I hail hX
le --early-release permet de forcer ganeti à ne pas contrôler le disk avant le basculement (utile si le disk de h2 est HS)
Puis on désactive la node:
gnt-node modify -O yes h2
Réinsertion dans le cluster d'un node désactivé¶
- On réactive la node
- On remet dessus des machines et des disques en répartissant la charge du cluster
gnt-node modify -O no h2 hbal -L -X
Setup d'un nouveau NODE¶
Installation¶
- 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.
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)¶
Seul la machine h1 a l'espace configurer pour faire des dumps de machine virtuelle.
On lance un backup de celle-ci (attention cette commande éteint la machine):
gnt-backup export -n h1 sileht2
Les fichiers sont ensuite sur h1 dans /exports/sileht2.tetaneutral.net/
Le fichier qui nous intéresse est celui qui fini par .snap qui est le disque dur au format raw de la VM, dans mon cas:
09d836a0-22e0-4ea4-9104-c301351bb2e2.disk0_data.snap
Pour la démonstration je copie ce fichier sur h2:
scp /exportfs/sileht2.tetaneutral.net/09d836a0-22e0-4ea4-9104-c301351bb2e2.disk0_data.snap h2:/root/sileht.raw
Et je le test avec kvm:
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
A savoir que l'image utilise les pilotes kvm "virtio"
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:- http://docs.ganeti.org/ganeti/current/html/
- http://docs.ganeti.org/ganeti/2.1/man/
- http://wiki.osuosl.org/public/ganeti/
Ou bien je demande à sileht d'écrire le use case qui me manque s'il à le temps
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