JeuWeb - Crée ton jeu par navigateur
Initiation à la virtualisation - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Initiation à la virtualisation (/showthread.php?tid=6833)



Initiation à la virtualisation - MadMass - 13-01-2014

Bonjour,
Je fais un topic plus en détail sur la virtualisation, parce que c'est bon :bave: (miam le smiley).

Je ne cherche pas à tout prix à convertir jusqu'aux plus indécis, mais à faire découvrir à ceux qui ignorent en quoi ça consiste concrètement les avantages que ça représente Wink

Virtualiser, c'est quoi ?

La virtualisation consiste à diviser un serveur physique en un ou plusieurs serveurs virtuels, qui auront chacun leur système, leur configuration propre, et seront indépendants les uns des autres.
Elle présente de nombreux avantages, notamment en terme de maintenance, de fiabilité et de scaling de son installation.
Pour ce topic, je me baserai sur la dernière version de Proxmox VE (+ openvz) à ce jour Smile

Qu'es-ce que Proxmox VE ?

Proxmox Virtual Environment est un hyperviseur basé sur Debian 7 (linux). Il s'agit en fait d'une profonde modification de Debian 7 pour y inclure des outils de gestion et de maintenance pour les machines virtuelles qui s'y trouvent. C'est en outre un outil open-source et gratuit.
Openvz est une technologie de virtualisation mise en application par Proxmox. Je décrirais les deux technologies de virtualisation plus loin.
Donc Proxmox est la plateforme sous laquelle fonctionne votre serveur physique, et openvz le logiciel qui fera fonctionner les machines virtuelles Smile

Quels technologies pour la virtualisation ?

Proxmox met en oeuvre deux technologies concurrente de virtualisations, qui sont cependant complémentaires.
Il est important de noter que la virtualisation induit une perte de performance : cette perte dépend de la technologie utilisée.

- La virtualisation totale (KVM basée sur QEMU) : la machine virtuelle est 100% indépendante, elle a son propre noyau, etc. La technologie KVM est un accélérateur qui permet à la machine virtuelle d'exécuter directement du code sur le processeur, ce qui est beaucoup plus rapide que lorsque l'hyperviseur doit faire l'intermédiaire. Cette technologie nécessite le support des instructions de virtualisation (VT-x chez Intel, AMD-V chez AMD), lesquelles ne sont disponibles que sur les processeurs avancés (généralement au prix supérieur à 100€). En cas d'absence du support des instructions de virtualisation, il est possible de se passer de l'accélération de KVM, mais la perte de performance est considérable. En revanche, la virtualisation totale permet d'exécuter n'importe quel système.
- La virtualisation partielle (openvz) : la machine virtuelle utilise le noyau de l'hyperviseur. Cette stratégie augmente considérablement les performances et permet de se passer des instructions de virtualisation, cependant, elle est limitée à un nombre restreint de systèmes linux compatibles avec le noyau de l'hyperviseur.

Ma machine étant modeste (Intel Atom N2800 + 2go RAM + 500 go HDD), et ne supportant pas les instructions de virtualisation, j'ai donc recours à openvz Smile

En pratique, ça donne quoi ?

En pratique, vous pouvez créer vos machines virtuelles et les administrer avec un panel fourni par Proxmox :
[Image: 1389605060-panel.png]
Ici on peut voir que j'ai quatre machines virtuelles openvz dont trois sont à l'arrêt, et une en marche.

Matériel requis

Le nerf de la guerre en virtualisation, c'est la mémoire ! Et le CPU dans une moindre mesure. Deux règles importantes :
- Plus y'a de threads, mieux c'est
- Plus y'a de RAM, mieux c'est
Pourquoi ?
- Vous décidez vous-même du nombre de thread que vous allouez à chaque machine virtuelle. Plus vous avez de thread sur votre processeur, plus vous pourrez être généreux avec vos VMs. Alors que si vous en manquez, vous allez distribuer plus de thread que vous n'en avez réellement, ce qui nuira aux performances, les machines se partageant des coeurs.
- Chaque machine a besoin de RAM pour son propre système et pour ses propres applications. Le serveur doit être capable de supporter la demande en mémoire de plusieurs machines. 4go de RAM est le minimum syndical (pas comme moi :°)

Pour le disque il n'y a pas vraiment de règle, mais un grand nombre d'hyperviseurs gèrent très mal le RAID 1 logiciel Sad

Créer ses VM
Vous pouvez ajouter des VM à votre serveur (normal). Pour héberger un jeu web, je vous conseille de recourir aux containers openvz car les performances sont bien meilleures et adaptées à ce cas de figure.

On appelle "VM" les machines virtuelles en virtualisations totales. Avec openvz, les machines virtualisées partiellement sont des "CT" (containers).
Avant toute chose, il faut télécharger des templates (ou les faire soi-même, mais c'est hyper technique :p) à cette adresse : http://download.openvz.org/template/precreated/
Note : Proxmox propose un système permettant de télécharger directement des templates. Je vous DECONSEILLE fortement de l'utiliser : vous risquez de vous retrouver avec des templates qui ne correspondent pas à votre architecture, ça m'est arrivé !

Un template est un "modèle" pour le container openvz que nous allons créer. Prendre un template ubuntu server permettra de créer un container qui s'utilisera exactement comme un véritable serveur sous ubuntu.
Les templates se placent dans /vz/template/cache sans les décompresser.

Quand le serveur a les templates voulus, le CT se crée sous l'interface web de proxmox accessible à l'adresse : http://ip.du.serveur:8006

[Image: 1389605735-02.png]
Un clic sur "Créer CT" permet de créer facilement son container openvz.

[Image: 1389605810-03.png]
Les templates téléchargés permettent de choisir quel système on souhaite créer.

[Image: 1389605878-04.png]
Chose très intéressante : vous devez choisir les ressources que vous allouez à votre VM. C'est à dire sa RAM, son swap, son disque et le nombre de threads de votre CPU que vous lui donnez. Il est possible de changer ces caractéristiques pendant le fonctionnement de la VM par la suite !

[Image: 1389606044-05.png]
Le CT est ensuite créé en une poignée de secondes (je reviendrai sur l'aspect réseau plus tard)

[Image: 1389606158-06.png]
On peut enfin démarrer le CT et y accéder en SSH comme sur un vrai serveur. La création d'une nouvelle machine est aussi simple que ça ! Vous pouvez ainsi créer une machine pour votre jeu, une pour votre portail, etc. En cas de défaillance de l'une, les autres ne seront pas impactées.

Les avantages de la virtualisation sur la maintenance

Proxmox fournit de nombreuses informations et graphes sur le fonctionnement de chaque VM, ce qui permet en un clin d’œil de voir lesquelles peinent à la tâche ou au contraire, lesquelles sont sous-utilisées Smile
[Image: 1389606389-07.png]

Il monitore également le système, permettant d'estimer la charge de son serveur :
[Image: 1389606527-08.png]

[Image: 1389606605-09.png]
Chose intéressante, on peut modifier à la volée les caractéristiques système d'un CT : si votre jeu est limité par son CT, vous pouvez lui donner plus de mémoire, un thread supplémentaire, etc. Pas besoin de redémarrer la machine !

Enfin, la virtualisation permet de faire des snapshots de la VM (ou du CT). Un snapshot est une sauvegarde du serveur à un instant T. Elle s'effectue sans coupure ni perturbation du fonctionnement de la VM. Par contre, en cas de défaillance (matérielle ou logicielle), vous pouvez restaurer un snapshot : la VM reprendra exactement à l'endroit où elle en était lors de la sauvegarde Smile Cela permet également de tester des configurations logicielles atypiques et de restaurer un snapshot en cas d'erreur.
Enfin, les snapshot peuvent être stockés sur un serveur distant à l'aide du système NFS (tuto ici : http://doc.ubuntu-fr.org/nfs). Cela signifie que vous pouvez louer un serveur premier prix uniquement pour vos sauvegardes, et que Proxmox l'utilisera comme un espace de stockage pour les sauvegardes.

Virtualiser, c'est donc plus sûr : en séparant vos services, vous les isolez les uns des autres. En cas de problème logiciel, saturation, piratage, etc de l'un, les autres ne sont pas impactés. Il est enfin plus facile de sauvegarder les données, et la restauration est plus rapide que si lors d'une panne, il fallait reconfigurer le serveur et rétablir les données. Tout est sauvegardé : la configuration du système, des applications, etc. Votre serveur lâche ? Une fois réparé, réinstallez Proxmox (ça prend 10mn), configurez le minimum syndical en matière de sécurité (mise à jour, fail2ban, ssh, accès root, ça prend 5mn), uploadez le dernier snapshot, restaurez la machine et votre jeu est reparti Smile

En quoi Proxmox augmente la scalabilité
En outre, les VM (ou les CT) peuvent être passées d'un serveur à l'autre.
Si votre serveur devient trop restreint, vous pouvez en louer un plus puissant. Une fois Proxmox installé sur le nouveau serveur, vous pouvez effectuer une migration à chaud de la VM : elle sera coupée quelques secondes le temps de la transférer d'un serveur à l'autre. Votre migration serveur est bouclée en une minute, et la configuration n'est pas à refaire : la VM reste telle qu'elle, vous n'avez qu'à augmenter les ressources que vous lui allouez dans la mesure des possibilités de votre nouveau serveur.
Vous pouvez également héberger plusieurs jeux sur un même serveur, et augmenter les ressources de l'un qui a plus de succès qu'un autre. C'est une réduction drastique des coûts : plusieurs jeux sur la même machine, qui n'interfèrent pas les uns et les autres : chacun son SQL, sa configuration apache, etc.

Le réseau
Ca, c'est le point chiant.
Les serveurs sont représentés sur internet par une adresse IP de la forme xxx.xxx.xxx.xxx où xxx est un nombre entre 0 et 255.
L'adresse internet (le nom de domaine) fait le lien entre le nom de domaine et l'ip auprès d'un DNS. Sans ip, pas de connexion au web.

Il faut donc en théorie une IP par adresse, donc une IP par jeu, et de façon plus générale une IP par VM. Pour ce faire, on a recours :
- Soit aux IP failover (qui sont des ip pouvant être pointées dynamiquement vers un serveur; en cas de panne, on change le serveur cible pour maintenir la continuité du service). Problème : c'est payant, tout le monde n'en propose pas.
- Soit aux IP statiques : plusieurs ip sont attribuées au serveur, et vous donnez une ip à chaque VM. Problème : tous les prestataires n'en proposent pas, en ces temps de disette d'IPv4.

Il y a donc la solution du NAT. Le NAT est une traduction d'adresse IP : vous indiquez à votre serveur de rediriger tel ou tel port vers une VM particulière.
Pour cela, chaque VM a une IP dite "locale" : elle n'est pas visible sur le réseau.
[Image: 1389607534-10.png]
Ici, mon CT aura pour ip 10.8.0.22 qui n'existera que sur le "venet". Le venet est un réseau local reliant votre hyperviseur et toutes ses VM. C'est comme si vous étiez chez vous et que chaque VM était un ordinateur, et l'hyperviseur aussi. Tout ce beau monde est relié ensemble au sein d'un réseau local, et c'est l'hyperviseur qui fait le lien entre réseau local et réseau internet.
Vous devez autoriser la sortie des ip locales vers le net :
Code :
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o vmbr0 -j SNAT --to IP.du.serveur.hote
Cette commande tapée dans le shell du serveur permet de rediriger toute la frange d'ip de 10.8.0.0 à 10.8.0.255 à sortir vers le net.
Notez deux choses : il est possible de modifier la frange d'ip locale, et toutes vos machines apparaîtront en ayant l'ip de votre hyperviseur, et non la leur.

Il est ensuite possible de rediriger des pots : dire que le port 1234 sur l'ip de mon serveur hôte sera redirigé vers le port 22 de la VM d'ip locale 10.8.0.22 :
Code :
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 1234 -j DNAT --to 10.8.0.22:22
Et vous pouvez donc accéder à votre VM sans nouvelle IP :p

Cependant, il est intéressant de pouvoir héberger plusieurs sites sur une même machine, et de vouloir accéder à eux à partir de différents noms de domaine. Problème : le web passe par le port 80, impossible de rediriger le même port vers plusieurs machines.
On peut donc recourir à un reverse proxy : c'est un programme capable de rediriger le trafic du port 80 vers la bonne VM en fonction du nom de domaine. J'utilise Pound.
Un tuto intéressant ici (en anglais) : http://www.fridu.org/hosting/52-openvz-virtualization#pound
Cela permet de dire que le domaine http://mon-jeu-web.com sera redirigé vers 10.8.0.22:80, tandis que le domaine http://mon-forum-de-jeu.com sera redirigé vers 10.8.0.23:80. Donc vers deux VM différentes :heu:

Bien évidemment je vous invite à vous documenter sur le sujet, il ne s'agit que d'une rapide présentation des possibilités que cela offre. Une façon de dire que non, ce n'est pas impossible à faire Smile

Autres solutions de virtualisation
A ma connaissance, Proxmox est le seul à proposer openvz. D'autres solutions existent, voici une liste :
- Proxmox VE : KVM et openvz, a une très faible consommation de mémoire. Gratuit.
- Xen : KVM, plutôt gourmand en mémoire. Gratuit mais avec des limitations. Propose un logiciel de gestion nommé XenCenter qui remplace l'interface web.
- VMWare : KVM, très performant et très limité dans sa formule gratuite, très cher sinon :p
- Hyper-V : solution de Microsoft pour virtualiser des OS Windows seulement. Gratuit.

Conclusion
Ce n'était en rien un tuto ou un how-to, mais une présentation de ce qu'il est possible de faire avec la virtualisation et comment on le fait, afin que vous puissiez voir que ce n'est pas quelque chose réservé aux professionnels. Virtualiser apporte une très grande flexibilité d'utilisation de son serveur, on a beaucoup de mal à s'en passer dès qu'on a essayé Tongue
Je suis dispo pour toutes questions, et comme d'hab en cas d'erreurs/oublis, n'hésitez pas à me le signaler Smile


RE: Initiation à la virtualisation - Daemon59 - 15-04-2016

Je n’ai ni questions ni erreurs à signaler mais je trouve que ta présentation sur Proxmox VE est très réussi. Mais c’est sympa de l’avoir partagé. Comme moi, j’ai bénéficié d’un tutoriel en vidéo pour connaitre la manipulation de cet outil de virtualisation sur www.alphorm.com.


RE: Initiation à la virtualisation - Akira777 - 15-04-2016

Excellent guide Smile Merci pour ceux qui découvriront tout ça grâce à toi !


RE: Initiation à la virtualisation - MadMass - 15-04-2016

Ouh ce truc date :p
A ce propos, entre-temps j'ai découvert le cloud public. C'est le même principe sauf que vous n'avez pas la main sur la machine hôte, seulement sur les VPS que vous créez et qui vous sont facturés. L'avantage du système c'est que c'est pas cher, vous êtes toujours libres d'upgrader la config du serveur, et surtout d'en faire des snapshots pour le sauvegarder à chaud. Personnellement j'utilise le public cloud d'OVH je vous invite à y jeter un œil, les prix commencent à 3€/mois pour un VPS linux avec 1 vCPU, 2go de RAM et 10go de disque (contrairement à ce qui est marqué sur le site qui ne mentionne que ceux dès 30€), et ça tourne vraiment pas mal Smile


RE: Initiation à la virtualisation - Akira777 - 15-04-2016

Putain tiens j'avais pas vu que c'était vieux xD
Et ouais le public cloud est pas mal chez OVH Smile

(Proxmox reste pour moi une valeur sûre pour de l'infrastructure de travail en entreprise : mails, serveur dns, firewall, nas, ...)