Gibt es eine Option für den Lastausgleich mit Mongodb-Replikatsätzen? Ich frage nicht nach einem HAProxy oder ähnlichem, sondern nach einer eingebauten Funktion von Mongodb. Tipps dazu konnten in den Dokumenten nicht gefunden werden.
Wenn Sie Sharding verwenden, ist der "Load Balancer" der Mongos-Prozess - eigentlich ähnelt er eher einem Router - er speichert eine speicherinterne Kopie der Konfigurationsdatenbank und kann Entscheidungen basierend auf dem Shard-Schlüssel treffen.
Wenn Sie einen Lastausgleich über identische Replikatsätze oder über die Mitglieder des Satzes meinen, gibt es eine Funktionsanforderung, dass Mongos auch dieses Szenario behandeln ( https://jira.mongodb.org/browse/SERVER-1594 ), jedoch angegeben Wie die Treiber funktionieren, ist nicht wirklich notwendig (dies würde die Treiber jedoch weniger komplex machen).
In einem einzelnen Replikatsatz können Sie keine Schreibvorgänge verteilen. Alle Schreibvorgänge müssen an den primären gesendet werden. Sie können bereits lesen die Sekundär verteilen, über Read - Einstellungen , wie Sie für angemessen halten. Der Fahrer verfolgt, was eine primäre und was eine sekundäre ist, und leitet Abfragen entsprechend weiter.
Der 'Lastausgleich' wird durch Sharding erreicht. Durch das Sharding verteilen Sie tatsächlich Schreibvorgänge / Aktualisierungen auf einzelne Shards. Es gibt keinen speziellen Algorithmus, der dies tut, da Sie mit Mongo die Daten basierend auf den gewünschten Tastenkombinationen partitionieren können. Die besten Partitionsalgorithmen sind diejenigen, die eine Verbindung aus sequentiellen Einträgen und einem zufälligen haben.
Beispielsweise kann eine Benutzer-ID wie folgt partitioniert werden
xx-sha1(user email)
xx = time sequence
Beachten Sie, dass Sie zum Implementieren von Sharding drei Konfigurationsserver und die Datenknoten benötigen. Die Datenknoten können aus Redundanzgründen in Replikatsätze gruppiert und (nur wenn möglich) zum Lesen von Daten aus Sekundärdateien verwendet werden. Ich sage nur, wenn Sie Daten lesen können, da die Replikation asynchron erfolgt, so dass keine Garantie dafür besteht, dass die neuen Daten zum Abfragezeitpunkt auf den Secondaries verfügbar sind.
Beachten Sie, dass der Partitionsalgorithmus ganz bei Ihnen liegt und Ihren Anwendungsanforderungen entsprechen sollte. Sie sollten auch überlegen, ob Sie die Daten nur schreiben und nur gelegentlich lesen möchten oder ob Sie sie direkt nach dem Schreiben lesen müssen.