sql >> Databasteknik >  >> NoSQL >> MongoDB

Grunderna för att distribuera en MongoDB Replica Set och Shards med Puppet

Databassystem presterar bäst när de är integrerade med några väldefinierade metoder som underlättar både läs- och skrivgenomströmningsoperationer. MongoDB gick den extra milen genom att omfamna replikering och skärning med syftet att möjliggöra horisontell och vertikal skalning i motsats till relationella DBM vars samma koncept bara förbättrar vertikal skalning.

 Sharding säkerställer fördelning av belastningen mellan medlemmarna i databasklustret så att läsoperationerna utförs med liten latens. Utan skärning kan kapaciteten hos en enskild databasserver med en stor uppsättning data och operationer med hög genomströmning utmanas tekniskt och kan leda till att den servern misslyckas om de nödvändiga åtgärderna inte beaktas. Till exempel, om frekvensen av frågor är mycket hög, kommer serverns CPU-kapacitet att överväldigas.

replikering å andra sidan är ett koncept där olika databasservrar innehåller samma data. Det säkerställer hög tillgänglighet för data förutom att förbättra dataintegriteten. Ta ett exempel på en högpresterande applikation för sociala medier, om det huvudsakliga betjäningsdatabassystemet misslyckas som vid ett strömavbrott, borde vi ha ett annat system för att betjäna samma data. En bra replikuppsättning bör ha fler än 3 medlemmar, en arbiter och optimal choiceTimeoutMillis. Vid replikering kommer vi att ha en master/primär nod där alla skrivoperationer görs och sedan appliceras på en Oplog. Från Oploggen appliceras sedan alla gjorda ändringar på de andra medlemmarna, som i detta fall kallas sekundära noder eller slavar. Om de primära noderna inte kommunicerar efter en tid:choiceTimeoutMillis, signaleras de andra noderna att gå till val. ElectionTimeoutMillis bör inte ställas in för högt eller för lågt på grund av att systemen kommer att vara nere under en lång tid och därmed förlora mycket data eller frekventa val som kan resultera även med tillfällig nätverkslatens, alltså datainkonsekvens. En skiljedomare används för att lägga till en röst till en vinnande medlem för att bli en mästare i fall det blir oavgjort men inte bär någon data som de andra medlemmarna.

Varför använda Puppet för att distribuera en MongoDB Replica Set

Oftare används sharding hand i hand med replikering. Processen att konfigurera och underhålla en replikuppsättning är inte lätt på grund av:

  1. Höga risker för mänskliga misstag
  2. Oförmåga att utföra repetitiva uppgifter automatiskt
  3. Tidskrävande särskilt när ett stort antal medlemmar är inblandade
  4. Möjlighet till missnöje i arbetet
  5. Överväldigande komplexitet som kan dyka upp.

För att övervinna de skisserade motgångarna nöjer vi oss med ett automatiserat system som Puppet som har massor av resurser för att hjälpa oss att arbeta med lätthet.

I vår tidigare blogg lärde vi oss processen att installera och konfigurera MongoDB med Puppet. Det är dock viktigt att förstå Puppets grundläggande resurser eftersom vi kommer att använda dem för att konfigurera vår replikuppsättning och skärvor. Om du missade det är detta manifestfilen för processen att installera och köra din MongoDB på den maskin du skapade

​  package {'mongodb':

    ensure => 'installed',

  }

  service {'mongodb':

    ensure => 'running',

    enable => true

  }

Så vi kan lägga innehållet ovan i en fil som heter runMongoDB.pp och köra den med kommandot 

$ sudo apply runMongoDB.pp

Sjunga "mongodb"-modulen och funktionerna, vi kan ställa in vår replikuppsättning med motsvarande parametrar för varje mongodb-resurs.

MongoDB-anslutning

Vi måste upprätta en mongodb-anslutning mellan en nod och mongodb-servern. Huvudsyftet med detta är att förhindra att konfigurationsändringar tillämpas om mongodb-servern inte kan nås men potentiellt kan användas för andra ändamål som databasövervakning. Vi använder mongodb_conn_validator

mongodb_conn_validator{‘mongodb_validator’:

ensure => present,

     server: ‘127.0.0.1:27017’,

     timeout: 40,

     tcp_port:27017

    }

namn: i det här fallet definierar namnet mongodb_validator resursens identitet. Det kan också betraktas som en anslutningssträng

server:detta kan vara en sträng eller en array av strängar som innehåller DNS-namn/IP-adresser för servern där mongodb ska köras.

timeout:detta är det maximala antalet sekunder som valideraren bör vänta innan han bestämmer sig för att puppetdb inte körs.

tcp_port:  detta är en leverantör för resursen som validerar mongodb-anslutningen genom att försöka https-anslutningen till mongodb-servern. Puppet SSL-certifikatinställningen från den lokala dockmiljön används i autentiseringen.

Skapa databasen

mongodb_database{‘databaseName’:

ensure => present,

     tries => 10

}

Denna funktion tar tre parametrar, det vill säga:

namn: i det här fallet definierar namnet databaseName namnet på databasen vi skapar, som också skulle ha deklarerats som namn => 'databaseName'.

försök:detta definierar det maximala antalet två sekunders försök att vänta på MongoDB-start

Skapa MongoDB-användare

Modulen mongodb_user gör det möjligt för en att skapa och hantera användare för en given databas i dockmodulen.

mongodb_user {userprod:

  username => ‘prodUser’,

  ensure => present,

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

  database => prodUser,

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

  tries  => 10

}

Egenskaper

användarnamn:definierar användarens namn.

password_hash:detta är användarens lösenordshash. Funktionen mongodb_password() tillgänglig på MongoDB 3.0 och senare används för att skapa hashen.

roller:detta definierar de roller som användaren får utföra på måldatabasen.

lösenord:detta är den vanliga användarlösenordstexten.

databas:definierar användarens måldatabas.

Skapa en replikuppsättning

Vi använder modulen mongodb_replset för att skapa en replikuppsättning.

Mongodb_replset{'replicaset1':

   arbiter: 'host0:27017',

   ensure  => present,

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

   initialize_host: host1:27017

}

namn:definierar namnet på replikuppsättningen.

medlemmar:en rad medlemmar som replikuppsättningen kommer att innehålla.

initialize_host:värd som ska användas vid initiering av replikuppsättningen

arbiter:definierar replikuppsättningsmedlemmen som kommer att användas som en arbiter.

Skapa en MongoDB Shard

mongodb_shard{'shard1':

   ensure  => present,

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

   keys: 'price'

}

namn:definierar namnet på skärvan.

medlemmar:detta är den grupp av medlemmar som skärvan kommer att hålla.

nycklar:definiera nyckeln som ska användas i skärningen eller en uppsättning nycklar som kan användas för att skapa en sammansatt skärvnyckel.


  1. Hur man formaterar tal i SQL

  2. Hur kan jag byta namn på ett fält för alla dokument i MongoDB?

  3. Komma igång med CouchDB

  4. Ubuntu 16.04 systemd återupprättar problem med ulimit