2014-04-02 14 views
5

Eseguiamo la nostra applicazione Web su Amazon EC2 con server Web (IIS) con bilanciamento del carico e scalabilità automatica.Sincronizzazione dei server IIS in aws ec2 con best practice per la scalabilità automatica

Prima autoscaling, il nostro processo di distribuzione è stato di copia dei file per un paio di grandi server web.

Ora con autoscaling abbiamo qualcosa da 5 a 12 server web che appaiono e scompaiono a volontà, rendendo il processo di distribuzione più difficile.

Per risolvere questo problema, ho scritto uno script PowerShell che recupera l'IP del server in un gruppo autoscaling e usa MSDeploy sincronizzarli con un server di distribuzione designato (nel bilanciamento del carico, al di fuori del gruppo autoscaling). Quindi crea una nuova AMI e aggiorna la configurazione di scalabilità automatica.

Tutto sembrava essere buono, fino a dopo la ricostruzione del server di distribuzione, lo script di sincronizzazione non aggiorna lo stato di esecuzione dei siti web. Quindi posso mettere il sito in modalità di manutenzione.

Vorrei sapere:

  • come altre persone affrontano il problema (in particolare la sincronizzazione server IIS in autoscaling EC2) (in assenza di WFF per IIS 8)

  • perché l'inizio/arresto di sincronizzazione sta fallendo

Codice:

Set-AWSCredentials -AccessKey XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -SecretKey XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
Set-DefaultAWSRegion "us-west-2" 

$date = get-date 
$dateString = $date.ToString("yyyyMMdd-HHmm") 
$name = $dateString + "Web" 
$imageId = new-ec2image -InstanceId x-xxxxxxxx -Name $name -NoReboot 1 

$launchConfiguration = New-ASLaunchConfiguration -LaunchConfigurationName $name -ImageId $imageId -InstanceType "m3.medium" -SecurityGroups @('Web') -InstanceMonitoring_Enabled $false 

Update-AsAutoScalingGroup -AutoScalingGroupName "XxxxxxxxxxxxXxxxxxxxxx" -LaunchConfigurationName $name 

$a = Get-ASAutoScalingInstance | select -expandproperty InstanceId | Get-EC2Instance | select -expandproperty RunningInstance | select -property PrivateIpAddress 

foreach($ip in $a) 
{ 
     $command = "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" 
     $arg = "-dest:webServer,computerName=" + $ip.PrivateIpAddress; 
     $args = @('-verb:sync', '-source:webServer', $arg) 
     &$command $args 
} 
+0

qualsiasi aiuto sulla formattazione apprezzato. avere codice rientrato di quattro caratteri ma nessuna gioia. – sentece

risposta

4

non cercare di "sync" i server web. Considera di fare una sola volta l'installazione e di consentire l'avvio di uno strumento per la distribuzione gestire la sincronizzazione.

Quello che ho fatto in passato è usato CloudFormation per creare l'ambiente, e con una combinazione di cfn-init e cfn-hup per fare l'installazione. Il processo di distribuzione diventa quindi un caso di ripubblicazione di un nuovo pacchetto in un posto come S3 e quindi di utilizzare CloudFormation per eseguire il bump della versione.

Questo innesca un aggiornamento cfn-hup, in base al quale ogni server estrarrà il pacchetto da S3 e reinstallerà.

anche - se il gruppo scala scale, utilizzerà automaticamente il CFN-init di abbattere e installare il pacchetto completamente prima registrare l'istanza con il bilanciamento del carico.

Un paio di domande StackOverflow simili qui

Inoltre ho scritto due articoli molte lune fa su di esso

0.123.516,410617 millions

Questo dovrebbe dare sufficiente per andare avanti.

+0

Sono un po 'spaventato ora! Scoprirò cosa significa tutto ciò e riferirò al più presto. ma grazie! – sentece

+0

Il trucco è pensare di usare i server di partenza per * tirare * i file da una posizione centrale (es. S3). cfn-init viene utilizzato per avviare il server con i componenti necessari per iniziare e anche per avviare cfn-hup, che monitorerà le modifiche. Una volta che viene rilevata una modifica, si esegue una nuova attrazione. –

+0

grazie, ottima risposta. Non l'ho implementato ma la prossima volta farò qualcosa del genere lo farò. Ho lavorato attorno ai miei problemi originali per il mo – sentece

Problemi correlati