Automatisierte Linux-Bereitstellung und Konfigurationsverwaltung im kleinen Maßstab - lohnt es sich?


24

Ich werde ungefähr 25 Server mit Debian bereitstellen . Die Maschinen haben unterschiedliche Rollen - Webserver, Java-App-Server, Proxys, MySQL-Boxen. Die Umgebung wird in Zukunft wahrscheinlich nicht viel wachsen - vielleicht 2-5 weitere Server in den nächsten 2 Jahren.

Wahrscheinlich werde ich fai für die Systeminstallation verwenden, aber ich bin mir nicht sicher, ob es sich lohnt, für solch einen kleinen Umfang auch ein zentrales Konfigurationsmanagement für cfengine oder puppet hinzuzufügen .

Ist Konfigurationsmanagement für eine Umgebung dieser Größe sinnvoll?

Antworten:


29

Ich würde empfehlen, eine Mischung aus Debian-Pre-Seeding zu verwenden, bei der Sie dem Installationsprogramm eine Textdatei geben, die alle Fragen beantwortet, die es stellen würde, und Puppet.

Der Grund für die Verwendung der Voreinstellung anstelle von FAI besteht darin, dass Sie nicht erst ein Image erstellen und es auf dem neuesten Stand halten müssen. Am Ende erhalten Sie eine Installation, die derjenigen sehr ähnlich ist, die Sie hätten, wenn Sie alle von Hand ausgeführt hätten. Wenn Sie eine neue Version installieren, müssen Sie eine Konfigurationsdatei mit den Änderungen aktualisieren, anstatt ein neues Image erstellen zu müssen.

Ein Konfigurationsmanagement-Tool ist besonders nützlich, wenn mehrere Server dieselbe Rolle ausführen und identisch sein sollen, z. B. ein Webserver-Cluster. Sie können jedoch auch nützlich sein, um die Basisinstallation aller Server zu konfigurieren. Sie möchten bestimmte Pakete auf all Ihren Servern installieren, z. B. ntpd und einen MTA. Sie werden eine Konfigurationsdatei auf allen Ihren Servern ändern wollen. Ein zusätzlicher Vorteil ist, dass Sie Ihre Manifeste in einer Art Subversion aufbewahren und aufzeichnen können, was sich auf einem Server geändert hat und wer es getan hat und warum. Die Konfigurationsverwaltung kann auch bei einem Serverausfall lebensrettend sein und muss schnell neu erstellt werden. Installieren Sie das Betriebssystem (mit FAI oder Voreinstellung), installieren Sie Puppet und los geht's, genau wie zuvor. Natürlich müssen Sie Datensicherungen aufbewahren.

Das Konfigurationsmanagement erfordert Engagement, um sicherzustellen, dass Sie nur Änderungen daran vornehmen und die Einrichtungskosten im Voraus anfallen. Sobald Sie jedoch ein funktionierendes Setup haben, werden Sie es nicht bereuen.

Puppet ist das modernere der beiden Werkzeuge, die Sie erwähnt haben. Ich kann es wirklich jedem empfehlen. Die Konfiguration ist eine deklarative Sprache und es ist einfach, Konstrukte höherer Ebenen aufzubauen. Es gibt auch eine sehr große Community und es gibt immer Leute, die gerne auf der Mailingliste oder im IRC-Kanal helfen.


Danke für den Hinweis zum Pre-Seeding. Ich schaue mir gerade die Dokumentation dazu an.
pQd

FAI ist eine alte Schule; Ich würde es definitiv nicht empfehlen. Voreinstellung + Puppet ftw.
womble

Wir verwenden FAI und Cfengine, wir haben ungefähr 1000 Maschinen und es funktioniert sehr gut. Es ist erwähnenswert, dass Sie während des Aufbaus in die Maschine ssh können, so dass das Schreiben der Mikroskripte viel einfacher wird.
James

FAI alte Schule? NEIN! FAI ist absolut solide und verfügt über mehr als 10 Jahre Erfahrung. Werfen
Thomas Lange,

Guter Rat, wir verwenden einen ähnlichen Ansatz und es funktioniert gut. Allerdings würde ich FAI nicht entlassen. FAI verwendet keine Images für die Installation (dies wird von SystemImager durchgeführt). Sie müssen ein minimales nfs-Stammverzeichnis einrichten, das zum Ausführen des FAI-Installationsprogramms verwendet wird. Der Installationsprozess wird mit Konfigurationsdateien und der Ausführung verschiedener benutzerdefinierter Hooks automatisiert. Der Vorteil gegenüber der Voreinstellung besteht darin, dass das Konzept der FAI-Klassen die Handhabung mehrerer Server (und sogar Arbeitsstationen) mit unterschiedlichen Rollen vereinfacht.
JooMing

10

Ich würde CFengine für jede Umgebung empfehlen, die mehr als 2-3 Boxen umfasst und in der Sie ein Konzept von "Vorlagen" oder Servern haben, die bestimmte Rollen ausführen.

Warum? Einfach ausgedrückt, es reduziert Fehler, Sie haben ein Tool, das sicherstellt, dass die Datei- / Verzeichnisberechtigungen überall in der Umgebung korrekt sind, und wenn Sie weitere Server einführen, verarbeitet das Tool absolut alles und macht keine Fehler.

Im Gegensatz zu einem erfahrenen Systemadministrator, der am Ende einer zwölfstündigen Schicht einen Webserver einführte, als die Dinge bereits schief liefen / foo / bar andernfalls wird die Anwendung stillschweigend etwas ziemlich Wichtiges tun, wie Rechnungskunden? :)

Tools wie CFengine sind auch eine großartige Möglichkeit, um umweltweite Sicherheitsupdates durchzuführen. Das Ablegen einer Nagios-Konfiguration (NRPE) auf alle Boxen ist ebenfalls ein Kinderspiel. Egal , ob Sie mit fünf Boxen oder fünf zu tun hat hundert Kisten Sie werden Zeit mit CFEngine speichern.

Es ist wahrscheinlich erwähnenswert, dass meine Umgebung etwas größer ist. Ich habe CFengine jedoch auch für kleinere Umgebungen eingesetzt, als Sie vermuten, daher die Empfehlung!

Wahrscheinlich wird Ihre nächste Frage CFengine vs Puppet sein? Das ist eine schwierigere Entscheidung, und ich bin immer auf CFengine umgestiegen, weil Puppet (in den Anfängen) noch nicht so ausgereift war, vor allem was die Fehlerprotokollierung anbelangt. Im Rückblick auf meine spezifischen Fragen mit Puppet, sie SSL - Zertifikat waren verwandt, schmerzlich noch an die Zeit erinnern , die ich 3 Stunden verbrachte Server Diagnose <-> Client - Verbindungsprobleme in irc.freenode.net/#puppet mit einigen kräftigen RTFM und RTFS nur zu finden Ein Fehler, der nicht protokolliert wurde, und Luke sagte: "Ah, das ist wirklich schwer zu beheben" und tat es nie. :(


guter Punkt. Das Problem ist, dass die Dinge in meinem Fall hoch spezialisiert sein werden, die Anzahl der Vorlagen [wegen Redundanz] wird wahrscheinlich bei n / 2 liegen [wobei n die Gesamtzahl der Server ist].
pQd

1
Das ist keine schlechte Sache, die meisten meiner WWW-Cluster sind n + 2, wenn nicht n / 2, und Sie können mit CFengine ziemlich flexibel Knoten hinter Ihren Load Balancern wie HAproxy implementieren. Es ist perfekt, um IPVS und Keepalive-Inhalte zu verwalten :-) Ich wette, Sie haben auch mit n / 2 Redundanzanforderungen eine Menge identischer oder ähnlicher Konfigurationsdateien in Ihrer Umgebung? Denken Sie daran, dass Sie mit CFengine das 'editfiles'-Tool haben, um Dinge wie eine "Template" -Konfigurationsdatei zu tun, die so etwas wie IP enthält, und dann (zur Laufzeit) ein Suchen und Ersetzen mit richtigen Informationen. ;)
Nixgeek

@astinus danke für deine Kommentare. Ich habe auch ein bisschen Angst davor, meine Produktion durch einen Fehler in der zentralen Konfiguration herunterzufahren. Was halten Sie von der Deaktivierung des automatischen Abrufs der Konfiguration und der Protokollierung auf jedem Computer sowie von der Erzwingung der Aktualisierung und der manuellen Überprüfung, ob alles in Ordnung ist? [Ja, ich werde Nagios / Custom Monitoring auch haben ... aber trotzdem].
pQd

1
Ich denke, dass das Vertrauen in Ihre Konfigurationsverwaltungstechniken mit der Zeit steigt. Deaktivieren Sie jedoch in der Zwischenzeit die automatische Abfrage von Boxen und verwenden Sie 'cssh', um sich bei jeder Klasse von Boxen anzumelden und 'cfagent -qv' (oder was auch immer!) Auszuführen Sie möchten Updates pushen. Wenn Sie einen Top-Tipp zur Steigerung des Vertrauens wünschen, stellen Sie eine virtuelle Maschine als "Staging" -Umgebung bereit und stellen Sie sicher, dass alle Änderungen zuerst durchgeführt werden. Ziemlich einfach, wenn Sie Ihre CFengine- oder Puppet-Konfiguration in Subversion beibehalten, verwenden Sie einfach Verzweigungen und Tags.
Nixgeek

Ich werde auch SLACK empfehlen, um die (Neu-) Installation von Systemen und das Konfigurationsmanagement auf lächerliche Weise zu vereinfachen. Es ist hier verfügbar: sundell.net/~alan/projects/slack
HK_

5

Neben Cfengine und Puppet gibt es auch Chefkoch . Ich würde dringend empfehlen, eines dieser Tools zu verwenden, da die Dinge immer in unerwartete Richtungen wachsen werden. Auf diese Weise können Dinge an einem zentralen Ort verwaltet werden.

Es ist wichtig zu erkennen, dass Sie wahrscheinlich nicht alles bekommen, aber wenn Sie mindestens 90% bekommen, ist es ein Anfang. Außerdem macht es Spaß und wird Ihr Leben auf lange Sicht einfacher machen. Schließlich ist es eine gute Fähigkeit, vorwärts zu kommen.


chef ist ein neuer einstieg in die szene des konfigurationsmanagements. Es wurde entwickelt, um konfiguriert zu werden, indem Ruby geschrieben wird, um zu tun, was Sie wollen, im Gegensatz zu der benutzerdefinierten deklarativen Sprache der Puppe. Die Zeit wird zeigen, welche Methode gut funktioniert. Momentan sitze ich im Puppenlager.
David Pashley

3

Ich benutze Cfengine seit 5 Jahren, um Debian zu installieren (von Woody bis heute Lenny). Mit Etch baue ich einen benutzerdefinierten Debian-Installer. Dank Voreinstellung kommt eine einzige Frage auf: "Was ist der Hostname?". Danach konfiguriert cfengine den gesamten Server (dns + dhcp mit dnssec, samba, ntpd, Standardbenutzern (Samba) und Passwörtern, ssh, openvpn, apache vHosts, Backup mit rsnapshot auf LVM, benutzerdefinierten Webminmodulen usw.).

Selbst wenn ich nur einen Server installiere, verwende ich cfengine-Skripte aus meiner Toolbox wie folgt:

control:

  Repository  = ( $(CFREPO) )
  IfElapsed = ( 0 )
  Syslog = ( on )
  actionsequence = ( editfiles shellcommands )
  CPTYPE = ( sum )

editfiles:
  { /etc/sysctl.conf
    # don't spam on tty:
    BeginGroupIfNoSuchLine "kernel.printk.*=.*2 4 1 7"
      DeleteLinesMatching "^kernel.printk.*=.*"
      Append "kernel/printk=2 4 1 7"
    EndGroup
    # no E(xplicit?) C(ongestion) N(otification) 
    BeginGroupIfNoSuchLine "net.ipv4.tcp_ecn.*=.*0"
      DeleteLinesMatching "^net.ipv4.tcp_ecn.*=.*"
      Append "net/ipv4/tcp_ecn=0"
    EndGroup
    BeginGroupIfNoSuchLine "net.ipv4.ip_forward.*=.*1"
      DeleteLinesMatching "^net.ipv4.ip_forward.*=.*"
      Append "net/ipv4/ip_forward=1"
    EndGroup
    DefineClasses "configchange_sysctl"
  }

shellcommands:
  configchange_sysctl::
    "/sbin/sysctl -p /etc/sysctl.conf"

# vim: set ts=2:

Ich mag cfengine, weil die cf2-Skripte einigermaßen lesbar sind.

Es lohnt sich also auf jeden Fall, mit Tools für das automatische Konfigurationsmanagement zu arbeiten.

/ thorsten


2

Es muss sich auch für eine kleine Site lohnen. Beim Wachsen dreht sich alles um Beständigkeit. Und Sie wissen, dass Ihre Website wachsen wird. Am besten fängst du noch klein an. Cfengine ist großartig. Vor allem die Version 3, die alle Paketmanager auf dem gesamten Gebiet unterstützt, sehr leicht und sicher ist und "einfach funktioniert". Puppet lieferte einfach nicht das, was es behauptete. Ich habe es nicht mit Chef versucht.

Der Vorteil von Cfengine gegenüber den anderen ist, dass es ultraleicht ist, aber tatsächlich über mehr Funktionen verfügt. Die Sicherheit ist wie bei ssh und nicht wie bei den von puppet verwendeten Web-Zertifikaten. Als ich meinem Chef von Cfengine erzählte, dachte er, es handele sich um Science-Fiction. Cooles Zeug.


1

Das Tool Nummer eins, das ich mir wünschte, wenn ich eine kleine Site laufen lasse, ist das Erstellen auf Knopfdruck. Es erleichtert das Patchen, Aktualisieren und Neuerstellen, wodurch in Zukunft eine Vielzahl anderer Probleme behoben werden können.

Kein ssh auf allen Boxen richtig installiert? auch kein curl / wget / vim? Was ist mit anderen Inhouse-Tools, die Sie auf jeder Box haben möchten?

Die zentrale Verwaltung Ihrer Server ist eines der ersten Tools, mit denen Sie künftige Bemühungen erheblich vereinfachen können.


1

Ich stimme jedem hier zu. Sie sollten lernen, eine funktionierende Infrastruktur einzurichten, wenn Sie nicht zu groß sind. Denn dann sind Sie vorbereitet, wenn Sie wachsen.

Abhängig davon, was Sie ausführen möchten, würde ich mich für FAI, Cfengine und Pre-Seeding für Debian / Ubuntu entscheiden. FAI kann mit vielen verschiedenen Werkzeugen arbeiten, daher ist es ein guter Anfang für jede Debian-ähnliche Distribution. Mit der klassengesteuerten Konfiguration von FAI (und cfengine) können Sie Ihre Installationen auf einfache Weise in kleine Module aufteilen, die Sie dann für jede Ihrer Maschinen auswählen können. Auf diese Weise wird es nützlich sein, auch wenn Sie viele verschiedene Maschinen haben. Es ist tatsächlich nützlicher, da Sie Ihre Installation mit diesen Skripten dokumentieren. Und wenn Sie auf einem neuen Computer installieren, werden Sie nichts vergessen.

Ja, Sie SOLLTEN einige Computer testen, bevor Sie Ihre Änderungen in einer Live-Installation bereitstellen. Mit einem solchen Konfigurationsskript werden Sie jedoch nicht vergessen, einen Schritt in der Live-Installation auszuführen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.