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);
Alexander Naumov
Contao Freelancer, PHP Entwickler und Web Allrounder