Question

J'ai besoin d'exécuter un nombre relativement important de machines virtuelles sur un nombre relativement réduit d'hôtes physiques. Chaque machine virtuelle ne fait pas grand-chose - chacune n'a besoin que d'exécuter essentiellement un service réseau de base - pensez au SMTP ou similaire. En outre, la charge sur chacun d'eux sera extrêmement légère.

Malheureusement, les chiffres représentent environ 100 machines virtuelles sur 5 hôtes physiques. Chaque hôte est assez décent - noyau 2 avec 2 Go de RAM et un disque de 1 To. Cependant, je sais que le simple fait de prendre une image vmware d'ubuntu et de le jeter sur cette machine ne me mènera nulle part à près de 100 instances et serait plutôt proche de 20.

Alors, y a-t-il un espoir pour ce rapport images / hôtes? En outre, quelle implémentation de machine virtuelle conviendrait le mieux à cette fin - c’est-à-dire une utilisation globale efficace des ressources? Nous utilisons principalement vmware ici, mais si nous pouvions tirer un avantage significatif des performances en passant à Xen ou similaire, je suis sûr que nous y tiendrions compte.

Merci d’avance pour vos idées:)

Remarque: nous avons finalement utilisé OpenVZ et cela a plutôt bien fonctionné. Les paramètres par défaut d’un modèle Ubuntu nous permettent d’exécuter environ 40 instances par machine.

Était-ce utile?

La solution

il y a trois fronts principaux pour les adapter:

  1. réduire les frais généraux. OpenVZ, Vserver, chroot, serait idéal si applicable. Si vous avez vraiment besoin que chaque instance soit une véritable machine virtuelle avec son propre noyau, essayez KVM / Xen au lieu de VMWare. peut être moins mature, mais vous aurez beaucoup plus de flexibilité.

  2. invités plus petits. essayez Ubuntu JeOS ou faites le vôtre avec busybox

  3. partagez autant que possible entre les invités. essayez de partager une seule image R / O avec tout le système d’exploitation et montez une petite image R / W pour chaque invité sur / var, / home, / etc, etc.

Autres conseils

Quelques problèmes avec ça ...

  1. Pour le serveur VMware, vous avez réellement besoin de matériel serveur, à moins que ce ne soit uniquement pour des tests.
  2. Optez pour une solution de virtualisation à niveau nu, telle que Xen Server, VMware ESX ou ESXi (gratuite) ou Hyper-V, qui n'est pas à nu, mais dont les performances sont plus proches.
  3. Pour 20-1, vous aurez besoin de plus de RAM. Les maths ne font rien. Les machines fonctionnelles minimales ont besoin de 512 sauf s’il s’agit d’un linux parfaitement dépouillé qui devrait en avoir au moins 256. 20x256 = 5 Go + 5 à 10% de temps système. Cela ne va pas vraiment arriver avec ces spécifications.
  4. Pour 20-1, vous aurez besoin de plus de processeur. Chaque machine aura un vCPU. partagé sur un noyau 2 signifie que 10-1 par processeur. pas bon. Nous utilisons presque 20 ordinateurs sur un processeur Dell 1950 à deux cœurs, avec 16 Go de RAM. Fonctionne très bien.
  5. Quoi que vous choisissiez, vous allez sursouscrire de la mémoire. Je ne sais pas exactement qui vous a laissé VMware le fera, mais affiche des avertissements.
  6. J'ai entendu parler, mais je n'ai aucune preuve que XenServer offrira des avantages en termes de performances, mais personne ne prétend plus que 10-20%.

Bonne chance

Avez-vous vraiment besoin de 100 systèmes d’exploitation entièrement fonctionnels?

Pourquoi ne pas adopter l'approche que les serveurs Web utilisent déjà? Je parle de serveurs / hôtes Web virtuels.

Par exemple, prenons Apache HTTPD installé sur un seul serveur physique hébergeant plusieurs serveurs virtuels utilisant un seul fichier de configuration. De plus, vous aurez besoin d’un DNS configuré et / ou de nombreuses interfaces réseau virtuelles (eth0: 0, eth0: 1, ..., eth0: n) avec des adresses IP différentes.

Cela devrait fonctionner si vous n'avez vraiment besoin que de plusieurs services exposés au monde et que la charge n'est pas élevée.

Une autre possibilité consiste à utiliser une distribution Linux légère pouvant fonctionner avec de très petites quantités de mémoire. Quelque chose comme DamnSmallLinux ou une variante de DDWRT. Ils ne peuvent utiliser que 16 Mo de mémoire, ce qui vous permet d’en exécuter 20 ou plus sur un seul ordinateur.

Vous feriez mieux d’utiliser VMware ESX / ESXi, car ils disposent tous les deux d’une fonctionnalité de mise en pool de mémoire sophistiquée. Il faut essentiellement des pages de mémoire identiques et les utiliser avec plusieurs invités. Par conséquent, si vous avez beaucoup d’invités identiques, vous pourrez obtenir beaucoup plus sur votre hôte que sur d’autres ordinateurs virtuels.

Vérifiez les informations relatives au " Partage de page transparent " dans cette entrée de blog et un commentaire à ce sujet ici aussi.

Il est évident que vous continuez de le placer avec 20 invités par hôte et seulement 2 Go de RAM sur chacun, mais si vous supprimez tous les services et applications superflus, créez une image d'invité et clonez-la avant d'installer le Sur chaque application dédiée, vous pouvez simplement vous en tirer, d'autant plus que le lien VMware indique à un hôte 4 Go exécutant 40 invités!

J'ai une machine quadcore exécutant un bureau complet et 9 machines virtuelles. comme il s’agit d’une machine d’essai, j’utilise toutes sortes d’invités. Le meilleur usage de la mémoire vive semble être debian-kfreebsd et Linux. Linux Linux utilise 10M de RAM sans rien faire. ajoutez quelques services et cela pourrait être 32M, ainsi je pourrais courir 32 vm dans 1GB de ram! vous avez 2 Go, alors supposons que vous puissiez exécuter 48 machines, y compris un hyperviseur et des frais généraux (j'utilise KVM). Avec 5 machines, nous serions jusqu’à 240 machines: D

Je pense que je vais essayer dans un instant: D

btw. vous avez dit que les vm auraient une charge légère, donc je ne comptais pas sur cpuload ou diskload. et ces chiffres ont exactement une redondance nulle.

Si vous parvenez à réduire suffisamment le nombre d'invités, vous pouvez probablement le faire, pas de X, services minimaux démarrés, etc. Regardez le serveur slackware ou ubuntu. Xen semble populaire parmi les sociétés d'hébergement Web, il pourrait donc être intéressant de regarder.

L'utilisation du processeur dépend des applications, mais vous voudrez peut-être acheter un peu plus de RAM!

Existe-t-il une raison pour laquelle chaque instance de service réseau doit être compartimentée dans ses propres machines virtuelles? Si vous n'avez pas besoin d'isoler les utilisateurs les uns des autres, mais si vous avez besoin d'isoler les processus et le trafic, vous feriez probablement mieux d'utiliser les cinq serveurs tels quels et de lancer des processus distincts pour chaque instance. Chaque instance serait liée à une interface virtuelle distincte.

Par exemple, configurez une interface virtuelle et attribuez-lui une adresse IP. Créez un fichier httpd.conf et / ou sendmail.cf pour l'instance que vous souhaitez créer. Dans le fichier de configuration, spécifiez que le démon doit être lié à l'interface virtuelle (et à celle-là uniquement). Lancez le démon.

Répéter pour chacune des instances. Vous aurez beaucoup de processus en cours d'exécution (des centaines, voire des milliers), la somme totale d'entre eux utilisera moins de mémoire que des dizaines de VM. De plus, votre système d'exploitation pourra échanger les disques non utilisés sur un disque.

Si vous faites le calcul, vous obtenez en moyenne 100 Mo de RAM pour chaque machine. Ce n'est pas beaucoup Les frais généraux d'une machine virtuelle sont assez importants, car il faut exécuter un système d'exploitation complet dans chaque cas.

Soit vous utilisez des systèmes à faible encombrement ( http://www.damnsmalllinux.org/ )? ) et prenez le temps de le dépouiller encore plus ou d’obtenir des machines plus grosses.

Les machines étant aussi peu coûteuses, j'aurais tendance à passer à un système d'exploitation 64 bits avec beaucoup de RAM.

VMWare propose une option intéressante dans laquelle vous pouvez " pool " groupe de machines physiques, et il déplacera automatiquement les machines virtuelles vers le matériel le moins utilisé, sans interrompre le fonctionnement de la machine virtuelle.

lien plutôt publicitaire.

Êtes-vous limité à vmware? Avez-vous envisagé de virtualisation au niveau du système d'exploitation? , vous disposerez de davantage de machines virtuelles avec moins de frais généraux , étant donné que chaque machine virtuelle peut exécuter le même noyau.

Plusieurs réflexions ...

1- Comme d'autres l'ont fait remarquer, l'arithmétique de la mémoire ne fonctionne pas, vous aurez besoin de plus de RAM.

2- Selon le service, vous pourrez peut-être trouver des machines virtuelles préconfigurées. Par exemple, Astaro dispose d'une configuration de machine virtuelle pour son logiciel de pare-feu gratuit. Vous pourrez également trouver une très petite distribution Linux que vous pourrez adapter.

3- Peut-être qu'il me manque quelque chose, mais il semblerait qu'Ubuntu soit déjà assez proche ... 20 instances par machine sur 5 machines obtiennent les 100 instances dont vous avez besoin. Il n’ya pas beaucoup de marge de manœuvre pour la croissance future, cependant ...

Faites attention, bonne chance.

Je ne sais pas si cela est possible, mais que dire de l'exécution de chaque service dans un environnement chroot? Vous pourriez probablement économiser de l'espace disque en liant de manière matérielle les fichiers de bibliothèque nécessaires pour créer chaque système de fichiers chroot.

Un autre problème lié à l’exécution de chaque service sur sa propre machine virtuelle est qu’ils auront tous besoin de leur propre adresse IP. 100 IP ne peuvent pas être un problème sur un réseau interne (comme une configuration 172/8 ou 10/8), mais si elles font partie de votre classe A (en supposant que vous avez autant de public), vous allez manquer rapide.

Et, comme d'autres l'ont demandé, pourquoi chaque service doit-il être sa propre machine virtuelle? Nombre d'entre eux devraient pouvoir facilement fonctionner sur le même hôte.

Si c’est quelque chose qui peut être fait au niveau de l’application - je n’aurais aucune virtualisation. Vous pouvez exécuter plusieurs instances de votre application sur différents numéros de port, même des adresses IP différentes avec alias IP. De cette façon, vous pouvez facilement faire plus de 20 copies sur chacune de vos boîtes. Heck, vous pourriez peut-être tout faire avec la moitié de votre matériel.

La virtualisation n’est pas la solution à tout. :)

Mon 2c.

Fonderie de nuages. Je ne connais rien des ordinateurs virtuels par rapport à quiconque aurait soumis une réponse, mais si je comprends bien, si vous avez un hôte, un ordinateur virtuel sur cet hôte, puis Cloud Foundry sur cet ordinateur virtuel, vous pouvez facilement créer une machine virtuelle secondaire de base. répliquez et configurez tous vos services au sein de cet ensemble de machines virtuelles secondaires, tout en limitant l'utilisation du matériel. Je ne sais pas si cela fonctionnera à coup sûr, mais d'après ce que j'ai compris, ce serait l'une des approches les plus minimales. Il s'agit d'une approche à deux coques qui permettrait de réduire les risques d'endommager la machine hôte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top