Domanda

Ho bisogno di eseguire un numero relativamente grande di macchine virtuali su un numero relativamente piccolo di host fisici. Ogni macchina virtuale non sta facendo molto - ognuno deve solo eseguire essenzialmente un servizio di rete di base - pensa a SMTP o simili. Inoltre, il carico su ciascuno sarà estremamente leggero.

Sfortunatamente, i numeri sono qualcosa come 100 macchine virtuali su 5 host fisici. Ogni host è abbastanza decente - core 2 con 2 concerti di ram e un disco da 1 TB. Tuttavia, so solo che prendere un'immagine vmware di Ubuntu e lanciare quella macchina non mi porterà da nessuna parte vicino a 100 istanze e sarebbe qualcosa di più vicino a 20.

Quindi, c'è qualche speranza per questo rapporto tra immagini e host? Inoltre, quale implementazione della macchina virtuale sarebbe più adatta a questo scopo - ovvero ha un uso complessivo efficiente delle risorse? Usiamo principalmente vmware qui, ma se c'è un vantaggio significativo in termini di prestazioni che potrebbe essere ottenuto passando a Xen o simili, sono sicuro che lo prenderemmo in considerazione.

Grazie in anticipo per i tuoi approfondimenti :)

Nota: abbiamo finito con OpenVZ e ha funzionato piuttosto bene. I parametri predefiniti per un modello di Ubuntu ci consentono di eseguire circa 40 istanze per macchina.

È stato utile?

Soluzione

ci sono tre fronti principali per adattarli:

  1. spese generali inferiori. OpenVZ, Vserver, chroot, sarebbe l'ideale se applicabile. se hai davvero bisogno che ogni istanza sia una vera VM con il proprio kernel, prova KVM / Xen invece di VMWare. potrebbe essere meno maturo, ma avrai molta più flessibilità.

  2. ospiti più piccoli. prova Ubuntu JeOS o creane uno tuo con busybox

  3. condividi il più possibile tra gli ospiti. prova a condividere una singola immagine R / O con tutto il sistema operativo e monta una piccola immagine R / W per ogni ospite su / var, / home, / etc, ecc

Altri suggerimenti

Un paio di problemi con questo ...

  1. Per il server Vmware è davvero necessario l'hardware del server a meno che non sia solo per il test.
  2. Scegli una soluzione di virtualizzazione a livello semplice come Xen Server o VMware ESX o ESXi (gratuito) o Hyper-V che non è a livello nudo ma con prestazioni più vicine.
  3. Per 20-1 avrai bisogno di più RAM. La matematica non si somma. Le macchine funzionali minime hanno bisogno di 512 a meno che non sia un linux perfettamente messo a nudo che dovrebbe avere almeno 256. 20x256 = 5 gb + 5-10% di sovraccarico. Non succederà davvero su quelle specifiche.
  4. Per 20-1 avrai bisogno di più processori. Ogni macchina avrà una vCPU. condiviso su un core 2 significa che 10-1 per processore. non bene. Corriamo quasi 20 su un Dell quad dual core 1950 1950, 16 GB di RAM. Funziona alla grande.
  5. Qualunque cosa tu scelga, stai sovrascrivendo la memoria. Non sono esattamente sicuro di quali ti permettono. Vmware lo farà, ma mostra avvisi.
  6. Ho sentito ma non ho prove che XenServer offrirà vantaggi in termini di prestazioni, ma nessuno afferma più del 10-20%.

Buona fortuna

Hai davvero bisogno di 100 sistemi operativi completamente funzionali?

Perché non usare già i web server di approccio? Intendo server / host Web virtuali.

Ad esempio, prendere Apache HTTPD installato su un singolo server fisico che ospita molti server virtuali usando un singolo file di configurazione. Inoltre avrai bisogno di DNS configurato e / o molte interfacce di rete virtuale (eth0: 0, eth0: 1, ..., eth0: n) con indirizzi IP diversi.

Questo dovrebbe funzionare se hai davvero bisogno solo di diversi servizi esposti al mondo e il carico non è elevato.

Un'altra possibilità è quella di utilizzare una distribuzione Linux leggera che può essere eseguita in quantità molto piccole di memoria. Qualcosa come DamnSmallLinux o una variazione su DDWRT. Possono funzionare con un minimo di 16 MB di memoria, consentendo di eseguire 20 o più su un singolo computer.

Faresti meglio a eseguire VMware ESX / ESXi in quanto entrambi hanno una fantastica funzionalità di pooling di memoria. Prende sostanzialmente pagine di memoria identiche e le usa tra più guest, quindi se gestisci molti guest identici, sarai in grado di ottenere molto di più sul tuo host che con altre VM.

Controlla le informazioni su " Trasparenza pagina trasparente " in questo post di blog e un commento al riguardo anche qui .

Ovviamente lo stai ancora spingendo con 20 guest per host e solo 2 GB di RAM su ciascuno, ma se rimuovi tutti servizi e app estranei, costruisci 1 immagine guest e clonala prima di installare il su ciascuna app dedicata, potresti solo cavartela, soprattutto perché il link VMware mostra un host da 4 GB con 40 ospiti!

Ho una macchina quadcore che esegue un desktop completo e 9 macchine virtuali. dal momento che questa è una macchina di prova uso tutti i tipi di ospiti. il migliore sull'uso di ram sembra essere debian-kfreebsd e il piccolo core linux. Il piccolo core linux usa 10 M di RAM senza fare nulla. aggiungere un paio di servizi e potrebbe essere 32M, quindi ho potuto eseguire 32 VM entro 1 GB di RAM! hai 2 GB quindi diciamo che potresti eseguire 48 macchine tra cui un hypervisor e overhead (sto usando kvm.) quindi con 5 macchine saremmo fino a 240 macchine: D

Penso che lo proverò tra un momento: D

btw. hai detto che la VM avrebbe un carico leggero, quindi non ho fatto affidamento su cpuload o diskload. e quelle cifre hanno esattamente 0 ridondanza.

Se riesci a snellire il guest abbastanza probabilmente potresti farlo, nessuna X, servizi minimi avviati ecc. Guarda slackware o Ubuntu Server. Xen sembra popolare tra le società di web hosting, quindi potrebbe valere la pena guardarlo.

L'utilizzo della CPU dipenderà dalle app ma potresti voler comprare qualche ram in più!

C'è un motivo per cui ogni istanza del servizio di rete deve essere suddivisa in compartimenti nelle proprie macchine virtuali? Se non hai bisogno di isolare gli utenti gli uni dagli altri, ma devi isolare i processi e il traffico, probabilmente staresti meglio usando i cinque server così com'è e avviando processi separati per ogni istanza. Ogni istanza sarebbe associata a un'interfaccia virtuale separata.

Ad esempio, configura un'interfaccia virtuale e assegnale un indirizzo IP. Creare un file httpd.conf e / o sendmail.cf per l'istanza che si desidera creare. Nel file di configurazione, specifica che il demone deve essere associato all'interfaccia virtuale (e solo a quella). Avvia il demone.

Ripeti per ciascuna delle istanze. Avrai molti processi in esecuzione (centinaia, se non migliaia), la somma totale di essi utilizzerà meno memoria di dozzine di macchine virtuali. Inoltre, il tuo sistema operativo sarà in grado di scambiare quelli inutilizzati sul disco.

Se fai i calcoli, ottieni in media 100 MB di ram per ogni macchina. Questo non è molto. Il sovraccarico per una VM è piuttosto grande, dovendo eseguire un SO completo in ogni istanza.

O usi un sistema operativo di dimensioni ridotte ( http://www.damnsmalllinux.org/ ? ) e dedicare del tempo a ridurlo ancora di più o si ottengono macchine più grandi.

Le macchine sono così economiche, tenderei a passare a un sistema operativo a 64 bit con un sacco di RAM.

VMWare ha un'opzione interessante in cui puoi " raggruppare " un gruppo di macchine fisiche e sposterà automaticamente le macchine virtuali su qualunque hardware sia meno utilizzato, senza interrompere il funzionamento della VM.

Piuttosto link pubblicitario.

Sei limitato a vmware? Hai considerato Virtualizzazione a livello di sistema operativo? Avrai più VM con meno spese generali , dato che ogni VM può eseguire lo stesso kernel.

Diversi pensieri ...

1- Come sottolineato da altri, l'aritmetica della memoria non funziona, avrai bisogno di più RAM.

2- A seconda del servizio, potresti essere in grado di trovare macchine virtuali preconfigurate. Ad esempio, Astaro ha una configurazione VM per il suo software firewall gratuito. Potresti anche essere in grado di trovare una distribuzione Linux molto piccola che puoi adattare.

3- Forse mi manca qualcosa, ma sembra che Ubuntu sia già abbastanza vicino ... 20 istanze per macchina su 5 macchine ottengono le 100 istanze necessarie. Non c'è molto margine per la crescita futura, tuttavia ...

Abbi cura di te, buona fortuna.

Non so se questo sia possibile, ma che ne dici di eseguire ogni servizio in un ambiente chroot? Probabilmente potresti risparmiare spazio su disco collegando i file della libreria necessari per creare ogni file system chroot.

Un altro problema con l'esecuzione di ciascun servizio nella propria VM è che tutti avranno bisogno del proprio indirizzo IP. 100 IP potrebbero non essere un problema su una rete interna (come una configurazione 172/8 o 10/8), ma se fanno parte della tua Classe A (presumendo che tu abbia così tanto pubblico), finirai veloce.

E, come altri hanno chiesto, perché ogni servizio deve essere la propria VM? Molti di loro dovrebbero essere facilmente in grado di funzionare sullo stesso host.

Se è qualcosa che può essere fatto a livello di applicazione, andrei senza virtualizatoin. Puoi eseguire più istanze della tua app su numeri di porta diversi, anche IP diversi con aliasing IP facilmente. In questo modo puoi facilmente eseguire più di 20 copie su ciascuna delle tue scatole. Cavolo, potresti essere in grado di fare tutto con metà dell'hardware.

La virtualizzazione non è la soluzione per tutto. :)

Il mio 2c.

Cloud Foundry. Non so nulla di VM rispetto a chiunque altro abbia inviato una risposta, ma da quello che ho capito se hai un host, una VM su quell'host e quindi Cloud Foundry su quella VM puoi facilmente creare una VM secondaria di base e facilmente replicare e configurare tutti i servizi all'interno di quel set di macchine virtuali secondarie, mantenendo un basso utilizzo dell'hardware. Non so se funzionerà di sicuro, ma da quello che capisco sarebbe uno degli approcci più minimi ed è un approccio a due scafi che ridurrebbe il possibile rischio di danneggiare la macchina host.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top