Come posso aggiornare il file di configurazione di Nginx su molti server identici contemporaneamente?


12

Abbiamo una flotta di server Nginx su Amazon EC2 dove occasionalmente abbiamo bisogno di aggiornare i file di configurazione per implementare nuove impostazioni.

Attualmente abbiamo le configurazioni in una AMI personalizzata e se abbiamo bisogno di aggiornare dobbiamo ricostruire le istanze AMI e quindi EC2. Abbiamo alcuni script di supporto, ma è ancora abbastanza uno sforzo per farlo. C'è un modo migliore?


3
rispondo, saltstack per citarne alcuni.
poige

Risposte:


26

Esistono diversi concetti che è possibile sfruttare.

La chiave del successo è l' automazione

La prima opzione è quella di continuare a fare ciò che stai facendo ora, ovvero ricostruire gli EC2 ad ogni modifica della configurazione . Solo in modo completamente automatizzato.

Mentre ora esegui aggiornamenti di configurazione tramite AMI, fai un ulteriore passo avanti e crei una pipeline che, dopo aver modificato un file di configurazione in alcuni repository ,:

  1. Crea automaticamente un nuovo AMI - uno degli strumenti più popolari per farlo è Packer
  2. Ricostruisci automaticamente la tua flotta Nginx : dovresti già avere tutti i server Nginx in un gruppo con scalabilità automatica con un bilanciamento del carico delle applicazioni in primo piano. In caso contrario , dovresti rendere l'aggiornamento semplice come l'aggiornamento della configurazione di avvio di ASG e l'attesa della ricostruzione delle istanze dal nuovo AMI.

La seconda opzione è quella di mantenere le istanze in atto e distribuire solo i file di configurazione , senza ricostruirli. In genere è possibile trattare i file di configurazione come codice e distribuire le modifiche alla configurazione nello stesso modo in cui distribuire le versioni del codice. AWS ha molti strumenti per aiutarti.

  • AWS Elastic Beanstalk che utilizza Chef internamente e puoi scrivere gli aggiornamenti di Nginx in questo modo.
  • AWS Code Deploy, che è uno strumento di implementazione completamente scriptabile che si integra bene con altre parti di AWS Code Suite :
    • Codice Commit dove è possibile conservare i file di configurazione di Nginx in Git.
    • Pipeline di codice che può attivare automaticamente la distribuzione ogni volta che un file di configurazione viene aggiornato in Code Commit.
  • Ansible o Puppet che sono strumenti popolari non AWS che possono aiutarti a mantenere tutti i server configurati allo stesso modo.

Una volta che hai familiarità con l'automazione di questi aggiornamenti di configurazione di Nginx, potresti voler estendere l'automazione al resto della tua infrastruttura.


C'è un ottimo white paper Panoramica sulle opzioni di distribuzione su AWS che ti fornirà una buona panoramica.

Spero che aiuti :)


Un'alternativa a Ansible o Puppet è Salt, che è progettato per un tipo di installazione master / minion e una sorta di ottimizzato per implementazioni su larga scala.
Araho,

5

Archivia le tue configurazioni su EFS e monta EFS nella posizione prevista per le configurazioni Nginx. In alternativa, inseriscili su Amazon S3 ed esegui una sincronizzazione di tanto in tanto o usa s3fs (attenzione, s3fs potrebbe non essere abbastanza buono per l'uso in produzione).

Quando è necessario modificare la configurazione, aumentare la dimensione desiderata del gruppo di scalabilità automatica per raddoppiare ciò che è necessario per attivare nuove istanze con la nuova configurazione, quindi tornare a ciò che è necessario per rimuovere le vecchie istanze. In alternativa, basta eseguire un riavvio a rotazione dei server.

Un'altra opzione è semplicemente inviare le nuove configurazioni al server usando uno strumento di automazione di base, come la distribuzione del codice AWS.

Le opzioni completamente automatizzate sopra sono tecnicamente migliori e più pulite, ma se cambi raramente le configurazioni e desideri una soluzione semplice, questo potrebbe aiutare.



1

Ricostruire le AMIs o creare una pipeline di distribuzione completa come le altre suggeriscono che solo per una modifica del file di configurazione sembra un eccessivo. È necessario utilizzare Ansible per inviare le modifiche e mantenere sincronizzati tutti i nodi. Esistono molti moduli Ansible che possono aiutarti ad automatizzare le attività comuni.


Uno dei vantaggi dell'infrastruttura immutabile è che non si dispone di server "pet" fragili che devono essere mantenuti. Ciò ti dà la sicurezza di poter creare più server in prod / DR / testing senza problemi.
Tim
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.