Ich habe ein Backup-Skript für Sharded-Replikatsätze geschrieben und es ist fast fertig, außer dass ich es scheinbar nicht dazu bringen kann, den Balancer erfolgreich wieder zu starten, nachdem alles gesagt und getan ist.
Hier ist der Befehl, mit dem ich versuche, den Balancer wieder zu starten. Beachten Sie, dass dies auf dem eigentlichen Mongos-Server über SSH ausgeführt wird.
sudo -s
mongo -u username -p password --authenticationDatabase db
use config
sh.setBalancerState(true)
exit
exit
exit
Ich erhalte immer dann den folgenden Fehler, wenn das Skript die startBalancer
Funktion trifft , die den obigen Code ausführt.
SyncClusterConnection::udpate prepare failed: mongo-conf-0.foo.bar.com:27019:10276
DBClientBase::findN: transport error: mongo-conf-0.foo.bar.com:27019
ns: admin.$cmd query: { resetError: 1 }
Ich habe versucht, den Exit-Status des mongo
Shell-Prozesses mit etwas wie zu überprüfen
if (code != 0) {
return next('repeat');
} else {
return next();
}
Unabhängig davon, was tatsächlich in der Mongo-Shell vorkommt, scheint der Exit-Code immer 0 zu sein.
Ideen, wie ich überprüfen kann, ob der Mongos-Prozess tatsächlich mit allen drei Konfigurationen verbunden ist, bevor ich versuche, den Balancer wieder zu aktivieren - ich gehe davon aus, dass dies das Problem ist, dass der Mongos-Server vor dem versucht, eine Verbindung zum Konfigurationsserver herzustellen Der Mongod-Prozess hatte die Möglichkeit, den Startvorgang abzuschließen (ein Teil des Sicherungsprozesses für Sharded-Replikatsätze besteht darin , einen der Konfigurationsserver herunterzufahren ).
Antworten:
Haben Sie stattdessen versucht, den
sh.startBalancer()
Helfer zu verwenden?Anstelle eines direkten Updates dauert es ein Timeout-Argument, wie lange auf den Start des Ausgleichs gewartet werden muss, sowie ein Schlafintervall in Bezug auf die Schlafdauer zwischen dem Warten. Hier ist der Code aus der Shell zur Erklärung:
Sie können es also sogar auflösen und den
waitForBalancer
Helfer verwenden, wenn Sie möchten. Als Referenz ist hier der entsprechendestopBalancer
Befehl, der beim Versuch, ihn mit einem heruntergefahrenen Konfigurationsserver zu stoppen, fehlerhaft ausgeführt wurde:quelle
Es ist einfacher, Ihren Mongo zu "befehlen" als das, was Sie tun.
Keine Notwendigkeit für Sudo-Befehle oder mehrere Exits. Der Befehl wird zurückgegeben, wenn er fertig ist.
Sie können den Status des Balancers mit überprüfen
quelle