Replica Sets mit mongodb Einführung

Replica Sets

Die Ausfallsicherheit kann man bei mongodb mit Replica Sets erhöhen. Dabei kann man mehrere Knoten erstellen und die Daten auf diese zuverteilen. Mongodb unterscheidet zwei Arten von Knoten: Den Primary und die Secondaries.

Der Primary

Knoten auch der Masterknoten genannt. Besitzt lese und schreibrechte. Diese repliziert die Daten auf die Secondaries Konten.

Die Secondaries

besitzen standardgemäß keine lese und schreibrechte. Beim Ausfall des Primary Knoten wird einer der Secondaries zum neuem Masterknoten gewählt.

Damit können wir eine höhere Ausfallsicherheit garantieren.

Replica Set anlegen

Wir erstellen im /data Verzeichnis (wo auch mongodb Datenbank gespeichert wird!) drei neue Ordner.

Im Terminal eingeben:

mkdir /data/rHost1
mkdir /data/rHost2
mkdir /data/rHost3

Tipp: immer eine ungerade Anzahl an Sets anlegen, da sonst bei Neuwahl eines Masterknoten zur einer Verzögerung kommen kann.

mit mongod Replica Sets erstellen Diesen Befehl im Terminal ausführen: mongod --replSet name --dbpath /path/ --port 8001

Optional: --httpinterface --rest --oplogSize 50

mongod --replSet rHost --dbpath /data/rHost1 --port 8001 --httpinterface --rest --oplogSize 50
mongod --replSet rHost --dbpath /data/rHost2 --port 8002 --httpinterface --rest --oplogSize 50
mongod --replSet rHost --dbpath /data/rHost3 --port 8003 --httpinterface --rest --oplogSize 50

Danach verbinden wir uns mit irgendeinen mongo Server: mongo --port 8003. Mit rs.initiate() können wir unsere Replica Set initialisieren.

mongo --port 8003
rs.initiate()

Als Ausgabe bekommen wir ein Objekt

{
    "info2" : "no configuration explicitly specified -- making one",
    "me" : "localhost:8001",
    "ok" : 1
}

Mongodb hat jetzt den localhost:8001 als den Masterknoten ausgewählt. Jetzt müssen wir nur noch unsere Secondaries zuweisen. Das sind 8002 und 8003

rs.add("localhost:8002")
rs.add("localhost:8003")

Mit rs.config() können wir unsere Replica Sets unter die Lupe nehmen oder mit HTTP Interface: http://localhost:9001

Mit node.js Treiber verbinden

mongodb Treiber für node.js installieren: npm install mongodb Mit mongodb Replica Set verbinden.

var url = 'mongodb://localhost:8001,localhost:8002,localhost:8003/databasename?replicaSet=rHost';
 
MongoClient.connect(url, function(err, db) {
 
    var database = db;
 
});

Begriffserklärung

Wenn man rs.conf() ausführt wird ein Objekt zurückgeben mit einigen Eigenschaften. Kurze Erklärung dazu:

arbiterOnly

Zeigt an ob es sich um einen Arbiter Knoten handelt. Ein Arbiter ist ein einfacher mongodb Prozess der nur bei der Neuwahl eines Masterknoten seine Stimme abgibt.

hidden

Erwartet einen boolean. Wenn true wird dieser Knoten versteckt.

priority

Erwartet einen Wert von 0 bis 100 Je höher desto wahrscheinlicher, dass dieser Host bei einer Neuwahl zum Masterknoten gewählt wird.

slaveDelay

Erwartet ein Integer. Zeigt die Verzögerung in Sekunden an bevor ein Datensatz von Primary repliziert wird.

votes

Erwartet eine 1 oder eine 0. Wenn 0 besitzt dieser Knoten bei der Neuwahl kein Stimmrecht ansonsten hat jeder Knoten eine Stimme.

Config ändern

So kannst du die Config ändern:

#rs.config in eine zwischen variable speichern
cfg = rs.conf();
#gewünschten Eintrag ändern
cfg.members[1].priority = 2;
#config neu initialisieren mit reconfig
rs.reconfig(cfg);
Zurück