MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie initialisiert man das Mongodb-Replikationsset, ohne rs.initiate() aufzurufen?

Kurze Antwort / tl;dr

Nein.

Etwas längere Antwort

Nein, weil es sinnvoll ist, die Shell zu verwenden.

Antwort

Wenn Sie einen Replikatsatz einrichten, haben Sie normalerweise mehr als ein Mitglied. Bis der Replikatsatz initialisiert ist, enthält keines der Mitglieder die erforderliche Konfiguration. Der Knoten, auf dem Sie den Replikatsatz initialisieren, wird primär und speichert die Konfiguration. Jetzt fügen Sie Mitglieder entweder mit der rs.add hinzu Befehl oder mithilfe von rs.reconfig . Was dann passiert, ist, dass der Primäre das hinzugefügte Mitglied kontaktiert, die Konfiguration synchronisiert wird und einige andere Dinge. Es ist eine bewährte Vorgehensweise, dass die Mitglieder des normalen Replikatsatzes gleich sein sollten, damit bei einem Ausfall eines Knotens kein Nachteil entsteht, dass ein anderer Knoten primär wird, und der neue primäre Knoten primär bleiben kann, bis er aus irgendeinem Grund oder aus dem anderen selbst ausfällt.

Wenn Sie also ein Replikat-Set-Mitglied starten würden, woher sollte es seine Konfiguration bekommen? Entscheiden Sie selbst, was es zu tun hat? Das würde in einem Cluster nicht gut funktionieren. Wie sollte es die anderen Mitglieder und ihre Konfiguration entdecken? Denken Sie daran, dass sich Mitglieder des Replikatsatzes in verschiedenen Rechenzentren befinden können. Und wenn es einen --IamPrimaryDoAsISay gab Option, was würde passieren, wenn es derzeit eine andere Primärdatenbank im Cluster gäbe? Und wie sollte mit einer Situation umgegangen werden, in der mehr als ein Mitglied mit dieser Option gestartet wurde? Ein Stepdown des anderen Servers? Vielleicht nur weil du einen Kühler getauscht hast? Oder sollte die gerade gestartete Instanz nichts tun, wenn es bereits eine primäre gab? Welchen Sinn hätte die Option dann überhaupt?

Und all diese Komplikationen nur, um einen einzigen Befehl von der Shell zu verhindern?

Hinweis:Wenn Sie einen einzelnen Server möchten, starten Sie einfach eine eigenständige Instanz (ein Mongod ohne das --replSet Option).Wenn Sie die Möglichkeiten eines Replikatsets erkunden möchten, benötigen Sie mehr als ein Mitglied.