Pergunta

Eu tenho uma necessidade para executar um número relativamente grande de máquinas virtuais em um número relativamente pequeno de hosts físicos. Cada máquina virtual não está fazendo a muito - cada um só precisa ser executado essencialmente um serviço de rede básico - pense SMTP ou similar. Além disso, a carga em cada vai ser extremamente leve.

Infelizmente, os números são algo como 100 máquinas virtuais em 5 hosts físicos. Cada host é suficiente decente - core 2 com 2 GB de RAM e um disco de 1TB. No entanto, sei apenas tomando uma imagem vmware de ubuntu e jogando nessa máquina não vai me chegar perto de 100 casos e seria algo mais próximo de 20.

Então, há alguma esperança para esta relação de imagens para hosts? Além disso, da aplicação da máquina virtual seria mais adequado para este fim - ou seja, tem o uso geral eficiente dos recursos? Nós principalmente usar vmware aqui, mas se há uma vantagem significativa de desempenho que pode ser adquirida por mudar para Xen ou similar, estou certo de que iria considerá-lo.

Agradecemos antecipadamente por suas idéias:)

Nota: Nós acabamos usando OpenVZ e funcionou muito bem. Os parâmetros padrão para um modelo ubuntu corramos cerca de 40 casos por máquina.

Foi útil?

Solução

existem três principais frentes de fazer os ajuste:

  1. menor sobrecarga. OpenVZ, Vserver, chroot, seria ideal se for o caso. se você realmente precisa cada instância ser um verdadeiro VM com o seu próprio kernel, tentar KVM / Xen em vez de VMWare. pode ser menos maduros, mas você vai ter muito mais flexibilidade.

  2. hóspedes mais pequenos. experimentar o Ubuntu JeOS, ou rolar seus próprios com busybox

  3. share, tanto quanto possível entre os hóspedes. tente compartilhar uma imagem R / O único com todo o OS, e montar uma pequena imagem R / W para cada hóspede em / var, / home, / etc, etc

Outras dicas

Um par de problemas com isso ...

  1. Para o servidor Vmware você realmente precisa de hardware de servidor a menos que seja apenas para testes.
  2. Vá com uma solução de virtualização que é o nível nua como Xen Server ou VMware ESX ou ESXi (gratuito) ou Hyper-V que não é nu-nível, mas mais perto no desempenho.
  3. Para 20-1 você vai precisar de mais RAM. A matemática não acrescenta nada. máquinas funcionais mínimas precisa de 512 a menos que um linux perfeitamente despojado que deve ter pelo menos 256. 20x256 = 5GB + 5-10% em cima. Não é realmente vai acontecer nessas especificações.
  4. Para 20-1 você vai precisar de mais processador. Cada máquina terá um vCPU. partilhada num núcleo 2 significa que 01/10 por processador. não é bom. Corremos quase 20 em um dual core quad Dell 1950, RAM 16GB. Funciona muito bem.
  5. O que você escolher, você vai ser o excesso de subscrições de memória. Não sei exatamente quais deixá-lo. VMware, mas mostra avisos.
  6. Eu ouvi, mas não têm prova de que XenServer vai oferecer benefícios de desempenho, mas ninguém reivindicações mais do que 10-20%.

Boa sorte

Você realmente precisa de 100 sistemas operacionais full-funcionais?

Por que não aproveitar servidores web abordagem já usar? Quero dizer web servidores / hosts virtuais.

Por exemplo take Apache HTTPD instalado no servidor físico único que hospeda muitos servidores virtuais usando o arquivo de configuração única. Além disso, você vai precisar de DNS configurado ou muitas interfaces e / virtuais de rede (eth0: 0, eth0: 1, ..., eth0: n). Com diferentes endereços IP

Isso deve funcionar se você realmente precisa apenas alguns serviços expostos ao mundo ea carga não é alto.

Outra possibilidade é usar uma distribuição Linux leve que pode ser executado em muito pequenas quantidades de memória. Algo como DamnSmallLinux ou uma variação sobre DDWRT. Eles podem ser executados em menos de 16 MB de memória, o que lhe permite executar 20 ou mais em uma única máquina.

Você seria melhor fora de funcionar VMware ESX / ESXi, pois ambos têm uma característica pooling de memória fantasia. Ele basicamente toma páginas de memória que são idênticos e usa-los entre vários convidados, por isso, se você estiver executando um monte de convidados idênticos, você vai ser capaz de obter muito mais em seu host do que com outras VMs.

Verifique o pouco sobre "Sharing Página Transparente" em esta entrada do blog , e um comentário sobre isso aqui também.

Obviamente você ainda está empurrando-o com 20 convidados por host e apenas a RAM de 2GB em cada um, mas se você remover todas serviços e aplicativos externos, e imagem de convidado construir 1 e clone-lo antes de instalar o aplicativo dedicado em cada um, você pode apenas fugir com ele, especialmente como o elo mostra VMware uma série 4Gb correr 40 convidados!

Eu tenho uma máquina quadcore executando um desktop completo e 9 máquinas virtuais. uma vez que esta é uma máquina de teste eu uso todos os tipos de clientes. o melhor uso de memória RAM parece ser debian-kfreebsd, e minúsculo linux núcleo. minúsculo linux núcleo utiliza 10M de RAM não fazer nada. adicionar um par de serviços e pode ser 32M, assim que eu poderia correr 32 de vm dentro 1GB de RAM! você tem 2 GB, então vamos dizer que você poderia correr 48 máquinas, incluindo um hypervisor e sobrecarga (estou usando KVM.) assim com 5 máquinas estaríamos até 240 máquinas: D

eu acho que eu vou tentar isso em um momento: D

btw. você disse que a vm é whould tem uma carga leve, para que eu não contava com cpuload ou diskload. e esses números têm exatamente 0 redundância.

Se você pode emagrecer o suficiente hóspede, você provavelmente poderia fazê-lo, sem X, serviços mínimos começou etc. Olhe para slackware ou ubuntu server. Xen parece popular entre as empresas de hospedagem web, então pode valer a pena olhar.

uso da CPU vai depender dos aplicativos, mas você pode querer comprar um pouco mais de memória RAM!

Existe uma razão pela qual cada instância de serviço de rede precisa ser compartimentada em suas próprias máquinas virtuais? Se você não precisa de usuários isolados uns dos outros, mas fazer necessidade de isolar os processos e tráfego, então você provavelmente estaria melhor fora apenas usando os cinco servidores como está e lançar processos separados para cada instância. Cada instância seria ligado a uma interface virtual separada.

Por exemplo, configure uma interface virtual e atribuir-lhe um endereço IP. Crie um arquivo httpd.conf e / ou arquivo sendmail.cf para a instância que você deseja criar. No arquivo de configuração, especificar que o daemon deve ser vinculado à interface virtual (e somente aquele). Inicie o daemon.

Repita para cada um dos casos. Você vai ter um monte de processos em execução (centenas, se não milhares), a soma total deles vai usar menos memória do que dezenas de VMs. Além disso, seu sistema operacional será capaz de trocar as não utilizadas para o disco.

Se você fizer as contas, você recebe em média 100 MB de RAM para cada máquina. Esta não é muito. A sobrecarga de uma VM é muito grande, ter que executar um sistema operacional completo em cada caso.

Ou você usa alguns realmente pequena OS pegada ( http://www.damnsmalllinux.org/ ? ) e gastar tempo para tira-lo para baixo ainda mais ou você recebe máquinas maiores.

Máquinas sendo que barato, eu tendem a atualizar para um sistema operacional de 64 bits com muita memória RAM.

VMWare tem uma opção legal onde você pode "pool" de um grupo de máquinas físicas, e ele irá mover automaticamente as máquinas virtuais para qualquer hardware é menos utilizados, sem interromper o funcionamento da VM.

sim link advertisey.

Você está restrito a vmware? Já considerou operacional de virtualização em nível de sistema? Você terá mais VMs com menos sobrecarga , dado que cada VM pode executar o mesmo kernel.

Vários pensamentos ...

1- Como foi assinalado por outros, a aritmética de memória não funciona, você vai precisar de mais RAM.

2 Dependendo do serviço, você pode ser capaz de encontrar máquinas virtuais pré-configuradas. Por exemplo, Astaro tem uma configuração VM para ele do software firewall livre. Você também pode ser capaz de encontrar uma pequena distro linux que você pode adaptar.

3 Talvez eu estou faltando alguma coisa, mas parece que o Ubuntu é bem perto já ... 20 casos por máquina em 5 máquinas de obter os 100 casos que você necessita. Não há muito espaço para crescimento futuro, no entanto ...

Tome cuidado, boa sorte.

Eu não sei se isso é possível, mas como sobre a execução de cada serviço em um ambiente chroot? Você provavelmente poderia economizar espaço em disco rígido ligando os arquivos de biblioteca necessários para criar cada sistema de arquivos chroot.

Outra questão com o funcionamento de cada serviço em seu próprio VM é que todos eles terão seu próprio endereço IP. 100 IPs pode não ser um problema em uma rede interna (como uma configuração de 172/8 ou 10/8), mas se eles são parte de seu Classe A (presumindo que você tem que muitos público), você vai correr para fora rápido.

E, como outros já pediu, por que cada necessidade serviço a ser sua própria VM? Muitos deles deve ser facilmente capaz de rodar no mesmo host.

Se é algo que pode ser feito no nível do aplicativo - Eu iria sem qualquer virtualizatoin. Você pode executar várias instâncias do seu aplicativo em números de porta diferente, mesmo diferentes IPs com IP aliasing facilmente. Dessa forma, você pode facilmente executar mais de 20 cópias em cada uma de suas caixas. Heck, você pode ser capaz de fazer tudo com metade do seu hardware.

A virtualização não é a solução para tudo. :)

Meu 2c.

Cloud Foundry. Não sei nada sobre VMs em comparação com qualquer outra pessoa que pode ter apresentado uma resposta, mas pelo que eu entendo se você tem um host, uma VM nesse host, e depois Cloud Foundry em que VM você pode facilmente criar uma base secundária VM e facilmente replicar e configurar todos os seus serviços dentro desse conjunto secundária VM, mantendo hardware baixo uso. Eu não sei se ele vai funcionar com certeza, mas pelo que eu entendo que seria uma das abordagens mais mínimas e é uma abordagem em duas casco que iria reduzir possíveis riscos de danificar a máquina host.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top