sql >> Database >  >> NoSQL >> MongoDB

De basisprincipes van het implementeren van een MongoDB-replicaset en scherven met behulp van Puppet

Databasesysteem presteert het beste als het is geïntegreerd met een aantal goed gedefinieerde benaderingen die zowel de lees- als de schrijfdoorvoer vereenvoudigen. MongoDB ging een stap verder door replicatie en sharding te omarmen met als doel horizontale en verticale schaling mogelijk te maken in tegenstelling tot relationele DBM's waarvan hetzelfde concept alleen verticale schaling verbetert.

 Sharding zorgt voor verdeling van de belasting over de leden van het databasecluster, zodat de leesbewerkingen met weinig vertraging worden uitgevoerd. Zonder sharding kan de capaciteit van een enkele databaseserver met een grote set gegevens en bewerkingen met een hoge doorvoer technisch worden uitgedaagd en kan deze server uitvallen als er geen rekening wordt gehouden met de noodzakelijke maatregelen. Als het aantal zoekopdrachten bijvoorbeeld erg hoog is, zal de CPU-capaciteit van de server worden overbelast.

Replicatie daarentegen is een concept waarbij verschillende databaseservers dezelfde gegevens bevatten. Het zorgt voor een hoge beschikbaarheid van gegevens en verbetert niet alleen de gegevensintegriteit. Neem een ​​voorbeeld van een goed presterende sociale-mediatoepassing, als het belangrijkste databasesysteem faalt, zoals in het geval van een stroomstoring, zouden we een ander systeem moeten hebben om dezelfde gegevens te verstrekken. Een goede replicaset moet meer dan 3 leden hebben, een arbiter en optimale verkiezingTimeoutMillis. Bij replicatie hebben we een master/primair knooppunt waar alle schrijfbewerkingen worden uitgevoerd en vervolgens worden toegepast op een Oplog. Vanuit de Oplog worden alle aangebrachte wijzigingen vervolgens toegepast op de andere leden, die in dit geval secundaire knooppunten of slaves worden genoemd. In het geval dat de primaire nodes na enige tijd niet communiceren:electionTimeoutMillis, worden de andere nodes gesignaleerd om voor een verkiezing te gaan. De electorTimeoutMillis moet niet te hoog of te laag worden ingesteld, omdat de systemen voor een lange tijd niet beschikbaar zijn en daarom veel gegevens of frequente verkiezingen verliezen, zelfs met tijdelijke netwerklatentie en dus inconsistentie van gegevens. Een arbiter wordt gebruikt om een ​​stem toe te voegen aan een winnend lid om een ​​meester te worden in het geval dat er een gelijkspel is, maar het bevat geen gegevens zoals de andere leden.

Waarom Puppet gebruiken om een ​​MongoDB-replicaset te implementeren

Sharding wordt vaker gebruikt in combinatie met replicatie. Het configureren en onderhouden van een replicaset is niet eenvoudig vanwege:

  1. Hoge kans op menselijke fouten
  2. Onvermogen om repetitieve taken automatisch uit te voeren
  3. Tijdrovend, vooral als er een groot aantal leden bij betrokken is
  4. Mogelijkheid van werkontevredenheid
  5. Overweldigende complexiteit die kan ontstaan.

Om de geschetste tegenslagen te overwinnen, nemen we genoegen met een geautomatiseerd systeem zoals Puppet dat over voldoende middelen beschikt om ons te helpen met gemak te werken.

In onze vorige blog hebben we het proces van het installeren en configureren van MongoDB met Puppet geleerd. Het is echter belangrijk om de basisbronnen van Puppet te begrijpen, aangezien we deze zullen gebruiken bij het configureren van onze replicaset en shards. Voor het geval je het gemist hebt, dit is het manifestbestand voor het proces van het installeren en uitvoeren van je MongoDB op de computer die je hebt gemaakt

​  package {'mongodb':

    ensure => 'installed',

  }

  service {'mongodb':

    ensure => 'running',

    enable => true

  }

We kunnen de bovenstaande inhoud dus in een bestand met de naam runMongoDB.pp plaatsen en uitvoeren met de opdracht 

$ sudo apply runMongoDB.pp

Zing de 'mongodb'-module en functies, we kunnen onze replicaset instellen met de bijbehorende parameters voor elke Mongodb-resource.

MongoDB-verbinding

We moeten een mongodb-verbinding tot stand brengen tussen een node en de mongodb-server. Het belangrijkste doel hiervan is om te voorkomen dat configuratiewijzigingen worden toegepast als de mongodb-server niet kan worden bereikt, maar mogelijk voor andere doeleinden kan worden gebruikt, zoals databasebewaking. We gebruiken de mongodb_conn_validator

mongodb_conn_validator{‘mongodb_validator’:

ensure => present,

     server: ‘127.0.0.1:27017’,

     timeout: 40,

     tcp_port:27017

    }

name:  in dit geval definieert de naam mongodb_validator de identiteit van de bron. Het kan ook worden beschouwd als een verbindingsreeks

server:dit kan een string zijn of een array van strings met DNS-namen/IP-adressen van de server waarop mongodb zou moeten draaien.

time-out:dit is het maximale aantal seconden dat de validator moet wachten voordat hij besluit dat de puppetdb niet actief is.

tcp_port:  dit is een provider voor de bron die de mongodb-verbinding valideert door de https-verbinding met de mongodb-server te proberen. De marionetten SSL-certificaatconfiguratie van de lokale marionettenomgeving wordt gebruikt bij de authenticatie.

De database maken

mongodb_database{‘databaseName’:

ensure => present,

     tries => 10

}

Deze functie heeft 3 parameters nodig, namelijk:

name:  in dit geval definieert de naam databaseName de naam van de database die we maken, die ook zou zijn gedeclareerd als name => 'databaseName'.

probeert:dit definieert de maximale hoeveelheid van twee seconden die wordt geprobeerd om MongoDB opstarten te wachten

MongoDB-gebruiker maken

Met de module mongodb_user kan men gebruikers maken en beheren voor een bepaalde database in de poppenmodule.

mongodb_user {userprod:

  username => ‘prodUser’,

  ensure => present,

  password_hash => mongodb_password(‘prodUser’, ‘passProdser’),

  database => prodUser,

  roles => [‘readWrite’, ‘dbAdmin’],

  tries  => 10

}

Eigenschappen

gebruikersnaam:definieert de naam van de gebruiker.

password_hash:dit is de wachtwoord-hash van de gebruiker. De functie mongodb_password() die beschikbaar is op MongoDB 3.0 en later wordt gebruikt voor het maken van de hash.

rollen:dit definieert de rollen die de gebruiker mag uitvoeren op de doeldatabase.

wachtwoord:dit is de gewone gebruikerswachtwoordtekst.

database:definieert de doeldatabase van de gebruiker.

Een replicaset maken

We gebruiken de module mongodb_replset om een ​​replicaset te maken.

Mongodb_replset{'replicaset1':

   arbiter: 'host0:27017',

   ensure  => present,

   members => ['host0:27017','host1:27017', 'host2:27017', 'host3:27017'] 

   initialize_host: host1:27017

}

naam:definieert de naam van de replicaset.

leden:een reeks leden die de replicaset kan bevatten.

initialize_host:host die moet worden gebruikt bij initialisatie van de replicaset

arbiter:definieert het lid van de replicaset dat als arbiter zal worden gebruikt.

Een MongoDB Shard maken

mongodb_shard{'shard1':

   ensure  => present,

   members => ['shard1/host1:27017', 'shard1/host2:27017', 'shard1/host3:27017'] 

   keys: 'price'

}

naam:definieert de naam van de scherf.

leden:dit is de reeks leden die de scherf zal bevatten.

sleutels:definieer de sleutel die moet worden gebruikt in de sharding of een reeks sleutels die kan worden gebruikt om een ​​samengestelde shardsleutel te maken.


  1. Mongodb Binary _id converteren naar LUUID met node

  2. Mongodb Aggregation Framework:gebruikt $group index?

  3. Serieel herhalen over een mongodb-cursor (wachten op callbacks voordat u naar het volgende document gaat)

  4. Vind alle dubbele documenten in een MongoDB-verzameling op een sleutelveld