Linux-Massen-/Remoteverwaltung

Linux-Massen-/Remoteverwaltung

Neben unserer internen IT-Infrastruktur verfügen wir über rund 500 Linux-Rechner, auf denen unsere Dienste für die Online-Welt gehostet werden. Sie sind in einer Reihe von Clustern wie Datenbank A, Produkt A, NFS, Backoffice usw. gruppiert. Darüber hinaus werden sie von einem externen Anbieter gemäß unseren Spezifikationen und Anforderungen verwaltet.

Allerdings stehen wir bei der (Web-)Softwareentwicklung, beim Rollout und Deployment vor großen Problemen – vor allem, weil die Dev- und Staging-Umgebungen fast nichts mit den Live-Systemen gemeinsam haben (die unangenehmen Details erspare ich mir...).

Ich habe also versucht, virtuelle Maschinen zu erstellen, die verschiedenen Live-Systeme so genau wie möglich zu kopieren und sie so vorzubereiten, dass sie sich beispielsweise mit den Entwicklungsdatenbanken statt mit den „echten“ Datenbanken verbinden, was für Entwickler transparent ist (was sie nicht sind root). Das funktioniert ziemlich gut, aber...

Ich habe mich gefragt, wie man diese Systeme aus der Ferne verwalten kann undin großen Mengen? Gibt es eine Softwarefamilie, die ich nicht kenne? Oder zumindest einige Techniken oder Prinzipien, mit denen man vertraut sein sollte?

Wir würden jedem Entwickler eine Reihe von Images zur lokalen Ausführung (VirtualBox) bereitstellen. Die QA-Abteilung würde virtuelle Cluster (XEN oder Hyper-V) erhalten. Wenn ich ein zusätzliches Servermodul bereitstellen, eine neue Datenbankverbindung umleiten oder einfach alles aktualisieren möchte, was der Paketmanager bereitstellt ... wie könnte ich das tun, ohne mich bei jedem System anmelden und/oder meine Kollegen bitten zu müssen, ein Fixture-Skript herunterzuladen und auszuführen?

Ich glaube, es gibt genügend Lösungen. Naja, irgendwie bin ich zu blöd, die richtigen Suchbegriffe in die Suchmaschinen einzugeben... Oder ist das Problem nicht so trivial, wie es klingt?

Fürs Protokoll:

  • Fast alle Systeme laufen unter Debian GNU/Linux 6.x "squeeze"
  • Kein Entwickler ist gezwungen, an seinem Arbeitsplatz ein bestimmtes Betriebssystem zu verwenden
  • Das Budget ist natürlich begrenzt, aber nicht zu klein, um proprietäre Software zu kaufen
  • Bevorzugt wird eine Lösung unter Einbindung unseres oben genannten Providers

Antwort1

Es hängt davon ab, was Sie genau brauchen und wonach Sie suchen. Aber im Allgemeinen gibt es mehrere Lösungen für "Konfigurationsmanagementwie:

  1. Marionette
  2. Koch
  3. Abonnieren
  4. ansible
  5. Salz

usw. Ich persönlich würde Puppet empfehlen, da es eine große Community und viele extern bereitgestellte Rezepte hat. Damit können Sie Systeme automatisch konfigurieren und verwalten. Wenn Sie dies mit eigenen Repositories und automatisierten Updates kombinieren, z. B. überunattended-upgradesSie können das System automatisch aktualisieren.

Eine andere Lösung besteht darin, einfach eigene Pakete company-baseusw. bereitzustellen, die automatisch von der erforderlichen Software abhängen und Ihr System automatisch konfigurieren können.

Sie sollten sich auch mit automatisierten Bereitstellungen (Barebone und virtualisiert) befassen. Wenn Sie dies mit Konfigurationsmanagement oder Ihrem eigenen Repository kombinieren, können Sie Ihre Systeme problemlos automatisieren und neu installieren. Wenn Sie mit der automatisierten Installation beginnen möchten, schauen Sie sich Folgendes an:Abonnierendas sowohl Libvirt- als auch Barebone-Installationen unterstützt und integrierte Puppet-Unterstützung bietet. Wenn Sie es selbst machen möchten, können Sie sich Folgendes ansehen:Kickstart (redhat et. al.) oder "preseeding", um Ihr System automatisch zu konfigurieren. Für Debian können Sie auch etwas wiedebootstrapoder ein Wrapper namensgrml-debootstrapUnterstützung virtualisierter Bilder.

Um Ihrem Entwickler die VirtualBox-Images bereitzustellen, schauen Sie sich an:LandstreicherEs ermöglicht Ihnen, die Erstellung virtualisierter Systeme mit VirtualBox zu automatisieren und unterstützt Chef-, Puppet- und Shell-Skripte, um Ihre virtuelle Umgebung anzupassen.

Wenn Sie die Lösung Ihres bestehenden Anbieters verwenden möchten, sollten Sie ihn fragen, wie er Ihre Systeme verwaltet. Wahrscheinlich wird es sich jedoch um eine Art Konfigurationsmanagement handeln. Möglicherweise können Sie den Agenten auf Ihren Systemen ausführen, wenn Sie auf den Konfigurationsserver zugreifen können.

Suchen Sie bei Google nach Schlüsselwörtern wie devops, configuration management, it automationund server orchestration.

Kurz gesagt: Automatisieren Sie so viel wie möglich und denken Sie nicht einmal daran, Dinge manuell zu erledigen.

Antwort2

Die Antwort zum Thema Softwareverteilung und automatisierte Servereinrichtung hat Ulrich bereits gegeben.

Die Prinzipien dahinter sind

  • Definieren Sie, wie Ihre Server aussehen sollen - dazu gehören gängige Software, die standardmäßig installiert ist, das Partitionierungsschema und das Dateisystem-Layout
  • Produktions-, Staging-, Test- und Entwicklungsserver sollten sich hinsichtlich dieser grundlegenden Standards nicht unterscheiden (sonst werden Sie später auf Probleme stoßen - so wie Sie es getan haben).
  • Verwenden Sie ein geeignetes Änderungsmanagement, um ALLE von Ihnen vorgenommenen Änderungen zu dokumentieren (einschließlich kleiner einzeiliger Änderungen in jeder Konfiguration).
  • Nehmen Sie immer zuerst Änderungen im Test, dann in der Entwicklung, dann in der Inszenierung und zuletzt in der Produktion vor.

Sie haben nach einem praktischen Tool gefragt, mit dem Sie Massen von Servern verwalten können - mein persönlicher Favorit ist cluster-ssh ( cssh). Einmal eingeben und Änderungen auf mehreren Servern gleichzeitig vornehmen.

Wenn Sie ein Problem entdecken und über eine Lösung verfügen, mit der das Problem behoben wird:

  1. Wenden Sie den Fix auf Test/Dev/Staging/Prod an (siehe oben), wenn er wirklich funktioniert
  2. Wenden Sie den Fix auf Ihre virtuellen Vorlagen an, damit zukünftige VM-Klone diesen Fehler nicht mehr aufweisen
  3. Wenden Sie den Fix auf Ihren physischen Installationsprozess an (Kickstart/Autoyast/was auch immer).
  4. Wenden Sie den Fix auf ALLE Server an

Wenn Sie eine große Anzahl von Servern reparieren müssen, handelt es sich dabei um einen Prozess, der gut dokumentiert werden muss. Am Ende sollte ein anderes Team prüfen, ob die Fehlerbehebung vollständig angewendet wurde.

Wir setzen hierfür Mantis (Open Source, PHP) ein.

Antwort3

Ich verwalte etwa 30 Produkte und einige hundert Server in mehreren Ländern. Ich bin der Softwarekonfigurationsmanager, habe also keinen Root-Zugriff (absichtlich), berühre die Datenbanken oder ihre Server nicht (auch dies ist beabsichtigt) und muss aus Gründen der Unternehmenssicherheit viele Hürden überwinden. Aber ich verwalte die Konfigurationen in Test, Staging und Produktion, einschließlich Datenbanklinks und -änderungen. Ich habe eine Reihe von Skripten, die mit Kombinationen aus ssh- pythonund Shell-Skripten an Server gesendet werden.

Die wichtigsten Dinge, über die Sie nachdenken sollten, sind:

  1. Welche Art von Interaktion werden Sie mit Ihren Servern haben? Nur Datei-Uploads? Das Ausführen von Befehlszeilenprogrammen? Das Ausführen von Remote-X-Clients?
  2. Welches Sicherheitsniveau ist für den Zugriff auf diese Server erforderlich? Firewalls, sichere Netzwerke, VPN? Ist es sshausreichend und erfolgt der Zugriff von einem zentralen, sicheren Standort aus?
  3. Wie viel kann auf jedem Server automatisiert werden? Können Sie auf jedem Server ein Programm installieren und ausführen oder müssen Sie das Programm über etwas streamen, um sshes remote auszuführen? Können Sie es mit einem Skript ausführen expectoder reicht ein Befehlszeilenaufruf?

VirtualBox bietet zahlreiche Befehlszeilentools, die Sie einfach über sshSysteme wie puppetdas von Ulrich erwähnte verwalten können.

Antwort4

In den letzten Jahren sind neue minimalistische Systeme auf den Markt gekommen, die sich auf die Fähigkeit konzentrieren, eine Konfiguration mithilfe von Skripten zu erstellen. Da es sich dabei um Frameworks zum Schreiben von Skripten handelt, eignen sie sich in der Regel hervorragend für Aufgaben, die eine Sequenzierung erfordern.

Abonnieren

pyinfra automatisiert Infrastrukturen superschnell und in großem Maßstab. Es kann für die Ad-hoc-Befehlsausführung, die Bereitstellung von Diensten, das Konfigurationsmanagement und mehr verwendet werden.

http://pyinfra.com/

Judo

Einfache Orchestrierung und Konfigurationsverwaltung

http://github.com/rollcat/judo

rset(1) : pln(5)

Konfigurieren Sie Systeme mit einer beliebigen Skriptsprache

http://scriptedconfiguration.org/

verwandte Informationen