Mongodb-Konfigurationsserver nicht synchronisiert

9

Ich habe Setup mit 2 Shards, mit 2 Replikatservern und 3 Konfigurationsservern und 2 Mongos. Ich habe folgende Probleme:

1) Mongo-Konfigurationsserver sind nicht synchron:

Aug 14 09:46:48 server mongos.27017[10143]: Sun Aug 11 09:46:48.987 [CheckConfigServers] ERROR: config servers not in sync! config servers mongocfg1.testing.com:27000 and mongocfg3.testing.com:27000 differ#012chunks: "d2c08c5f1ee6048e5f6fab30e37a70f0"#011chunks: "7e643e9402ba90567ddc9388c2abdb8a"#012databases: "6f35ec52b536eee608d5bc706a72ec1e"#011databases: "6f35ec52b536eee608d5bc706a72ec1e"

2) Ich verwende dieses Dokument zum Synchronisieren von Servern: http://docs.mongodb.org/manual/tutorial/replace-config-server/ 3) Nach der Synchronisierung starte ich einen Mongos-Server neu und sehe dies in den Protokollen:

Thu Aug 15 09:56:05.376 [mongosMain] MongoS version 2.4.4 starting: pid=1575 port=27111 64-bit host=web-inno.innologica.com (--help for usage)
Thu Aug 15 09:56:05.376 [mongosMain] git version: 4ec1fb96702c9d4c57b1e06dd34eb73a16e407d2
Thu Aug 15 09:56:05.376 [mongosMain] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Thu Aug 15 09:56:05.376 [mongosMain] options: { configdb: "mongocfg1.testing.com:27000,mongocfg2.testing.com:27000,mongocfg3.testing.com:27000", keyFile: "/mongo_database/pass.key", port: 27111 }
Thu Aug 15 09:56:05.582 [mongosMain] SyncClusterConnection connecting to [mongocfg1.testing.com:27000]
Thu Aug 15 09:56:05.583 [mongosMain] SyncClusterConnection connecting to [mongocfg2.testing.com:27000]
Thu Aug 15 09:56:05.583 [mongosMain] SyncClusterConnection connecting to [mongocfg3.testing.com:27000]
Thu Aug 15 09:56:05.585 [mongosMain] SyncClusterConnection connecting to [mongocfg1.testing.com:27000]
Thu Aug 15 09:56:05.586 [mongosMain] SyncClusterConnection connecting to [mongocfg2.testing.com:27000]
Thu Aug 15 09:56:05.586 [mongosMain] SyncClusterConnection connecting to [mongocfg3.testing.com:27000]
Thu Aug 15 09:56:07.213 [Balancer] about to contact config servers and shards
Thu Aug 15 09:56:07.213 [websvr] admin web console waiting for connections on port 28111
Thu Aug 15 09:56:07.213 [Balancer] starting new replica set monitor for replica set replica01 with seed of mongo1.testing.com:27020,mongo2.testing.com:27020,mongo3.testing.com:27017
Thu Aug 15 09:56:07.214 [Balancer] successfully connected to seed mongo1.testing.com:27020 for replica set replica01
Thu Aug 15 09:56:07.214 [Balancer] changing hosts to { 0: "mongo1.testing.com:27020", 1: "mongo2.testing.com:27020" } from replica01/
Thu Aug 15 09:56:07.214 [Balancer] trying to add new host mongo1.testing.com:27020 to replica set replica01
Thu Aug 15 09:56:07.215 [Balancer] successfully connected to new host mongo1.testing.com:27020 in replica set replica01
Thu Aug 15 09:56:07.215 [Balancer] trying to add new host mongo2.testing.com:27020 to replica set replica01
Thu Aug 15 09:56:07.215 [Balancer] successfully connected to new host mongo2.testing.com:27020 in replica set replica01
Thu Aug 15 09:56:07.215 [mongosMain] waiting for connections on port 27111
Thu Aug 15 09:56:07.427 [Balancer] Primary for replica set replica01 changed to mongo1.testing.com:27020
Thu Aug 15 09:56:07.429 [Balancer] replica set monitor for replica set replica01 started, address is replica01/mongo1.testing.com:27020,mongo2.testing.com:27020
Thu Aug 15 09:56:07.429 [ReplicaSetMonitorWatcher] starting
Thu Aug 15 09:56:07.430 [Balancer] starting new replica set monitor for replica set replica02 with seed of mongo5.testing.com:27020,mongo6.testing.com:27020
Thu Aug 15 09:56:07.431 [Balancer] successfully connected to seed mongo5.testing.com:27020 for replica set replica02
Thu Aug 15 09:56:07.432 [Balancer] changing hosts to { 0: "mongo5.testing.com:27020", 1: "mongo6.testing.com:27020" } from replica02/
Thu Aug 15 09:56:07.432 [Balancer] trying to add new host mongo5.testing.com:27020 to replica set replica02
Thu Aug 15 09:56:07.432 [Balancer] successfully connected to new host mongo5.testing.com:27020 in replica set replica02
Thu Aug 15 09:56:07.432 [Balancer] trying to add new host mongo6.testing.com:27020 to replica set replica02
Thu Aug 15 09:56:07.433 [Balancer] successfully connected to new host mongo6.testing.com:27020 in replica set replica02
Thu Aug 15 09:56:07.712 [Balancer] Primary for replica set replica02 changed to mongo5.testing.com:27020
Thu Aug 15 09:56:07.714 [Balancer] replica set monitor for replica set replica02 started, address is replica02/mongo5.testing.com:27020,mongo6.testing.com:27020
Thu Aug 15 09:56:07.715 [Balancer] config servers and shards contacted successfully
Thu Aug 15 09:56:07.715 [Balancer] balancer id: web-inno.innologica.com:27111 started at Aug 15 09:56:07
Thu Aug 15 09:56:07.715 [Balancer] SyncClusterConnection connecting to [mongocfg1.testing.com:27000]
Thu Aug 15 09:56:07.716 [Balancer] SyncClusterConnection connecting to [mongocfg2.testing.com:27000]
Thu Aug 15 09:56:24.438 [mongosMain] connection accepted from 127.0.0.1:55303 #1 (1 connection now open)
Thu Aug 15 09:56:24.443 [conn1]  authenticate db: admin { authenticate: 1, nonce: "6cc9a76b79656179", user: "admin", key: "xxxxxxxxxxxxxxxxxxx" }
Thu Aug 15 09:56:26.676 [conn1] creating WriteBackListener for: mongo1.testing.com:27020 serverID: 520c7b87e4a4c3afa569b21a
Thu Aug 15 09:56:26.676 [conn1] creating WriteBackListener for: mongo2.testing.com:27020 serverID: 520c7b87e4a4c3afa569b21a
Thu Aug 15 09:56:26.678 [conn1] creating WriteBackListener for: mongo5.testing.com:27020 serverID: 520c7b87e4a4c3afa569b21a
Thu Aug 15 09:56:26.678 [conn1] creating WriteBackListener for: mongo6.testing.com:27020 serverID: 520c7b87e4a4c3afa569b21a
Thu Aug 15 09:56:26.679 [conn1] SyncClusterConnection connecting to [mongocfg1.testing.com:27000]
Thu Aug 15 09:56:26.679 [conn1] SyncClusterConnection connecting to [mongocfg2.testing.com:27000]
Thu Aug 15 09:56:26.680 [conn1] SyncClusterConnection connecting to [mongocfg3.testing.com:27000]
Thu Aug 15 09:57:33.704 [conn1] warning: inconsistent chunks found when reloading collection.documents, previous version was 8651|7||51b5c7a96b2903a0b3fac106, this should be rare
Thu Aug 15 09:57:33.714 [conn1] warning: ChunkManager loaded an invalid config for collection.documents, trying again
Thu Aug 15 09:57:34.065 [conn1] warning: inconsistent chunks found when reloading collection.documents, previous version was 8651|7||51b5c7a96b2903a0b3fac106, this should be rare
Thu Aug 15 09:57:34.076 [conn1] warning: ChunkManager loaded an invalid config for collection.documents, trying again
Thu Aug 15 09:57:34.491 [conn1] warning: inconsistent chunks found when reloading collection.documents, previous version was 8651|7||51b5c7a96b2903a0b3fac106, this should be rare
Thu Aug 15 09:57:34.503 [conn1] warning: ChunkManager loaded an invalid config for collection.documents, trying again
Thu Aug 15 09:57:34.533 [conn1] Assertion: 13282:Couldn't load a valid config for collection.documents after 3 attempts. Please try again.
0xa82161 0xa46e8b 0xa473cc 0x8b857e 0x93cb52 0x93f329 0x93ff18 0x94311f 0x9740e0 0x991865 0x669887 0xa6e8ce 0x7f4456361851 0x7f445570790d
 /usr/bin/mongos(_ZN5mongo15printStackTraceERSo+0x21) [0xa82161]
 /usr/bin/mongos(_ZN5mongo11msgassertedEiPKc+0x9b) [0xa46e8b]
 /usr/bin/mongos() [0xa473cc]
 /usr/bin/mongos(_ZN5mongo12ChunkManager18loadExistingRangesERKSs+0x24e) [0x8b857e]
 /usr/bin/mongos(_ZN5mongo8DBConfig14CollectionInfo5shardEPNS_12ChunkManagerE+0x52) [0x93cb52]
 /usr/bin/mongos(_ZN5mongo8DBConfig14CollectionInfoC1ERKNS_7BSONObjE+0x149) [0x93f329]
 /usr/bin/mongos(_ZN5mongo8DBConfig5_loadEv+0xa48) [0x93ff18]
 /usr/bin/mongos(_ZN5mongo8DBConfig4loadEv+0x1f) [0x94311f]
 /usr/bin/mongos(_ZN5mongo4Grid11getDBConfigESsbRKSs+0x480) [0x9740e0]
 /usr/bin/mongos(_ZN5mongo7Request5resetEv+0x1d5) [0x991865]
 /usr/bin/mongos(_ZN5mongo21ShardedMessageHandler7processERNS_7MessageEPNS_21AbstractMessagingPortEPNS_9LastErrorE+0x67) [0x669887]
 /usr/bin/mongos(_ZN5mongo17PortMessageServer17handleIncomingMsgEPv+0x42e) [0xa6e8ce]
 /lib64/libpthread.so.0(+0x7851) [0x7f4456361851]
 /lib64/libc.so.6(clone+0x6d) [0x7f445570790d]
Thu Aug 15 09:57:34.549 [conn1] scoped connection to mongocfg1.testing.com:27000,mongocfg2.testing.com:27000,mongocfg3.testing.com:27000 not being returned to the pool
Thu Aug 15 09:57:34.549 [conn1] warning: error loading initial database config information :: caused by :: Couldn't load a valid config for collection.documents after 3 attempts. Please try again.
Thu Aug 15 09:57:34.549 [conn1] AssertionException while processing op type : 2004 to : collection.system.namespaces :: caused by :: 13282 error loading initial database config information :: caused by :: Couldn't load a valid config for collection.documents after 3 attempts. Please try again.
Thu Aug 15 09:57:37.722 [Balancer] SyncClusterConnection connecting to [mongocfg1.testing.com:27000]
Thu Aug 15 09:57:37.723 [Balancer] SyncClusterConnection connecting to [mongocfg2.testing.com:27000]
Thu Aug 15 09:57:37.723 [Balancer] SyncClusterConnection connecting to [mongocfg3.testing.com:27000]

Erste Mongos haben auch diesen Fehler "Warnung: Fehler beim Laden der anfänglichen Datenbankkonfigurationsinformationen :: verursacht durch :: Konnte nach 3 Versuchen keine gültige Konfiguration für collection.documents laden. Bitte versuchen Sie es erneut."

aber arbeite erstmal.

Zweite Mongos nach dem Neustart funktionieren nicht.

mongos> show collections
Thu Aug 15 09:57:34.550 JavaScript execution failed: error: {
    "$err" : "error loading initial database config information :: caused by :: Couldn't load a valid config for collection.documents after 3 attempts. Please try again.",
    "code" : 13282
} at src/mongo/shell/query.js:L128
mongos>

Was sind die nächsten Schritte, um Konfigurationsserver wiederherzustellen?

Alle Ratschläge sind willkommen.

user2688866
quelle

Antworten:

11

Das Wiederherstellen von Konfigurationsservern, insbesondere wenn Sie ein katastrophales Ereignis hatten, ist schwierig, aber nicht unmöglich. Aber bevor wir weiter gehen, eine große kühne Einschränkung:

SICHERN SIE ALLES

Das bedeutet, dass alle drei Konfigurationsserver gesichert werden müssen. Ich werde Ihnen einige Ratschläge geben, die im Allgemeinen korrekt sind. Bitte sichern Sie jedoch jede aktuelle Konfigurationsserverinstanz, bevor Sie etwas überschreiben / ersetzen

Zur schnellen Erklärung: Konfigurationsserver sind nicht als Replikatsatz konfiguriert. Jede Konfigurationsserverinstanz sollte (zumindest für alle wichtigen Sammlungen) mit den anderen identisch sein. Daher kann jeder fehlerfreie Konfigurationsserver verwendet werden, um einen nicht fehlerfreien Konfigurationsserver zu ersetzen, und Sie können dann dem von Ihnen erwähnten Lernprogramm folgen, um zu einer guten Konfiguration zurückzukehren.

Der Schlüssel zur Wiederherstellung besteht darin , den fehlerfreien Konfigurationsserver zu identifizieren und diesen dann zu verwenden, um die anderen zu ersetzen. Am Ende stehen 3 identische Konfigurationsserver zur Verfügung.

Es gibt mehr als einen Weg, dies zu tun, sie fallen grundsätzlich in drei Kategorien:

1) Verwenden Sie die Fehlermeldung

Die ausgedruckte Fehlermeldung informiert Sie darüber, welcher Konfigurationsserver seiner Meinung nach fehlerfrei ist, obwohl dies aus den Nachrichten nicht ersichtlich ist. So lesen Sie es allgemein:

ERROR: config servers not in sync! config servers <healthy-server> and <out-of-sync-server> differ

Grundsätzlich ist der erste in der Liste der gesunde, in Ihrem Fall wäre das mongocfg1.testing.com:27000. Dies ist unser erster Kandidat für eine gesunde Konfigurationsdatenbank.

2) dbhashVergleichen Sie alle drei und wählen Sie diejenigen aus, die übereinstimmen

Wechseln Sie auf jedem Konfigurationsserver zur Konfigurationsdatenbank, indem Sie die Hashes für die folgenden Sammlungen use configausführen, ausführen db.runCommand("dbhash")und vergleichen:

  • Brocken
  • Datenbanken
  • die Einstellungen
  • Scherben
  • Ausführung

Sie suchen nach zwei Servern, die übereinstimmen, und verwenden diese als Grundlage, um festzustellen, dass die Version der Konfigurationsdatenbank auf diesen Hosts grundsätzlich vertrauenswürdig ist und verwendet werden sollte, um den Rest zu setzen.

3. Überprüfen Sie die Sammlungen in der Konfigurationsdatenbank manuell

Schauen Sie sich zum Schluss die Konfigurationsdatenbank an und achten Sie auf die Sammlungen, die in der zweiten Option oben aufgeführt sind. Dies ist eine direkte Entscheidung, die auf Ihrer Vertrautheit mit Ihren Daten basiert.

Hoffentlich zeigen Sie alle drei Methoden auf denselben Host (oder dieselben Hosts). Dieser Konfigurationsserver sollte verwendet werden, um die anderen beiden zu setzen (nachdem Sie Backups erstellt haben, damit Sie zurückkehren können). Das ist im Grunde Ihre beste Wahl. Sollte dies fehlschlagen, sollten Sie eine der anderen Versionen (aus den Sicherungen) ausprobieren. Stellen Sie dabei immer sicher, dass alle drei Versionen identisch sind, wenn Sie sie starten.

Stellen Sie schließlich immer sicher, dass alle mongosProzesse dieselbe Konfigurationsserverzeichenfolge verwenden und dass alle drei Server bei jedem Prozess immer in derselben Reihenfolge aufgeführt sind. Wenn Sie dies nicht über alle mongosProzesse hinweg tun, kann dies zu (sehr) merkwürdigen Ergebnissen führen.

Adam C.
quelle
Für die zweite Kategorie sehe ich keine "Datenbanksammlung". Wie wichtig ist es, wenn andere Dinge wie "Chunks" synchron sind? Kann es woanders gefunden werden?
Snetch
Ich habe befolgt, was Sie gesagt haben. Ich sehe nur "md5": "d41d8cd98f00b204e9800998ecf8429e" von 3 Konfigurationsservern als gleich. Wie korrigiere ich den Fehler?
Amit Tripathi
Hallo AdamC, ich habe derzeit das gleiche Problem und es ist sehr dringend für mich, es so schnell wie möglich zu tun. Ich habe eine kurze Frage. Muss ich alle Mongos und Mongod stoppen, bevor ich die configdb herunterfahre?
Rendybjunior
Wenn Sie ein dringendes Problem haben, würde ich empfehlen, professionelle Beratung zu erhalten - wenden Sie sich an MongoDB und bitten Sie sie um Unterstützung. Ich arbeite nicht mehr für MongoDB und möchte Sie nicht über diese Art von Verfahren informieren, insbesondere für neuere Versionen der Datenbank, bei denen sich diese Art von Problem erheblich geändert hat (diese Antwort wurde vor fast 4 Jahren geschrieben)
Adam C