Bij databaseclustering gaat het vaak om het configureren en onderhouden van een aantal servers en instances, allemaal met een gezamenlijk doel. Hiermee bedoelen we dat je verschillende databaseservers op verschillende hosts kunt hebben die dezelfde gegevens bedienen.
Laten we bijvoorbeeld zeggen dat je servers A, B, C en D hebt, je besluit MongoDB op elke server te installeren, maar je realiseert je later dat er een nieuwe versie is die je had moeten gebruiken. Wanneer je een groot aantal servers hebt en je moet de MongoDB-versie updaten, heeft het handmatig configureren (één voor één) veel tegenslagen. Deze tegenslagen kunnen zijn; te lang duren om opnieuw te configureren (vandaar dat uw site een lange downtime zal hebben) of uw database gevoelig maken voor configuratiefouten.
Bovendien zijn er altijd repetitieve taken die u automatisch wilt laten uitvoeren, in plaats van steeds dezelfde stappen te doorlopen, telkens wanneer u soortgelijke wijzigingen wilt aanbrengen. Op een gegeven moment moeten we ook nieuwe modules leren voor wat betreft technologische vooruitgang die ons kunnen helpen de clusterprestaties te verbeteren
In eenvoudige bewoordingen hebben we een automatiseringssysteem nodig dat alle genoemde ondernemingen kan vergemakkelijken. Puppet is een van de meest geprefereerde softwaresystemen om dit te bereiken sinds:
- Het is gemakkelijk en sneller om het MongoDB-cluster te configureren en te implementeren.
- Repetitieve taken kunnen eenvoudig worden geautomatiseerd, zodat ze later automatisch worden uitgevoerd.
- De hele clusterinfrastructuur kan collectief worden beheerd vanaf één enkel platform.
- Eenvoudige inrichting voor nieuwe nodes in de cloud, hybride of fysieke omgeving.
- Orchestreer wijzigingen en gebeurtenissen in een cluster van knooppunten.
- Ontdek binnen enkele minuten bronnen die u kunnen helpen verschillende taken gemakkelijk uit te voeren.
- Schaalt goed van 1 tot 200k nodes.
- Ondersteund door een aantal platforms
Wat is Puppet?
Puppet is een taal die wordt gebruikt om een machine in een gewenste staat te krijgen, of liever een engine die wordt gebruikt om bepaalde gedefinieerde instructies te interpreteren en toe te passen op een serversysteem. Net als Ansible is Puppet ook een configuratiebeheertool die wordt gebruikt om databaseclustertaken te automatiseren en uit te voeren. Het is echter geavanceerder en goed ingeburgerd, aangezien het de oudste is, dus veel nieuw geïntegreerde functies die het geavanceerder zouden maken dan de andere. Een van de belangrijkste redenen waarom ik persoonlijk de voorkeur geef aan Puppet, is de mogelijkheid die het me geeft om een groot aantal nodes te configureren die zijn verbonden met load balancers, netwerkapparaten of firewalls. Puppet wordt vaak gebruikt in grote ondernemingen met complexe omgevingen.
Hoe Puppet werkt
Puppet gebruikt de idempotentie-techniek die het helpt bij het beheren van een bepaalde machine vanaf het moment van creatie en gedurende de hele levenscyclus, zelfs met configuratiewijzigingen. Het belangrijkste voordeel hiervan is dat de machine over een aantal jaren wordt geüpdatet in plaats van meerdere keren helemaal opnieuw te worden gebouwd. In het geval van een update controleert Puppet de huidige status van de doelmachine en worden wijzigingen alleen toegepast als er een specifieke wijziging in de configuratie is.
Idempotentie
De idempotentie-workflow wordt hieronder weergegeven:
De Puppet-master verzamelt details over de huidige staat van de doelmachine en vergelijkt deze met de configuratiedetails op machineniveau en retourneert vervolgens de details die naar de conversielaag worden verzonden.
De conversielaag vergelijkt de opgehaalde configuratie met de nieuw gedefinieerde configuratiedetails en maakt vervolgens een catalogus die wordt verzonden naar de beoogde Puppet-agents, in dit geval de doelknooppunten waarvoor de wijzigingen moeten worden toegepast.
De configuratiewijzigingen worden vervolgens toegepast op het systeem om het in een gewenste toestand te brengen. Nadat de wijzigingen zijn doorgevoerd, stuurt de Puppet-agent een rapport terug naar de Puppet-master dat gedocumenteerd is om de nieuwe status van het systeem te definiëren als de meegeleverde catalogus.
Puppet-basiscomponenten
-
Marionetbronnen
Dit zijn de belangrijkste modelleringscomponenten van een bepaalde machine waarvan de beschrijvingen de machine in een gewenste staat zullen brengen.
-
Aanbieders
Providers zijn bepaalde bronnen die worden gebruikt om pakketten aan het systeem toe te voegen, b.v. yum en apt-get. Er zijn standaard providers, maar je kunt er meer toevoegen als je pakketten nodig hebt.
-
Manifest
Dit is een verzameling bronnen die zijn gedefinieerd in een functie of een klasse die aan elkaar zijn gekoppeld om een doelsysteem te configureren.
De structuur moet zijn
resource:{‘module’: attribute => value }
Als we bijvoorbeeld mongodb installeren, kunnen we een manifestbestand hebben met de naam Mongodb.pp met de volgende inhoud:
package {‘mongodb’: ensure => installed }
-
Modules
Dit is de belangrijkste bouwsteen van Puppet, in feite een verzameling bronnen, sjablonen en bestanden. Ze kunnen in elk besturingssysteem worden gedistribueerd en kunnen daarom meerdere keren worden gebruikt met dezelfde configuratie.
-
Sjablonen
Sjablonen worden gebruikt om aangepaste inhoud en variabele invoer te definiëren. Ze gebruiken de Ruby-syntaxis, d.w.z. als u een poort wilt definiëren om naar te luisteren:
Listen <% [email protected]_number %>
De variabele Port_number wordt in dit geval gedefinieerd in het manifest dat naar deze sjabloon verwijst.
-
Statische bestanden
Dit zijn algemene bestanden die nodig kunnen zijn om specifieke taken uit te voeren. Ze bevinden zich in de bestandenmap van een willekeurige module.
Installatie poppen
Om te leren, gaan we marionet installeren en configureren in een virtuele machine die we in onze lokale machine zullen maken. Allereerst moet je virtualbox en vagrant installeren. Open na de installatie een nieuwe terminal en maak een Puppet-directory aan, waarschijnlijk op uw bureaublad, en voer het commando $ vagrant init uit. Hiermee wordt een virtuele machine gemaakt en wordt deze zwerver genoemd. Dan kunnen we inloggen op deze machine met het commando $ vagrant ssh.
Als u een scherm krijgt zoals hieronder, dan is uw machine in gebruik.
Als u zich op een servercomputer bevindt, kunt u deze stap negeren en doorgaan met het toevoegen van het poppenpakket zoals hieronder.
Voeg het poppenpakket toe met het commando
$ wget https://apt.puppetlabs.com/puppet5-release-xenial.deb
En dan het pakket uitpakken en installeren met
$ sudo dpkg -i puppet5-release-xenial.deb
We moeten onze repositories bijwerken zodat we
$ sudo apt-get update
Installeer de puppet-agent door
. uit te voeren$ sudo apt-get install puppet-agent
Nadat de installatie is voltooid, kunnen we dit bevestigen door de versie te controleren. Mogelijk moet u zich afmelden bij uw virtuele machine om het Puppet-pad aan de omgeving toe te voegen en vervolgens $ puppet --version uit te voeren of, als u niet bent uitgelogd, $ /opt/puppetlabs/bin/puppet --version uit te voeren. Als u een versienummer zoals 5.5.14 krijgt, is de installatie gelukt.
Nadat we MongoDB hebben geïnstalleerd met behulp van de Mongodb.pp die we hierboven hebben gemaakt, kunnen we eenvoudig een taak schrijven om een databaseproduct in te stellen en ook een gebruiker aan deze database toevoegen.
'Mongodb_database' wordt gebruikt om databases aan te maken en te beheren binnen MongoDB
mongodb_database{‘products’:
ensure => present,
tries => 10
}
'Mongodb_user kan worden gebruikt om gebruikers aan te maken en te beheren binnen een MongoDB-database.'
Een gebruiker toevoegen aan de database 'producten'
mongodb_user {userprod:
username => ‘prodUser’,
ensure => present,
password_hash => mongodb_password(‘prodUser’, ‘passProdser’),
database => prodUser,
roles => [‘readWrite’, ‘dbAdmin’],
tries => 10
}
Conclusie
In deze blog hebben we geleerd wat Puppet is, de voordelen die eraan verbonden zijn en de werkarchitectuur. Puppet is iets complexer dan de andere beheertools (zoals Chef en Ansible), maar het heeft veel modules die kunnen worden gebruikt om problemen rond databasebeheer op te lossen. In het volgende deel gaan we bespreken hoe externe machines kunnen worden aangesloten, zodat ze opnieuw kunnen worden geconfigureerd met behulp van de gedefinieerde manifestbestanden.