Datenbank-Clustering beinhaltet häufig die Konfiguration und Wartung einer Reihe von Servern und Instanzen, die alle einem gemeinsamen Zweck dienen. Damit meinen wir, dass Sie verschiedene Datenbankserver auf verschiedenen Hosts haben können, die dieselben Daten bereitstellen.
Nehmen wir zum Beispiel an, Sie haben die Server A, B, C und D, Sie entscheiden sich, MongoDB auf jedem zu installieren, stellen dann aber später fest, dass es eine neue Version gibt, die Sie hätten verwenden sollen. Wenn Sie eine große Anzahl von Servern haben und die MongoDB-Version aktualisieren müssen, hat die manuelle Konfiguration (eins nach dem anderen) viele Rückschläge. Diese Rückschläge können beinhalten; die Neukonfiguration zu lange dauert (daher wird Ihre Site lange Ausfallzeiten haben) oder Ihre Datenbank anfällig für einige Konfigurationsfehler machen.
Außerdem gibt es immer sich wiederholende Aufgaben, die Sie automatisch ausführen möchten, anstatt jedes Mal dieselben Schritte zu durchlaufen, wenn Sie ähnliche Änderungen vornehmen möchten. Irgendwann müssen wir auch neue Module in Bezug auf die technologische Weiterentwicklung lernen, die uns helfen können, die Clusterleistung zu steigern
Einfach ausgedrückt brauchen wir ein Automatisierungssystem, das alle genannten Unternehmungen erleichtern kann. Puppet ist eines der am meisten bevorzugten Softwaresysteme, um dies zu erreichen, seit:
- Es ist einfach und schneller, MongoDB-Cluster zu konfigurieren und bereitzustellen.
- Wiederkehrende Aufgaben können einfach automatisiert werden, sodass sie später automatisch ausgeführt werden.
- Die gesamte Cluster-Infrastruktur kann gemeinsam von einer einzigen Plattform aus verwaltet werden.
- Einfache Bereitstellung für neue Knoten in Cloud-, Hybrid- oder physischen Umgebungen.
- Orchestrieren Sie Änderungen und Ereignisse über einen Cluster von Knoten hinweg.
- Entdecken Sie innerhalb von Minuten Ressourcen, mit denen Sie verschiedene Aufgaben problemlos erledigen können.
- Skaliert gut von 1 bis 200.000 Knoten.
- Unterstützt von einer Reihe von Plattformen
Was ist Puppet?
Puppet ist eine Sprache, die verwendet wird, um eine Maschine in einen gewünschten Zustand zu bringen, oder vielmehr eine Engine, die verwendet wird, um einige definierte Anweisungen zu interpretieren und auf ein Serversystem anzuwenden. Wie Ansible ist auch Puppet ein Konfigurationsmanagement-Tool, das zur Automatisierung und Ausführung von Datenbank-Cluster-Aufgaben verwendet wird. Es ist jedoch fortschrittlicher und etablierter, wenn man bedenkt, dass es das älteste ist, daher viele neu integrierte Funktionen, die es ausgefeilter als die anderen machen würden. Einer der Hauptgründe, warum ich Puppet persönlich bevorzuge, ist die Möglichkeit, eine große Anzahl von Knoten zu konfigurieren, die mit Load Balancern, Netzwerkgeräten oder Firewalls verbunden sind. Puppet wird häufig in großen Unternehmen mit komplexen Umgebungen eingesetzt.
So funktioniert Puppet
Puppet verwendet die Idempotenztechnik, die ihm hilft, eine bestimmte Maschine vom Zeitpunkt der Erstellung an und während ihres gesamten Lebenszyklus zu verwalten, selbst bei Konfigurationsänderungen. Der Hauptvorteil dabei ist, dass die Maschine über mehrere Jahre hinweg aktualisiert wird, anstatt mehrmals von Grund auf neu gebaut zu werden. Im Falle eines Updates überprüft Puppet den aktuellen Status des Zielcomputers und Änderungen werden nur angewendet, wenn es eine bestimmte Änderung in der Konfiguration gibt.
Idempotenz
Der Idempotenz-Workflow ist unten dargestellt:
Der Puppet-Master sammelt Details zum aktuellen Zustand des Zielcomputers und vergleicht sie mit den Konfigurationsdetails auf Computerebene und gibt dann die Details zurück, die an die Konvertierungsschicht gesendet werden.
Die Konvertierungsschicht vergleicht die abgerufene Konfiguration mit den neu definierten Konfigurationsdetails und erstellt dann einen Katalog, der an die Ziel-Puppet-Agenten gesendet wird, in diesem Fall die Zielknoten, für die die Änderungen angewendet werden sollen.
Die Konfigurationsänderungen werden dann auf das System angewendet, um es in einen gewünschten Zustand umzuwandeln. Nachdem die Änderungen implementiert wurden, sendet der Puppet-Agent einen Bericht zurück an den Puppet-Master, der dokumentiert wird, um den neuen Zustand des Systems als gelieferten Katalog zu definieren.
Grundlegende Komponenten der Puppe
-
Puppet-Ressourcen
Dies sind die wichtigsten Modellierungskomponenten einer bestimmten Maschine, deren Beschreibungen die Maschine in einen gewünschten Zustand bringen.
-
Anbieter
Anbieter sind bestimmte Ressourcen, die zum Hinzufügen von Paketen zum System verwendet werden, z. yum und apt-get. Es gibt Standardanbieter, aber man kann weitere hinzufügen, wenn man einige Pakete benötigt.
-
Manifest
Dies ist eine Sammlung von Ressourcen, die entweder in einer Funktion oder einer Klasse definiert sind, die miteinander gekoppelt sind, um ein Zielsystem zu konfigurieren.
Die Struktur sollte sein
resource:{‘module’: attribute => value }
Wenn wir beispielsweise Mongodb installieren, können wir eine Manifestdatei namens Mongodb.pp mit folgendem Inhalt haben:
package {‘mongodb’: ensure => installed }
-
Module
Dies ist der Schlüsselbaustein von Puppet, das im Grunde eine Sammlung von Ressourcen, Vorlagen und Dateien ist. Sie können in jedem Betriebssystem verteilt werden und können daher mehrfach mit derselben Konfiguration verwendet werden.
-
Vorlagen
Vorlagen werden verwendet, um benutzerdefinierte Inhalte und variable Eingaben zu definieren. Sie verwenden die Ruby-Syntax, d. h. wenn Sie einen Port zum Abhören definieren möchten:
Listen <% [email protected]_number %>
Die Variable port_number ist in diesem Fall im Manifest definiert, das auf diese Vorlage verweist.
-
Statische Dateien
Dies sind allgemeine Dateien, die möglicherweise zur Ausführung bestimmter Aufgaben erforderlich sind. Sie befinden sich im Dateiverzeichnis jedes Moduls.
Puppeninstallation
Zu Lernzwecken werden wir Puppet in einer virtuellen Maschine installieren und konfigurieren, die wir auf unserer lokalen Maschine erstellen werden. Zunächst müssen Sie virtualbox und vagrant installieren. Öffnen Sie nach der Installation ein neues Terminal und erstellen Sie ein Puppet-Verzeichnis wahrscheinlich auf Ihrem Desktop und führen Sie den Befehl $ vagrant init aus. Dadurch wird eine virtuelle Maschine erstellt und als Vagrant gekennzeichnet. Dann können wir uns mit dem Befehl $ vagrant ssh.
auf dieser Maschine anmeldenWenn Sie einen Bildschirm wie den folgenden erhalten, ist Ihre Maschine betriebsbereit.
Wenn Sie sich auf einem Servercomputer befinden, können Sie diesen Schritt andernfalls ignorieren und mit dem Hinzufügen des Puppet-Pakets wie unten fortfahren.
Fügen Sie das Puppet-Paket mit dem Befehl
hinzu$ wget https://apt.puppetlabs.com/puppet5-release-xenial.deb
Und dann das Paket entpacken und mit
installieren$ sudo dpkg -i puppet5-release-xenial.deb
Wir müssen unsere Repositories aktualisieren, damit wir laufen
$ sudo apt-get update
Installieren Sie den Puppet-Agent, indem Sie
ausführen$ sudo apt-get install puppet-agent
Nachdem die Installation abgeschlossen ist, können wir dies bestätigen, indem wir die Version überprüfen. Möglicherweise müssen Sie sich von Ihrer virtuellen Maschine abmelden, damit der Puppet-Pfad zur Umgebung hinzugefügt werden kann, und dann $ puppet --version ausführen. Wenn Sie sich nicht abgemeldet haben, führen Sie $ /opt/puppetlabs/bin/puppet --version aus. Wenn Sie eine Versionsnummer wie 5.5.14 erhalten, war die Installation erfolgreich.
Nachdem wir MongoDB mit der oben erstellten Mongodb.pp installiert haben, können wir einfach eine Aufgabe schreiben, um ein Datenbankprodukt einzurichten und dieser Datenbank auch einen Benutzer hinzuzufügen.
„Mongodb_database“ wird verwendet, um Datenbanken innerhalb von MongoDB zu erstellen und zu verwalten
mongodb_database{‘products’:
ensure => present,
tries => 10
}
„Mongodb_user kann verwendet werden, um Benutzer innerhalb einer MongoDB-Datenbank zu erstellen und zu verwalten.“
So fügen Sie einen Benutzer zur Datenbank „Produkte“ hinzu
mongodb_user {userprod:
username => ‘prodUser’,
ensure => present,
password_hash => mongodb_password(‘prodUser’, ‘passProdser’),
database => prodUser,
roles => [‘readWrite’, ‘dbAdmin’],
tries => 10
}
Schlussfolgerung
In diesem Blog haben wir gelernt, was Puppet ist, welche Vorzüge damit verbunden sind und welche Architektur funktioniert. Puppet ist etwas komplexer als die anderen Verwaltungstools (wie Chef und Ansible), aber es hat viele Module, die verwendet werden können, um Probleme rund um die Datenbankverwaltung zu lösen. Im nächsten Teil werden wir besprechen, wie man entfernte Maschinen verbindet, damit sie mit Hilfe der definierten Manifest-Dateien neu konfiguriert werden können.