MongoDB: Replica set (HA)

Hoe configureert u een high availability replica set

Een replica set is een groep MongoDB-nodes die samenwerken om hoge beschikbaarheid en betere prestaties te bieden door data te dupliceren over meerdere servers. Met een replica set blijft uw database toegankelijk, zelfs als één van de nodes uitvalt, en kunt u meer verzoeken verwerken door de werklast te verdelen.

Voorbeeld van een replica set met 3 nodesVoorbeeld van een replica set met 3 nodes

In een high availability-opstelling blijft uw data beschikbaar via de andere nodes als één node offline gaat. De prestaties verbeteren ook, omdat alle schrijfoperaties naar de primaire node gaan, terwijl leesoperaties over de secundaire nodes verdeeld kunnen worden.

Als u nieuw bent met replica sets, kunt u de officiële MongoDB-documentatie raadplegen voor meer achtergrondinformatie.

Om een replica set op te zetten, heeft u minimaal drie MongoDB-nodes nodig:

  1. Eén node fungeert als primary en verwerkt alle schrijfoperaties en standaard ook de leesoperaties.
  2. De andere nodes zijn secondaries. Zij repliceren continu de data van de primary, vrijwel in real time.

Als een secondary node niet beschikbaar is, blijft uw applicatie normaal functioneren. Zodra de secondary weer bij de cluster komt, synchroniseert deze de gemiste data en werkt zich bij met de rest van de replica set.

Als de primary node uitvalt, start de replica set automatisch een verkiezing om een nieuwe primary te kiezen. Dit proces duurt meestal ongeveer 10 seconden. Gedurende deze periode is de replica set alleen-lezen. Zodra de nieuwe primary is gekozen, worden alle operaties hervat zoals gebruikelijk.

Voorbeeld van een verkiezingVoorbeeld van een verkiezing

Om een replica set op Stackhero te maken, heeft u minimaal drie MongoDB-instanties nodig. Volg hiervoor deze stappen:

  1. Start uw drie (of meer) MongoDB-instanties vanuit het Stackhero-dashboard.
  2. Nadat uw instanties actief zijn, werkt u hun configuratie bij in het dashboard:
    1. Stel op elke instantie hetzelfde admin-wachtwoord in.
    2. Schakel de optie Replica set activeren in.
    3. Kies een replica naam en een geheime sleutel die door alle nodes gedeeld wordt. (Let op: De replica naam kan na aanmaak niet meer gewijzigd worden. Als u twijfelt, is rs-1 een goede standaardwaarde.)

Houd er rekening mee dat AL uw instanties identieke configuraties moeten hebben (admin-wachtwoord, replica set naam en replica geheime sleutel).

Zodra uw configuratie is opgeslagen, moet u alle leden van uw replica set binnen MongoDB definiëren. Dit doet u als volgt:

  1. U kunt deze opdracht gebruiken om verbinding te maken met de Mongo CLI:
mongo --quiet mongodb://admin@<XXXXXX>.stackhero-network.com/?tls=true

Als u de Mongo CLI niet geïnstalleerd heeft, kunt u het officiële Docker-image gebruiken met deze opdracht:

> docker run -it mongo /bin/bash

Deze opdracht opent een shell waarin u direct Mongo-commando's kunt uitvoeren.

  1. Nadat u verbonden bent, kunt u uw replica set initialiseren met het volgende commando. Vervang _id door uw gekozen replica set naam en pas de hostnamen van de leden aan waar nodig:
rs.initiate({
   _id: "rs-1",
   members: [
      { _id: 0, host: "<XXXXXX>.stackhero-network.com:27017" },
      { _id: 1, host: "<XXXXXX>.stackhero-network.com:27017" },
      { _id: 2, host: "<XXXXXX>.stackhero-network.com:27017" }
   ]
})

Als het commando succesvol is, ziet u een antwoord zoals { "ok" : 1 }.

  1. Als u de configuratie van uw replica set wilt bekijken, kunt u het volgende commando uitvoeren:
rs.conf()

U hoeft deze configuratie slechts op één node toe te passen. De andere nodes worden automatisch bijgewerkt.

Uw MongoDB replica set zou nu operationeel moeten zijn.

Om u te helpen de status van uw replica set te monitoren, hebben wij een Node.js-script ontwikkeld dat elke seconde de status controleert. U vindt dit script in onze GitHub repository.

Screenshot van het scriptScreenshot van het script

Als u deze foutmelding ziet, komt dat meestal doordat TLS-encryptie niet is ingeschakeld. U kunt dit oplossen door de tls=true-parameter toe te voegen aan uw connectie-URL. Bijvoorbeeld:

mongodb://admin:PASSWORD@<XXXXXX>.stackhero-network.com:27017/admin?tls=true