Pregunta

Tengo la necesidad de ejecutar un número relativamente grande de máquinas virtuales en un número relativamente pequeño de hosts físicos. Cada máquina virtual no está haciendo demasiado, solo necesita ejecutar esencialmente un servicio de red básico: piense en SMTP o similar. Además, la carga en cada uno va a ser extremadamente ligera.

Desafortunadamente, los números son algo así como 100 máquinas virtuales en 5 hosts físicos. Cada host es lo suficientemente decente: núcleo 2 con 2 gigas de RAM y un disco de 1 tb. Sin embargo, sé que simplemente tomar una imagen vmware de ubuntu y lanzarla en esa máquina no me llevará a casi 100 instancias y sería algo más cercano a 20.

Entonces, ¿existe alguna esperanza para esta relación de imágenes a hosts? Además, ¿qué implementación de máquina virtual sería la más adecuada para este propósito, es decir, tiene un uso global eficiente de los recursos? Aquí usamos vmware principalmente, pero si hay una ventaja significativa en el rendimiento que podría obtenerse cambiando a Xen o similar, estoy seguro de que lo consideraríamos.

Gracias de antemano por sus ideas :)

Nota: Terminamos usando OpenVZ y funcionó bastante bien. Los parámetros predeterminados para una plantilla de ubuntu nos permiten ejecutar aproximadamente 40 instancias por máquina.

¿Fue útil?

Solución

hay tres frentes principales para hacer que encajen:

  1. menor sobrecarga. OpenVZ, Vserver, chroot, sería ideal si es aplicable. Si realmente necesita que cada instancia sea una máquina virtual real con su propio kernel, pruebe KVM / Xen en lugar de VMWare. puede ser menos maduro, pero tendrás mucha más flexibilidad.

  2. huéspedes más pequeños. prueba Ubuntu JeOS, o enrolla el tuyo con busybox

  3. comparte la mayor cantidad posible entre invitados. intente compartir una única imagen de R / O con todos los sistemas operativos y monte una pequeña imagen de R / W para cada invitado en / var, / home, / etc, etc

Otros consejos

Un par de problemas con eso ...

  1. Para el servidor Vmware, realmente necesita hardware de servidor a menos que sea solo para pruebas.
  2. Vaya con una solución de virtualización de nivel básico como Xen Server, VMware ESX o ESXi (gratuita) o Hyper-V, que no es de nivel básico sino que tiene un rendimiento más cercano.
  3. Para 20-1 necesitarás más RAM. Las matemáticas no cuadran. Las máquinas mínimas funcionales necesitan 512 a menos que sea un linux perfectamente despojado que debería tener al menos 256. 20x256 = 5 gb + 5-10% de sobrecarga. Realmente no va a suceder con esas especificaciones.
  4. Para 20-1 necesitará más procesador. Cada máquina tendrá una vCPU. compartido en un núcleo 2 significa que 10-1 por procesador. no está bien. Ejecutamos casi 20 en un Dell 1950 quad-core dual, 16gb de RAM. Funciona muy bien.
  5. Lo que elija, va a estar sobre suscribiendo la memoria. No estoy exactamente seguro de cuáles te dejan. Vmware lo hará, pero muestra advertencias.
  6. He escuchado, pero no tengo pruebas de que XenServer ofrezca beneficios de rendimiento, pero nadie reclama más del 10-20%.

Buena suerte

¿Realmente necesitas 100 sistemas operativos completamente funcionales?

¿Por qué no acercarse ya a los servidores web? Me refiero a servidores web virtuales / hosts.

Por ejemplo, tome Apache HTTPD instalado en un solo servidor físico que aloja muchos servidores virtuales usando un solo archivo de configuración. Además, necesitará configurar DNS y / o muchas interfaces de red virtuales (eth0: 0, eth0: 1, ..., eth0: n) con diferentes direcciones IP.

Esto debería funcionar si realmente necesita solo varios servicios expuestos al mundo y la carga no es alta.

Otra posibilidad es usar una distribución de Linux liviana que se pueda ejecutar en cantidades muy pequeñas de memoria. Algo como DamnSmallLinux o una variación en DDWRT. Se pueden ejecutar en tan solo 16 MB de memoria, lo que le permite ejecutar 20 o más en una sola máquina.

Sería mejor que ejecutes VMware ESX / ESXi, ya que ambos tienen una elegante función de agrupación de memoria. Básicamente toma páginas de memoria que son idénticas y las utiliza entre varios invitados, por lo que si está ejecutando una gran cantidad de invitados idénticos, podrá obtener mucho más en su host que en otras máquinas virtuales.

Comprueba el bit sobre " Compartir páginas transparentes " en esta entrada de blog , y un comentario al respecto aquí también.

Obviamente, todavía lo estás presionando con 20 invitados por host y solo 2Gb de RAM en cada uno, pero si eliminas todos servicios y aplicaciones extraños, y crea 1 imagen de invitado y clónala antes de instalar el aplicación dedicada en cada uno, puede simplemente salirse con la suya, especialmente cuando el enlace de VMware muestra un host de 4Gb con 40 invitados.

Tengo una máquina de quadcore ejecutando un escritorio completo y 9 máquinas virtuales. Ya que esta es una máquina de prueba, uso todo tipo de invitados. Los mejores en el uso de RAM parecen ser Debian-kfreebsd, y Linux de núcleo pequeño. El pequeño núcleo de Linux usa 10M de RAM sin hacer nada. agregue un par de servicios y podría ser de 32M, así que podría correr 32 vm dentro de 1GB de RAM. tiene 2 GB, así que digamos que podría ejecutar 48 máquinas, incluido un hipervisor y una sobrecarga (estoy usando kvm). Con 5 máquinas tendríamos hasta 240 máquinas: D

Creo que voy a intentarlo en un momento: D

por cierto. usted dijo que las máquinas virtuales deberían tener una carga ligera, por lo que no contaba con cpuload o diskload. y esas cifras tienen exactamente 0 redundancia.

Si puede adelgazar al huésped lo suficiente, probablemente podría hacerlo, sin X, se iniciaron servicios mínimos, etc. Observe el servidor slackware o ubuntu. Xen parece ser popular entre las empresas de alojamiento web, por lo que podría valer la pena mirar.

El uso de la CPU dependerá de las aplicaciones, ¡pero es posible que desee comprar más ram!

¿Hay alguna razón por la que cada instancia de servicio de red deba ser compartimentada en sus propias máquinas virtuales? Si no necesita aislar a los usuarios entre sí, pero sí necesita aislar los procesos y el tráfico, entonces probablemente estaría mejor usando los cinco servidores tal como están y lanzando procesos separados para cada instancia. Cada instancia estaría vinculada a una interfaz virtual separada.

Por ejemplo, configure una interfaz virtual y asígnele una dirección IP. Cree un archivo httpd.conf y / o el archivo sendmail.cf para la instancia que desee crear. En el archivo de configuración, especifique que el daemon debe estar vinculado a la interfaz virtual (y solo a esa). Lanzar el demonio.

Repita para cada una de las instancias. Tendrá muchos procesos en ejecución (cientos, si no miles), la suma total de ellos usará menos memoria que docenas de máquinas virtuales. Además, su sistema operativo podrá intercambiar los que no se hayan utilizado en el disco.

Si haces los cálculos, obtienes un promedio de 100 MB de RAM para cada máquina. Esto no es mucho. La sobrecarga de una máquina virtual es bastante grande, ya que se debe ejecutar un sistema operativo completo en cada instancia.

¿O usa un sistema operativo de huella muy pequeña ( http://www.damnsmalllinux.org/ ? ) y dedique tiempo a simplificarlo aún más o obtendrá máquinas más grandes.

Dado que las máquinas son tan baratas, tiendo a actualizar a un sistema operativo de 64 bits con un montón de RAM.

VMWare tiene una opción genial donde puedes " agrupar " un grupo de máquinas físicas, y moverá automáticamente las máquinas virtuales a cualquier hardware que se utilice menos, sin interrumpir el funcionamiento de la máquina virtual.

Enlace de publicidad.

¿Está restringido a vmware? ¿Ha considerado virtualización a nivel de sistema operativo? obtendrá más máquinas virtuales con menos sobrecarga , dado que cada VM puede ejecutar el mismo kernel.

Varios pensamientos ...

1- Como han señalado otros, la aritmética de la memoria no funciona, necesitará más memoria RAM.

2- Según el servicio, puede encontrar máquinas virtuales preconfiguradas. Por ejemplo, Astaro tiene una configuración de VM para su software de firewall gratuito. También puede encontrar una distribución de linux muy pequeña que pueda adaptar.

3- Tal vez me esté perdiendo algo, pero parece que Ubuntu ya está bastante cerca ... 20 instancias por máquina en 5 máquinas obtienen las 100 instancias que necesita. No hay mucho espacio para el crecimiento futuro, sin embargo ...

Cuídate, buena suerte.

No sé si esto es posible, pero ¿qué hay de ejecutar cada servicio en un entorno chroot? Probablemente pueda ahorrar espacio en el disco vinculando los archivos de biblioteca necesarios para crear cada sistema de archivos chroot.

Otro problema con la ejecución de cada servicio en su propia VM es que necesitarán su propia dirección IP. Es posible que 100 direcciones IP no sean un problema en una red interna (como una configuración de 172/8 o 10/8), pero si son parte de su Clase A (suponiendo que tenga esa cantidad de público), se agotarán. rápido.

Y, como otros han preguntado, ¿por qué cada servicio debe ser su propia máquina virtual? Muchos de ellos deberían poder ejecutarse fácilmente en el mismo host.

Si es algo que se puede hacer en el nivel de la aplicación, me quedaría sin ninguna virtualización. Puede ejecutar varias instancias de su aplicación en diferentes números de puerto, incluso diferentes IP con alias de IP fácilmente. De esa manera, puede ejecutar fácilmente más de 20 copias en cada una de sus cajas. Qué diablos, puedes hacer todo con la mitad de tu hardware.

La virtualización no es la solución para todo. :)

Mi 2c.

Cloud Foundry. No sé nada acerca de las máquinas virtuales en comparación con cualquier otra persona que haya enviado una respuesta, pero por lo que entiendo, si tiene un host, una máquina virtual en ese host y luego Cloud Foundry en esa máquina virtual, puede crear fácilmente una VM secundaria básica y fácilmente. replique y configure todos sus servicios dentro de ese conjunto de máquinas virtuales secundarias, mientras mantiene el uso del hardware bajo. No sé si funcionará con seguridad, pero según tengo entendido, ese sería uno de los enfoques más mínimos y un enfoque de dos cascos que reduciría el posible riesgo de dañar la máquina host.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top