Wie aktualisiere ich die Nginx-Konfigurationsdatei auf vielen identischen Servern gleichzeitig?

12

Wir haben eine Flotte von Nginx-Servern auf Amazon EC2, auf denen wir gelegentlich die Konfigurationsdateien aktualisieren müssen, um neue Einstellungen zu implementieren.

Derzeit haben wir die Konfigurationen in einem benutzerdefinierten AMI. Wenn wir ein Update durchführen müssen, müssen wir die AMI- und dann die EC2-Instanzen neu erstellen. Wir haben einige Hilfsskripte, aber es ist immer noch eine ziemliche Anstrengung, dies zu tun. Gibt es einen besseren Weg?

Bububu
quelle
3
ansible, Salzstapel, um nur einige zu nennen.
Poige

Antworten:

26

Es gibt eine Reihe von Konzepten, die Sie nutzen können.

Der Schlüssel zum Erfolg ist die Automatisierung

Die erste Möglichkeit besteht darin, das zu tun, was Sie gerade tun, dh die EC2s bei jeder Konfigurationsänderung neu zu erstellen . Nur vollautomatisch.

Wenn Sie jetzt Konfigurationsaktualisierungen über AMIs durchführen, gehen Sie noch einen Schritt weiter und erstellen eine Pipeline , die bei einer Änderung der Konfigurationsdatei in einem Repository Folgendes bewirkt :

  1. Automatisch ein neues AMI erstellen - eines der beliebtesten Tools dafür ist Packer
  2. Automatische Neuerstellung Ihrer Nginx-Flotte - Sie sollten bereits alle Nginx-Server in einer Auto-Scaling-Gruppe mit einem Application Load Balancer vor sich haben. Wenn Sie dies nicht tun , sollten Sie das Update so einfach wie das Aktualisieren der ASG-Startkonfiguration und das Warten auf die Neuerstellung der Instanzen aus dem neuen AMI machen.

Die zweite Möglichkeit besteht darin, die Instanzen an Ort und Stelle zu halten und nur die Konfigurationsdateien bereitzustellen , ohne sie neu zu erstellen . Im Allgemeinen können Sie Konfigurationsdateien als Code behandeln und Ihre Konfigurationsänderungen genauso bereitstellen, wie Sie Codeversionen bereitstellen würden. AWS verfügt über viele Tools, die dabei helfen.

  • AWS Elastic Beanstalk , das Chef intern verwendet, und Sie können Ihre Nginx-Updates auf diese Weise skripten.
  • AWS Code Deploy ist ein vollständig skriptfähiges Bereitstellungstool, das sich gut in andere Teile der AWS Code Suite integrieren lässt :
    • Code Commit, in dem Sie Ihre Nginx-Konfigurationsdateien in Git aufbewahren können.
    • Code-Pipeline , die die Bereitstellung automatisch auslösen kann, wenn eine Konfigurationsdatei in Code Commit aktualisiert wird.
  • Ansible oder Puppet sind beliebte Nicht-AWS-Tools, mit denen Sie alle Server auf die gleiche Weise konfigurieren können.

Sobald Sie mit der Automatisierung dieser Nginx-Konfigurationsaktualisierungen vertraut sind, möchten Sie die Automatisierung möglicherweise auf den Rest Ihrer Infrastruktur ausweiten.


Es gibt ein großartiges Whitepaper - Übersicht über die Bereitstellungsoptionen in AWS , das Ihnen einen schönen Überblick gibt.

Ich hoffe das hilft :)

MLu
quelle
Eine Alternative zu Ansible oder Puppet ist Salt, das für ein Master- / Minion-Setup konzipiert und für größere Bereitstellungen optimiert ist.
Araho
5

Speichern Sie Ihre Konfigurationen in EFS und stellen Sie EFS an dem Ort bereit, an dem Nginx-Konfigurationen erwartet werden. Stellen Sie sie alternativ auf Amazon S3 und führen Sie gelegentlich eine Synchronisierung durch oder verwenden Sie s3fs (Vorsicht, s3fs ist möglicherweise nicht gut genug für die Produktion).

Wenn Sie Ihre Konfiguration ändern müssen, erhöhen Sie die gewünschte Größe Ihrer Autoscaling-Gruppe, um das zu verdoppeln, was Sie zum Auslösen neuer Instanzen mit der neuen Konfiguration benötigen, und kehren Sie dann zu dem zurück, was Sie benötigen, um die alten Instanzen zu entfernen. Alternativ führen Sie einfach einen fortlaufenden Neustart der Server durch.

Eine andere Möglichkeit besteht darin, die neuen Konfigurationen einfach mit einem grundlegenden Automatisierungstool wie der Bereitstellung von AWS-Code auf Ihren Server zu übertragen.

Die oben genannten vollautomatischen Optionen sind technisch besser und sauberer. Wenn Sie jedoch selten Konfigurationen ändern und eine einfache Lösung wünschen, kann dies hilfreich sein.

Tim
quelle
1

Das Neuerstellen der AMIs oder das Erstellen einer vollwertigen Bereitstellungs-Pipelines, wie die anderen nur für eine Änderung der Konfigurationsdatei vorschlagen, scheint ein Overkill zu sein. Sie sollten Ansible verwenden, um Änderungen zu veröffentlichen und alle Ihre Knoten synchron zu halten. Es gibt viele Ansible-Module, mit denen Sie die allgemeinen Aufgaben automatisieren können.

IPX
quelle
Ein Vorteil der unveränderlichen Infrastruktur besteht darin, dass Sie wissen, dass Sie keine "Haustier" -Server haben, die zerbrechlich sind und gewartet werden müssen. Das gibt Ihnen die Gewissheit, dass Sie problemlos weitere Server in prod / DR / testing erstellen können.
Tim