2011-10-09 1 views
6

Ho lavorato su un'applicazione Web PHP basata su cloud (AWS EC2) e sto affrontando un problema quando si tratta di lavorare con più server (tutto sotto un AWS Elastic Load Balancer). Su un server, quando carico i file più recenti, sono immediatamente in produzione su tutta l'applicazione. Ma questo non è vero quando si utilizzano più server: è necessario caricare file su ognuno di essi, ogni volta che si esegue una modifica. Questo potrebbe funzionare bene se non aggiorni nulla molto spesso, o se hai solo uno o due server. Ma cosa succede se si aggiorna il sistema più volte in una settimana, attraverso dieci server?Distribuire il contenuto su più server (EC2)

Quello che sto cercando è un modo per "eseguire il commit" delle modifiche dal nostro server di sviluppo o di testing e farlo "spingere" verso tutti i nostri server di produzione immediatamente. Idealmente l'aggiornamento verrebbe applicato a un solo server alla volta (anche se ci vuole solo un secondo o due per server), quindi il ELB non invierà traffico mentre i file stanno cambiando in modo da non interrompere il traffico di produzione che potrebbe essere che scorre verso l'ELB. Qual è il modo migliore per farlo? Uno dei miei pensieri sarebbe quello di utilizzare SVN sul server di sviluppo, ma che non "spinge" realmente sui server. Sto cercando un processo che richiede solo pochi secondi per eseguire un aggiornamento e successivamente iniziare ad applicarlo ai server. Inoltre, per chi ha familiarità con AWS, qual è il modo migliore per aggiornare un'AMI con gli ultimi aggiornamenti in modo che l'auto-scaler lanci sempre nuove istanze con l'ultima versione del software?

Ci devono essere buoni modi per farlo .... Non è possibile visualizzare siti come Facebook, Google, Apple, Amazon, Twitter, ecc. Passando attraverso e aggiornando centinaia o migliaia di server manualmente e uno a uno quando fare un cambiamento.

Grazie in anticipo per il vostro aiuto. Spero che potremo trovare una soluzione a questo problema ... .Che siano state almeno 100 ricerche su Google, sia io che il mio socio in affari, nell'ultimo giorno, ci siamo dimostrati infruttuosi per la maggior parte nella risoluzione di questo problema.

Alex

+0

Questa è la stessa domanda qui: http://stackoverflow.com/questions/6730360/best-way-to-load-php-classes-in-ec2-instancestore-ebs-or-s3 – andig

risposta

0

Avere una buona occhiata a KwateeSDCM. Consente di distribuire file e software su qualsiasi numero di server e, se necessario, di personalizzare i parametri specifici del server lungo il percorso. C'è un post su deploying a web application su più istanze di tomcat ma è indipendente dal linguaggio e funzionerà con PHP altrettanto bene se hai abilitato ssh sui tuoi server AWS.

1

Utilizziamo scalr.net per gestire i nostri server Web e le istanze di bilanciamento del carico. Ha funzionato abbastanza bene fino ad ora. abbiamo una server farm per ciascuno dei nostri ambienti (2 farm di produzione, staging, sandbox). Abbiamo un ruolo preconfigurato per un server Web, quindi è estremamente semplice aprire nuove istanze e ridimensionarle quando necessario. il server Web tira il codice da github all'avvio.

Non abbiamo completato tutte le modifiche di deployment che vogliamo fare, ma in fondo ecco come abbiamo distribuire nuove versioni e nel nostro ambiente di produzione:

  1. usiamo Phing per aggiornare il codice sorgente e la distribuzione su ogni web servizio. abbiamo creato un'attività che esegue un git pull ed esegue modifiche al database (attività php dbdeploy). http://www.phing.info/trac/
  2. abbiamo scritto uno script di shell che esegue phing e lo abbiamo aggiunto a scalr come script. Scalr ha una bella interfaccia per gestire gli script.

    #!/bin/sh 
    
    cd /var/www 
    phing -f /var/www/build.xml -Denvironment=production deploy 
    
  3. scalr ha un'opzione per eseguire gli script su tutte le istanze di una farm specifica, in modo che ogni release abbiamo solo spingere al ramo master in github ed eseguire lo script scalr.

Vogliamo creare un hook github che viene distribuito automaticamente quando si passa al ramo master. Scalr ha api in grado di eseguire script, quindi è possibile.