MongoDB: Replica Set (HA)
Wie Sie ein hochverfügbares Replica Set konfigurieren
Ein Replica Set ist eine Gruppe von MongoDB-Knoten, die zusammenarbeiten, um hohe Verfügbarkeit und verbesserte Performance zu gewährleisten, indem sie Daten über mehrere Server hinweg duplizieren. Mit einem Replica Set bleibt Ihre Datenbank auch dann erreichbar, wenn einer der Knoten ausfällt, und Sie können mehr Anfragen verarbeiten, indem Sie die Last verteilen.
Beispiel eines Replica Sets mit 3 Knoten
In einer Hochverfügbarkeitsumgebung sind Ihre Daten weiterhin über die verbleibenden Knoten verfügbar, falls ein Knoten offline geht. Die Performance wird ebenfalls gesteigert, da alle Schreiboperationen auf den Primary-Knoten gehen, während Leseoperationen auf die Secondary-Knoten verteilt werden können.
Wenn Sie neu im Umgang mit Replica Sets sind, empfiehlt sich ein Blick in die offizielle MongoDB-Dokumentation für weiterführende Informationen.
Funktionsweise von Replica Sets
Um ein Replica Set einzurichten, benötigen Sie mindestens drei MongoDB-Knoten:
- Ein Knoten übernimmt die Rolle des Primary und verarbeitet alle Schreiboperationen sowie standardmäßig auch die Leseoperationen.
- Die anderen Knoten sind Secondaries. Sie replizieren kontinuierlich nahezu in Echtzeit die Daten vom Primary.
Wenn ein Secondary-Knoten nicht verfügbar ist, läuft Ihre Anwendung weiterhin normal. Sobald der Secondary dem Cluster wieder beitritt, synchronisiert er die verpassten Daten und gleicht sich mit dem Rest des Replica Sets ab.
Fällt der Primary-Knoten aus, löst das Replica Set automatisch eine Wahl aus, um einen neuen Primary zu bestimmen. Dieser Vorgang dauert in der Regel etwa 10 Sekunden. Während dieser Zeit ist das Replica Set schreibgeschützt. Sobald ein neuer Primary gewählt wurde, werden alle Operationen wie gewohnt fortgesetzt.
Beispiel einer Wahl
Einstieg in ein MongoDB Replica Set
Um ein Replica Set auf Stackhero zu erstellen, benötigen Sie mindestens drei MongoDB-Instanzen. Hier eine Schritt-für-Schritt-Anleitung:
- Starten Sie Ihre drei (oder mehr) MongoDB-Instanzen über das Stackhero-Dashboard.
- Nachdem Ihre Instanzen laufen, passen Sie deren Konfiguration im Dashboard an:
- Legen Sie auf allen Instanzen dasselbe Admin-Passwort fest.
- Aktivieren Sie die Option Replica Set aktivieren.
- Wählen Sie einen Replica-Namen und einen Secret Key, den alle Knoten gemeinsam nutzen. (Beachten Sie: Der Replica-Name kann nach der Erstellung nicht mehr geändert werden. Falls Sie unsicher sind, ist
rs-1ein guter Standardwert.)
Denken Sie daran, dass ALLE Ihre Instanzen identisch konfiguriert sein müssen (Admin-Passwort, Replica Set Name und Replica Secret Key).
Nachdem Sie die Konfiguration gespeichert haben, müssen Sie alle Mitglieder Ihres Replica Sets innerhalb von MongoDB definieren. So gehen Sie vor:
- Sie können sich mit folgendem Befehl über das Mongo CLI verbinden:
mongo --quiet mongodb://admin@<XXXXXX>.stackhero-network.com/?tls=true
Falls Sie das Mongo CLI nicht installiert haben, können Sie das offizielle Docker-Image mit folgendem Befehl nutzen:
> docker run -it mongo /bin/bash
Dieser Befehl öffnet eine Shell, in der Sie Mongo-Befehle direkt ausführen können.
- Nach dem Verbinden können Sie Ihr Replica Set mit folgendem Befehl initialisieren. Ersetzen Sie dabei das
_iddurch Ihren gewählten Replica Set Namen und passen Sie die Hostnamen der Mitglieder entsprechend an:
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" }
]
})
Wenn der Befehl erfolgreich ist, erhalten Sie eine Antwort wie { "ok" : 1 }.
- Wenn Sie die Konfiguration Ihres Replica Sets überprüfen möchten, können Sie folgenden Befehl ausführen:
rs.conf()
Sie müssen diese Konfiguration nur auf einem Knoten anwenden. Die anderen Knoten werden automatisch aktualisiert.
Ihr MongoDB Replica Set sollte jetzt einsatzbereit sein.
Status Ihres MongoDB Replica Sets prüfen
Um Sie bei der Überwachung des Status Ihres Replica Sets zu unterstützen, haben wir ein Node.js-Skript entwickelt, das den Status jede Sekunde prüft. Sie finden dieses Skript in unserem GitHub-Repository.
Screenshot des Skripts
Fehlerbehebung
Umgang mit dem Fehler: "network error while attempting to run command 'isMaster' on host"
Wenn Sie diesen Fehler sehen, liegt das in der Regel daran, dass die TLS-Verschlüsselung nicht aktiviert wurde. Sie können das Problem beheben, indem Sie das Flag tls=true zu Ihrer Verbindungs-URL hinzufügen. Zum Beispiel:
mongodb://admin:PASSWORD@<XXXXXX>.stackhero-network.com:27017/admin?tls=true