Dans la continuité de la découverte des petites spécificités de la plateforme d’hébergement dédié d’OVH, aujourd’hui l’installation de VMWare Server 2.0.
Nous allons tout d’abord voir son installation en tenant compte des particularités d’OVH, l’utilisation de l’IpFailover et/ou des blocs ip RIPE fournis avec les serveurs et pour finir, en bonus, une petite bidouille à la Guiguiabloc pour intégrer un datastore VMWare en Raid1 over ip et bascule automatique.
Bien entendu, je pars d’une distribution Linux de base (Debian Etch ici) et pas la distribution VMware que fourni OVH.
Pré-Requis : Vous avez lu CE PRECEDENT BILLET avant et donc vous avez recompilé votre noyau sur vos serveurs. (il vous faut les sources du kernel).
Les switchs OVH ont une sécurité sur leurs interfaces empêchant de faire du bridging sur l’interface eth0 de votre serveur (ce qui est très bien en soi).
En gros, vous ne pouvez pas sortir sur l’interface du switch avec une adresse MAC différente de celle de votre carte réseau, si vous brigder l’interface vmnet0 avec eth0, le switch se mettra en « défense » (scénario bien connu des bidouilleurs de Cisco 🙂 ) et vous coupera le port.
A savoir que le principe est le même avec XEN 😉 donc attention a ce que vous faites…
Nous allons donc bridger VMware sur une interface bidon et configurer le Host-Only pour les interfaces réseaux de nos Machines Virtuelles.
On commence par monter une fausse interface ethernet, en éditant notre fichier /etc/network/interfaces (Debian) :
auto dummy0
iface dummy0 inet static
address 10.0.0.1 netmask 255.0.0.0 [ATTENTION CHOISIR UNE IP DE CLASSE PRIVEE]
Puis on l’active : ifup dummy0
(on vérifier par ifconfig que cette interface est bien présente).
On peut attaquer l’installation de VMware Server (je vous passe la phase de vous rendre sur le site de VMware pour récuperer le package et le numéro de série gratuit…)
tar xzvf VMware-server-2.0.0-116503.i386.tar.gz
cd vmware-server-distrib/
./vmware-install.pl
Creating a new VMware Server installer database using the tar4 format.
Installing VMware Server.
Vous répondez aux questions qui s’affichent (en changeant selon vos désirs les réponses pré-définies)
Si tout ce passe bien, vous devriez arrivé ici :
The installation of VMware Server 2.0.0 build-116503 for Linux completed
successfully. You can decide to remove this software from your system at any
time by invoking the following command: « /usr/bin/vmware-uninstall.pl ».
Before running VMware Server for the first time, you need to configure it by
invoking the following command: « /usr/bin/vmware-config.pl ». Do you want this
program to invoke the command for you now? [yes]
Vous suivez la procédure jusqu’au paramétrage du réseau :
La, on devient un peu plus attentif 🙂
Do you want networking for your virtual machines? (yes/no/help) [yes]
Configuring a bridged network for vmnet0.
Please specify a name for this network.
[Bridged]
Your computer has multiple ethernet network interfaces available: dummy0, eth0 . Which one do you want to bridge to
vmnet0? [eth0] dummy0
The following bridged networks have been defined:
. vmnet0 is bridged to dummy0
Do you wish to configure another bridged network? (yes/no) [no] no
Do you want to be able to use NAT networking in your virtual machines? (yes/no)
[yes] no
Do you want to be able to use host-only networking in your virtual machines?
[no] yes
Configuring a host-only network for vmnet1.
Please specify a name for this network.
[HostOnly]
Do you want this program to probe for an unused private subnet? (yes/no/help)
[yes] no
What will be the IP address of your host on the private
network? 192.168.1.1 [ATTENTION CHOISIR UNE IP DE CLASSE PRIVEE]
What will be the netmask of your private network? 255.255.255.0
the following host-only networks have been defined:
. vmnet1 is a host-only network on private subnet 192.168.0.
Do you wish to configure another host-only network? (yes/no) [no] (vous pouvez créer d’autres interfaces si vous le souhaitez)
None of the pre-built vmnet modules for VMware Server is suitable for your
running kernel. Do you want this program to try to build the vmnet module for
your system (you need to have a C compiler installed on your system)? [yes]
Extracting the sources of the vmnet module.
Building the vmnet module etc..
The configuration of VMware Server 2.0.0 build-116503 for Linux for this
running kernel completed successfully.
Et voila, vous pouvez faire pareil sur l’autre serveur (si vous en avez deux 😀 )
Vous pouvez vous connecter sur l’excellente interface d’administration : https://votrededieovh:8333
Lancer la création et l’installation d’une nouvelle machine virtuelle en donnant comme interface réseau, l’interface Host-only VMNET1.
(je ne parle pas du fonctionnement de VMware server ici, Google vous rapportera pleins de tutos 🙂 )
- Configuration du réseau
On commence par activiter le forwarding entre vos cartes réseaux (en l’occurence etho et vmnet1 ici) :
/bin/echo « 1 » > /proc/sys/net/ipv4/ip_forward
(n’oublier pas de le mettre en dur dans votre /etc/sysctl.conf : sysctl net.ipv4.ip_forward=1)
Puis le proxy ARP :
echo "net.ipv4.conf.vmnet1.proxy_arp=1" >> /etc/sysctl.conf && sysctl -p
Sur la machine virtuelle, on configure notre ipfailover et/ou notre ip bloc RIPE :
/etc/network/interfaces :
iface eth0 inet static
address 91.x.x.x
netmask 255.255.255.240
broadcast 91.x.x.x
post-up /sbin/route add default dev eth0
Pour une IP bloc RIPE (voir les infos que vous donne OVH pour le netmask et le broadcast lorsque vous commander votre bloc ip ou utiliser l’excellent « sipcalc » pour calculer vos masques/reseau 😀 )
Pour un ipfailover (a adapter a votre ipfailover):
auto eth0
iface eth0 inet static
address 87.98.99.90
netmask 255.255.255.255
post-up /sbin/route add default dev eth0
La commande importante étant de lui spécifier eth0 comme passerelle par défaut ( /sbin/route add default dev eth0).
Sur votre dédié maintenant (le serveur VMware), il faut lui donner la route vers votre machine virtuelle :
/sbin/ip route add 87.88.89.90 dev vmnet1
Pour le rendre permanent, vous pouvez rajouter la commande dans /etc/init.d/vmware apres le chargement des modules réseaux ou vous basez sur la bidouille de Kro : http://forum.ovh.com/showthread.php?t=37645
(attention a adapter hein !!!).
EDIT : Pour l’explication détaillée pour VMWare Server 2.0, le billet de Superkikim ICI vous donnera toute satisafaction.
Voila, vous pouvez désormais pinguer le net depuis votre machine virtuelle et inversement.
(ne pas oublier le /etc/resolv.conf et tutti quanti…)
EDIT 2 : J’ai écris un billet sur la façon d’affecter une ip failover à votre VM, c’est ICI.
- Bidouille Guiguiabloc
Bon maintenant que tout cela tourne très bien, le plus « amusant » serait de pouvoir basculer notre machine virtuelle sur notre deuxième serveur en cas de crash du premier…
Je vous préviens tout de suite, cela ne sera pas transparent 😀 VMotion n’existe pas sur VMware server 🙂 🙂
Pré-requis : la lecture du précédent billet :-p (encore), un drbd actif, un heartbeat actif et une ipfailover disponible.
On se créer un volume DRBD (j’espère que vous avez prévu un stock de partitions de libre lors de l’installation de votre dédié OVH 😀 )
en éditant notre fichier /etc/drbd.conf et on ajoute :
resource r1 { (ou r0 si c’est votre premiere ressource drbd)
protocol C;
handlers {
pri-on-incon-degr « echo o > /proc/sysrq-trigger ; halt -f »;
pri-lost-after-sb « echo o > /proc/sysrq-trigger ; halt -f »;
local-io-error « echo o > /proc/sysrq-trigger ; halt -f »;
}
startup {
degr-wfc-timeout 120; # 2 minutes.
}
disk {
on-io-error detach;
}
net {
after-sb-0pri disconnect;
after-sb-1pri disconnect;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
syncer {
rate 20M;
al-extents 257;
}
on ns11111 {
device /dev/drbd1;
disk /dev/sda11;
address 192.168.20.20:7789; (attention a ne pas mettre le meme port de la ressource r0)
meta-disk internal;
}
on ns22222 {
device /dev/drbd1;
disk /dev/sda11;
address 192.168.20.30:7789;
meta-disk internal;
}
}
On se coltine les définitions Maitre/Esclave (voir billet précédent), on formate /dev/drbd1.
Sur le serveur ns11111, on monte /dev/drdb1 sur /vmfs (par exemple) et on l’ajoute au datastore :
Vous devriez voir votre datastore apparaitre dans la liste :
Créer une machine virtuelle dedans ou comme moi, copier le repertoire de votre Machine Virtuelle et utilisez le « Add to Inventory » :
On stoppe VMware, on démonte /vmfs et on inverse les roles Maitre esclave :
sur ns11111 : drbdadm secondary r1
sur ns22222: drbdadm primary r1
on vérifie que l’on voit bien tout avec un cat /proc/drbd puis on monte /dev/drbd1 sur /vmfs.
Sur le VMware server de ns22222, on refait la meme manip, déclaration d’un nouveau datastore et « AddVirtual Machine to Inventory ».
- premier test
On se remet en environnement nomimal (vmware qui tourne sur ns11111, drbd1 en maitre et mount sur /vmfs)
On lance la VM sur ns11111.
On vérifie que tout marche bien et maintenant, simulons le crash manuellement.
– on kill -9 tout les process VMware (oui c’est crade, j’adore 😀 )
– on démonte /vmfs
– on bascule les ressources DrBD
– on lance vmware sur ns22222
– on lance la machine virtuelle.
Les soucis rencontrés sont les suivants :
L’uid disque a changer et il faut cliquer sur « i ‘ve copied it »
Ca c’est facile a régler, vous ajouter
uuid.action = "keep"
Dans le fichier *.vmx de votre machine virtuelle 😀
Un répertoire « lock » verrouille le démarrage.
Il suffit de faire un petit rm -rf Guiguiabloc.vmdk.lck pour que ca parte.
Donc cela marche, mais il faut automatiser tout cela.
Heureusement, il existe les commandes vmrun.
La syntaxe est la suivante :
vmrun -T server -h https://localhost:8333/sdk -u adminvmware -p motdepasse stop « [VMFS-DRBD] Guiguiabloc/Guiguiabloc.vmx »
Pour arreter la VM par exemple (je vous laisse consulter la doc VMRUN sur le site de VMware 😉 ).
Vous avez donc tout les éléments pour inclure cela dans les scripts de Heartbeat (basez vous sur les exemples du précédent billet) :
- bascule du DRBD et montage sur /vmfs
- Démarrage de VMware sur le nouveau Maître
- rm -r /vmfs/machinevirtuelle/machinevirtuellevmdk.lck
- vmrun start
Tout bête quoi 😀
Après plusieurs tests cela marche vraiment pas mal 🙂 , bien évidemment le crash du maitre entraîne le « crash » de la VM, donc elle peut repartir un peu en vrac.
C’est pour cela que je vous conseille de programmer des « Snapshots » des VM toutes les nuits (si vous ne connaissez pas, jetez vous dessus et mangez en !!! 😀 )
Au pire vous pourrez repartir sur le snapshot de la veille.
En tout cas, avec cela l’indisponibilité est de quelques minutes…