Ich unterhalte zwei Rechenzentren, und da immer mehr unserer wichtigen Infrastrukturen über Marionetten gesteuert werden, ist es wichtig, dass die Marionettenmeister am zweiten Standort arbeiten, falls unser Hauptstandort ausfällt.
Noch besser wäre eine Art Aktiv / Aktiv-Einrichtung, damit die Server am zweiten Standort nicht über das WAN abfragen.
Gibt es Standardmethoden für die Hochverfügbarkeit von Marionetten mit mehreren Standorten?
puppet
high-availability
Kyle Brandt
quelle
quelle
git
odersvn
oderrsync
oder was auch immer Versionskontrollsystem verwenden Sie das , was Sie brauchen , eher zu skalieren als der Puppenspieler.Antworten:
Puppet eignet sich eigentlich ziemlich gut für Umgebungen mit mehreren Mastern, mit Vorbehalten. Der wichtigste? Viele Teile von Puppet möchten zentralisiert werden. Die Zertifizierungsstelle, die Inventarisierungs- und Dashboard- / Berichtsservices, das Filebucketing und gespeicherte Konfigurationen - alle sind am besten in einem Setup (oder benötigen es einfach), in dem es nur einen Ort gibt, an dem sie sich unterhalten können.
Es ist jedoch durchaus praktikabel, viele dieser sich bewegenden Teile in einer Umgebung mit mehreren Mastern zum Laufen zu bringen, wenn Sie mit dem Verlust einiger Funktionen einverstanden sind, wenn Sie Ihre primäre Site verloren haben.
Beginnen wir mit der Basisfunktionalität, um einen Knoten an einen Master zu melden:
Module und Manifeste
Dieser Teil ist einfach. Versionskontrolle sie. Wenn es sich um ein verteiltes Versionskontrollsystem handelt, zentralisieren und synchronisieren Sie es einfach und ändern Sie Ihren Push / Pull-Fluss nach Bedarf auf der Failover-Site. Wenn es sich um Subversion handelt, möchten Sie wahrscheinlich
svnsync
das Repo auf Ihre Failover-Site durchführen.Zertifizierungsstelle
Eine Möglichkeit besteht darin, die Zertifizierungsstellendateien einfach zwischen den Mastern zu synchronisieren, sodass alle dasselbe Stammzertifikat verwenden und Zertifikate signieren können. Das hat mich immer als "falsch gemacht" empfunden;
Ich kann nicht ehrlich sagen, dass ich diese Option gründlich getestet habe, da sie schrecklich erscheint. Puppet Labs scheinen diese Option jedoch nicht zu fördern, wie in der Anmerkung hier angegeben .
Sie müssen also einen zentralen CA-Master haben. Alle Vertrauensstellungen funktionieren weiterhin, wenn die Zertifizierungsstelle inaktiv ist, da alle Clients und anderen Master das Zertifizierungsstellenzertifikat und die Zertifikatsperrliste zwischenspeichern (obwohl sie die Zertifikatsperrliste nicht so oft aktualisieren, wie sie sollten). Sie können jedoch erst neue Zertifikate signieren Sie sichern den primären Standort oder stellen den CA-Master von Sicherungen am Failover-Standort wieder her.
Sie wählen einen Master als CA aus und lassen ihn von allen anderen Mastern deaktivieren:
Dann möchten Sie, dass dieses zentrale System den gesamten zertifikatsbezogenen Datenverkehr abruft. Hierfür gibt es einige Optionen.
SRV
Unterstützung für neue Datensätze in 3.0, um alle Agentenknoten auf die richtige Stelle für die Zertifizierungsstelle zu verweisen._x-puppet-ca._tcp.example.com
ca_server
Konfigurationsoption inpuppet.conf
allen Agenten einÜbertragen Sie den gesamten Verkehr für CA-bezogene Anforderungen von Agenten an den richtigen Master. Wenn Sie beispielsweise alle Master in Apache über Passenger ausführen, konfigurieren Sie dies auf den Nicht-CAs:
Und das sollte es tun.
Bevor wir zu den Nebendienstleistungen übergehen, eine Randnotiz;
DNS-Namen für Master-Zertifikate
Ich denke, das hier ist der überzeugendste Grund, auf 3.0 umzusteigen. Angenommen, Sie möchten einen Knoten auf "einen alten Arbeitsmaster" verweisen.
Unter 2.7 benötigen Sie einen generischen DNS-Namen
puppet.example.com
, und alle Master benötigen diesen in ihrem Zertifikat. Das bedeutet Einstellungdns_alt_names
in ihrer Konfiguration, Re-Ausgabe das CERT , dass sie hatten , bevor sie als Master konfiguriert wurden, erneut die Ausgabe wieder das CERT , wenn Sie einen neuen DNS - Namen in die Liste hinzufügen müssen (wie , wenn Sie mehr DNS - Namen wollten Agenten bevorzugen Master in ihrer Site) .. hässlich.Mit 3.0 können Sie
SRV
Datensätze verwenden. Geben Sie all Ihren Kunden dies;Dann werden für die Master keine speziellen Zertifikate benötigt - fügen Sie einfach einen neuen Datensatz zu Ihrer
SRV
RR hinzu_x-puppet._tcp.example.com
und schon ist es ein Live-Master in der Gruppe. Besser noch, Sie können die Master-Auswahllogik auf einfache Weise verfeinern. "Jeder alte Arbeitsmeister, aber bevorzugen Sie den in Ihrer Site", indem Sie verschiedeneSRV
Datensätze für verschiedene Sites einrichten. nichtdns_alt_names
benötigt.Berichte / Dashboard
Dieser funktioniert am besten zentral, aber wenn Sie bei Ausfall Ihrer primären Site darauf verzichten können, ist dies kein Problem. Konfigurieren Sie einfach alle Ihre Master mit der richtigen Position, um die Berichte zu platzieren.
..und Sie sind fertig. Das Fehlschlagen des Uploads eines Berichts ist für den Konfigurationslauf nicht schwerwiegend. Es geht nur verloren, wenn der Toast des Dashboard-Servers erfolgt.
Fact Inventory
Eine weitere schöne Sache, die Sie in Ihr Dashboard geklebt haben, ist der Inventarservice. Mit dem
facts_terminus
Satz ,rest
wie in der Dokumentation empfohlen, würde dies tatsächlich Konfiguration läuft brechen , wenn der zentrale Bestands Dienst nicht verfügbar ist. Der Trick dabei ist, deninventory_service
Terminus auf den nicht zentralen Mastern zu verwenden, was ein elegantes Versagen ermöglicht.Stellen Sie Ihren zentralen Inventarserver so ein, dass die Inventardaten entweder über ActiveRecord oder PuppetDB gespeichert werden. Er sollte immer auf dem neuesten Stand sein, wenn der Dienst verfügbar ist.
Also - wenn Sie mit einer hübschen Konfigurationsverwaltungsumgebung mit Barebones zufrieden sind, in der Sie nicht einmal die Zertifizierungsstelle verwenden können, um das Zertifikat eines neuen Knotens zu signieren, bis es wiederhergestellt ist, kann dies gut funktionieren - auch wenn es wirklich nett wäre wenn einige dieser Komponenten ein wenig vertriebsfreundlicher wären .
quelle
SRV
Datensatz dementsprechend -SRV
Rekorde erscheinen mir hier trotz meiner allgemeinen Ambivalenz gegenüber als die eleganteste Lösung ...)Der von Ladadadada beschriebene "masterless puppet" -Ansatz ist der, mit dem ich am vertrautesten bin (im Grunde ist es das, was wir mit radmind in meiner Firma machen). Genauer gesagt handelt es sich um "Mehrere Master, die durch einen externen Prozess synchronisiert werden", bei dem jeder Server (theoretisch) im Notfall unser gesamtes Universum bedienen kann.
In unserem Fall werden aufgrund der Natur von Radmind einfach
rsync
die Transkripte und Datendateien von einem genehmigten Master auf den Radmind-Server jedes Remotestandorts übertragen, und Clients rufen ihre Aktualisierungen mit einem kurzen Hostnamen vom Server abradmind
(durch die Magie wirdresolv.conf
dies zuradmind.[sitename].mycompany.com
- immer dem lokalen ausgewertet) Wenn der lokale Server nicht verfügbar ist, können Sie ihn leicht überschreiben und auf den Server einer anderen Site verweisen.Diese Art von rsync-Prozess würde wahrscheinlich auch in Ihrer Situation funktionieren, ist aber im Vergleich zu einer versionskontrollbasierten Lösung möglicherweise nicht optimal.
Für Puppets oder Küchenchefs ist ein versionskontrollbasiertes System aus mehreren Gründen sinnvoller als einfaches rsync - das große Problem ist, dass Sie versionskontrollierende Puppetskripte verwenden (und nicht wie bei radmind ganze Betriebssystem-Images).
Als zusätzlichen Vorteil der versionskontrollbasierten Verwaltung können Sie mehrere Personen gleichzeitig am Repository arbeiten lassen (großartiger Gewinn für Parallelität). Sie erhalten den Revisionsverlauf im Wesentlichen kostenlos, und wenn jemand die Puppet-Umgebung bricht, haben Sie ein einfaches Rollback (vorausgesetzt, Sie " bei der verwendung
git
hast du auchgit blame
was drauf hat).Durch kreatives Verzweigen und Zusammenführen können Sie sogar ein umfangreiches Betriebssystem-Upgrade oder einen anderen Übergang innerhalb des Versionskontroll-Frameworks bewältigen. Sobald Sie es richtig verstanden haben, wechseln Sie einfach in den neuen Zweig und (hoffentlich) der Produktionsschub wird einfach funktionieren.
Würde ich dies hier implementieren, würde ich wahrscheinlich die Vorteile von Pre-Commit- und Post-Commit-Hooks in git nutzen, um sicherzustellen, dass die Puppet-Konfigurationen, für die ein Commit durchgeführt wird, vernünftig sind (clientseitig vorab), und sie an den Rest des Universums weiterleiten, falls dies der Fall ist are (serverseitiger Post - löst möglicherweise auch ein Umgebungsupdate aus, wenn Ihre Bereitstellungsrichtlinien ein solches Verhalten zulassen).
Wenn Sie an jedem Standort neue Puppetmaster-Server einrichten möchten, können Sie einfach die Puppet-Umgebung für jeden entfernten Puppetmaster überprüfen und entweder die oben beschriebene Hacker-Funktion resolv.conf / hostname oder IPs von Anycast-Diensten verwenden, die an lokale Systeme wie Michuelnik weitergeleitet werden ( Letzteres ist praktisch, wenn Sie ein automatisches Failover wünschen, wenn der Puppenmeister einer Site in die Luft sprengt, um sicherzustellen, dass jede Site den "richtigen" Puppenmeister sieht und Ihre WAN-Links nicht verstopft, um Aktualisierungen zu erhalten.
Die Leute bei Brain Tree Payments haben anscheinend die Lösungen für Versionskontrolle und rsync mit einigen benutzerdefinierten Capistrano-Aufgaben kombiniert - ihre Lösung scheint in dem Sinne halbherzig zu sein, dass sie immer noch auf manuellen Workflow-Elementen beruht, aber angepasst und automatisiert werden könnte zu viel Arbeit.
Der paranoide Zwangstester in mir hat eine Vorliebe für seinen
noop
Sanity-Check-Schritt - der Hasser der manuellen Prozesse in mir wünscht sich ein gewisses Maß an Automatisierung ...quelle