2012-11-13 10 views
6

Ich habe eine primäre und zwei sekundäre auf aws mit ELB. Was ist das beste Verfahren zum Lesen und Schreiben?MongoDB Replicate Sätze und ELB

1) Erstelle ich eine einzelne LB mit allen Knoten in der ELB mit der Primär-und Secondaries und lassen Sie die Python (Pymongo) mit dem Aussortieren zum Lesen und Schreiben tun?

2) Oder platzieren Sie alle Secondaries unter ELB und weisen Sie einer elastischen IP eine Primärseite zu? Dies erfordert ein Skript, um den Knotentyp zu verfolgen und neu zuzuordnen, falls ein Failover stattfindet.

Ich hoffe auf Option 1.

Dank

+1

Warum würden Sie überhaupt einen Load Balancer verwenden - normalerweise geben Sie einem Client die Liste aller Mitglieder des Sets und er wird herausfinden, welcher Status jedes Mitglied ist und direkte Anfragen entsprechend –

+0

Hallo Frederick, danke, dein prägnanter Kommentar oben leuchtete wirklich hell auf dies für mich - bitte können Sie schnell meine Antwort unten überprüfen, um sicherzustellen, dass es korrekt ist. – danday74

+0

@FrederickCheung Was ist mit einem Fall, in dem Sie die Mongo-Instanzen in einem privaten Netzwerk haben und Mongo verfügbar machen müssen, ohne die Instanzen über das Internet zugänglich zu machen? – Jonathan

Antwort

5

Es Ihrer Situation abhängt. Mit den mongodb-Treibern müssen Sie nicht nachverfolgen, mit welchem ​​Knoten der Client verbunden ist. Sie müssen lediglich über den Replikatsatz informieren, und es wird automatisch eine Verbindung zum primären Knoten herstellen und Failover durchführen.

Wenn Sie die Leseaufforderung verteilen möchten, können Sie die Lesevorgabe festlegen, damit eine Anwendung von Sekundärteilen lesen kann. Sie können jedoch nur auf die Primärdatenbank schreiben. Das bedeutet, dass das Setzen von ELB für alle eingehenden Verbindungen unnötig ist und Sie möglicherweise sogar verletzen könnte, da es dazu führen könnte, dass Schreibvorgänge an Sekundärteile gesendet werden (wo sie ausfallen). Wenn Sie Leseeinstellungen verwenden, können Sie Lesevorgänge verteilen. In Ihrem Fall würde ich daher empfehlen, den ELB nicht zu verwenden. Im Allgemeinen würde ich http://www.slideshare.net/jrosoff/mongodb-on-ec2-and-ebs betrachten. Vielleicht finden Sie es hilfreich.

+1

Also ... wenn ich drei Knoten in einem Rep-Set habe .... und ich verbinde mich mit Mongo ... welche IP-Adresse gebe ich? Vorausgesetzt, jemand kann unten sein. Sollte ich eine Elastip-IP an die aktuelle Primärseite anhängen und immer überwachen, wer in der Primärseite ist? – Tampa

1

Ich bin im selben Boot, aber ich laufe 3 Mongo-Instanzen in einem einzigen Replicaset, 2 Standard und 1 Arbiter. Das Einrichten eines ElasticIP ist eine schlechte Idee b/c, was bedeutet, dass dein Mongo Server eine öffentlich zugängliche Verbindung hat, was du nicht willst.

Ich beendete die Erstellung eines ELB, der auf 27017 hört und an beide Standard-Mitglieder des Replicaset weiterleitet, aber nicht für den tatsächlichen Lastausgleich, sondern für Fehlertoleranz. Wenn die 27017-Integritätsprüfung fehlschlägt, kann die Bereitschaftsdatenbank daher nachfolgende Anforderungen verarbeiten. Außerdem können Sie mit ELB einen DNS-CNAME-Datensatz erstellen und auf Ihre App verweisen, um sie zu verwenden. In meinem Fall verwende ich "docstore". Auf diese Weise müssen Sie keine tatsächlichen Mongo-Instanzen wie docstore-1 und docstore-2 usw. angeben.

+0

Bitte erläutern Sie dies, ich habe 3 Mongo-Instanzen in einem privaten Subnetz und muss sie zur Verfügung stellen und würde es am liebsten über einen einzigen IP/EL-C-Namen machen, ist das möglich? – Jonathan

0

Ich denke, die Antwort ist, dass Sie keinen Load Balancer verwenden. Ihr Client stellt Details zu allen Replikatgruppenmembern (primär und sekundär) bereit und stellt eine Verbindung mit der aktuellen Primärdatenbank her, je nachdem, welches Element dies ist.

Siehe How do you connect to a replicaset from a MongoDB shell?

mongo --host replicaSetName/host1[:porthost1],host2[:porthost1],host3[:porthost3] databaseToConnect 

Hier haben wir die Kommandozeilen-Client auf dem Replikat-Gruppe verbinden (nicht ein einzelner Knoten), aber es könnte NodeJS, MongoChef (Unterstützung Replikatsätzen) oder was auch immer Client sein du verbindest dich mit.