0

Wir haben mongodb Replikat mit 3 Instanzen gesetzt, wobei sich Primary im Datencenter D1 und sekundäre Knoten im Datencenter D2 befindet. Wir benötigen keine Failover-Option in unserem Setup und konfigurieren es wie unter https://docs.mongodb.com/manual/tutorial/configure-secondary-only-replica-set-member/ beschrieben.Lesen von sekundärem mongodb-Knoten, wenn keine Verbindung mit primärer

Eine Anwendung "A", die auf sekundären Knoten im selben Datencenter D2 ausgeführt wird, verwendet mongoose, und wir haben angegeben (mit den Optionen "nearest" oder "secondary"), die Daten von den sekundären Knoten zu lesen.

Wir stehen vor diesen Problemen:

1) Ist es möglich, „A“, um von einem bestimmten sekundären Knoten zu lesen, ohne in dem in den Verbindungskonfigurationen Angabe der Primär mongoDB Knoten ist?

2) Wie können wir die "A" -Anwendung weiterhin vom Sekundärknoten lesen lassen, wenn die Verbindung zwischen den Datencentern D1 und D2 unterbrochen ist, sodass der MongoDB Primärknoten nicht mehr erreichbar/sichtbar ist? Soweit ich es verstehe, funktioniert es nicht, weil selbst das "A" konfiguriert ist, um von einem sekundären zu lesen, das mongoDB muss noch eine Art Ping/Arbitraging zwischen primären und sekundären durchführen, bevor der eigentliche Lesevorgang ausgeführt werden kann.

3) Ist es möglich/empfohlen, eine Anwendung im Datacenter D2 zu haben, die Schreibvorgänge direkt von der mongodb Replica-Set Primären Instanz als Standalone-Instanz durchführt und nicht als Teil von Replica-Set?

Ausführungen: mongodb 3.2.9, mungo 4.5.9

Antwort

1
  1. Ja read preference with tags

  2. Mit Netzwerkpartition mit D1 und D2, wird primäre automatisch zu einem dieser Knoten D2 übertragen, das ist das, was gegen das Primäre "aktuell" ist. Mit "priority settings" können Sie diese Auswahl steuern. Solange 2 Knoten von 3 oben sind, wird einer von diesen 2 als primär gewählt.

wir uns vor, Sie haben drei Knoten:

  • D1.N0
  • D2.N1
  • D2.N2

Sie sollten die Knoten prioritise:

  • D1.N0.priority = 3
  • D2.N1.priority = 2
  • D2.N2.priority = 1

nun solange D1 erreichbar ist, dann ist D1.N0 primär. Wenn wir eine Netzwerkpartition zwischen D1 und D2 haben, wird D2.N1 primär und D2.N2 bleibt als sekundär. Wenn die Netzwerkpartition beendet ist, "holt" D1.N0 fehlende Daten durch Lesen von D2.N1 opLog und wird wieder primär und D2.N1 wird sekundär.

  1. Wenn Sie einen Replikatsatz haben, müssen Sie immer auf den Replikatsatz und NIEMALS direkt auf den einzelnen Knoten schreiben!
Verwandte Themen