Lese-Operationen-only:Wie verhindere ich, dass der MongoDB-Replikatsatz die Primärdatenbank abfragt?
ist es eine Möglichkeit, eine MongoDB Replikatssatz zu haben, aber die MongoDB-Instanz auf dem Feld zu treffen, die verbunden ist, die MongoDB zu sein, die abgefragt wird?
Ich habe drei EC2-Instanzen hinter einem AWS-Lastenausgleich.
auf jeder EC2-Instanz wird MongoDB ausgeführt, das Teil des Replikatsatzes ist.
Ich habe ausdrücklich Endpunkte auf NodeJS und ich die Replik verbinden gesetzt, wie
mongodb.MongoClient.connect('mongodb://1.1.1.1,2.2.2.2,3.3.3.3.',
function (err, db)
{
if (err)
{
complete('{}');
}
else
{
folge Ich möchte die Last der Anfragen in allen drei Instanzen meines MongoDB Replik statt gesetzt gleichmäßig verteilen von standardmäßig mit Alle Abfragen, die an die EC2-Instanz weitergeleitet werden, in der meine primäre MongoDB definiert ist, weil dadurch der Punkt meines Lastenausgleichsmoduls (der die Last der Abfragen gleichmäßig auf alle drei Instanzen verteilt) zerstört wird.
mein Verständnis ist, dass bei der Verbindung zu einem MongoDB-Replikat gesetzt, dass die primäre Instanz immer ausgewählt ist, wenn die primäre Instanz nicht aktiv ist, und daher der Zweck jeder sekundären Instanz dient nur als Backup dienen.
in meinem Beispiel würden einige Leute dies heiß, kalt, kalt nennen. weil es zwei Instanzen gibt, die niemals benutzt werden.
der Grund, dass ich möchte, dass die Abfrage Last gleichmäßig verteilt ist, so kann meine Einrichtung WARM, WARM, WARM sein.
In Zukunft, wenn die Anzahl der Benutzer steigt, um die Abfrageleistung optimal zu halten, kann ich weitere EC2-Instanzen hinter dem Load Balancer hinzufügen, um die Abfrageleistung zu verbessern.
und wenn die Daten so wachsen, dass eine einzelne Instanz zu langsam ist, um die Daten rechtzeitig zurück zu geben, würde ich jede Instanz in andere EC2-Instanzen zerlegen.
Hinweis: Ich möchte, dass der Quellcode jeder EC2-Instanz gleich ist. Ich benutze Git, und ich möchte einfach Quellcode zu jeder Instanz in meinem Replikat-Set pushen und ziehen.
Wenn ich readpreference = sekundäre verwenden, und es gibt zwei sekundäre (eine auf 2.2.2.2 und eine auf 3.3.3.3). Wissen wir, ob die mongoDB-Sekundärdatenbank, die verwendet wird, auf der Maschine liegt, auf die der Load-Balancer geroutet wurde? Wenn der AWS-Lastenausgleich beispielsweise zu Feld 3.3.3.3 routet, in dem der Endpunkt eine Verbindung mit dem mongoDB-Replikat herstellt, dessen Lesevoreinstellungen auf sekundäre Speicher festgelegt sind, würde der sekundäre Speicher ebenfalls unter 3.3.3.3 sein? – user1709076
Es klingt wie NEAREST ** sollte ** das Replikat MongoDB aus dem Satz auswählen, der auf der gleichen Box ist - aber es ist mir nicht klar, wenn das wahr ist oder wie zu überprüfen – user1709076
Der Treiber wird nichts über AWS-Topologie wissen oder ELBs oder irgendetwas, wenn Sie NEAREST berechnen. Es wird ausschließlich auf Netzwerklatenz berechnet. Wenn Ihr Client auf der gleichen Instanz wie ein Replikatsatzmember ausgeführt wird, fragt er im Allgemeinen ab, ob es sich um den primären oder einen sekundären Member handelt. Aber denken Sie daran, ein neuer Primärserver kann jederzeit ausgewählt werden, und wenn Sie mit NEAREST arbeiten, werden Sie keine Lesevorgänge vom Primärspeicher verhindern. Das Ausführen Ihrer App in denselben Instanzen wie Ihre MongoDB-Replikatgruppenmitglieder ist jedoch im Allgemeinen keine bewährte Methode. –