serwery konfiguracji mongodb nie są zsynchronizowane


9

Mam konfigurację z 2 fragmentami, 2 serwerami repliki i 3 serwerami konfiguracji oraz 2 mongo. Mam następujące problemy:

1) serwery konfiguracji mongo niezsynchronizowane:

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) Używam tego dokumentu do synchronizacji serwerów: http://docs.mongodb.org/manual/tutorial/replace-config-server/ 3) Po synchronizacji ponownie uruchamiam jeden serwer mongos i widzę to w logach:

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]

Pierwsze mongo mają również błąd „ostrzeżenie: błąd ładowania informacji o wstępnej konfiguracji bazy danych :: spowodowane przez :: Nie można załadować prawidłowej konfiguracji dla collection.documents po 3 próbach. Spróbuj ponownie.”

ale na razie pracuj.

Drugie mongo po ponownym uruchomieniu nie działają;

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>

Jakie są kolejne kroki w celu odzyskania serwerów konfiguracji?

Wszelkie porady są mile widziane.

Odpowiedzi:


11

Przywracanie serwerów konfiguracji, szczególnie jeśli zdarzyło się coś katastroficznego, jest trudne, ale nie niemożliwe. Ale zanim przejdziemy dalej, wielkie odważne zastrzeżenie:

ZAPASUJ WSZYSTKO

Oznacza to wykonanie kopii zapasowej wszystkich trzech serwerów konfiguracji. Dam ci kilka rad i jest to ogólnie poprawne, ale proszę, wykonaj kopię zapasową każdej bieżącej instancji serwera konfiguracji, zanim nadpiszesz / zastąpisz cokolwiek

W skrócie, serwery konfiguracji nie są skonfigurowane jako zestaw replik - każda instancja serwera konfiguracji powinna być identyczna (przynajmniej dla wszystkich kolekcji, które mają znaczenie) z innymi. W związku z tym każdy zdrowy serwer konfiguracji może zostać użyty do zastąpienia nie-zdrowego serwera konfiguracji, a następnie możesz postępować zgodnie z samouczkiem, o którym wspomniałeś, aby powrócić do dobrej konfiguracji.

Kluczem do odzyskania jest zidentyfikowanie zdrowego serwera konfiguracji, a następnie użycie go do zastąpienia innych - w rezultacie otrzymujesz 3 identyczne serwery konfiguracji.

Jest na to więcej niż jeden sposób, w zasadzie można je podzielić na trzy kategorie:

1) Użyj komunikatu o błędzie

Wydrukowany komunikat o błędzie faktycznie informuje, który serwer konfiguracji uważa za poprawny, chociaż nie jest to oczywiste z wiadomości. Oto jak ogólnie to przeczytać:

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

Zasadniczo pierwszy na liście jest zdrowy, w twoim przypadku tak byłoby mongocfg1.testing.com:27000. To jest nasz pierwszy kandydat na zdrową bazę danych konfiguracji.

2) Użyj, dbhashaby porównać wszystkie trzy i wybierz te, które się zgadzają

Na każdym serwerze konfiguracji przejdź do bazy danych konfiguracji, używając use config, uruchom db.runCommand("dbhash")i porównaj skróty dla poniższych kolekcji:

  • kawałki
  • bazy danych
  • ustawienia
  • odłamki
  • wersja

Poszukujesz dwóch serwerów, które się zgadzają, i wykorzystujesz je jako podstawę do ustalenia, czy wersja bazy danych config na tych hostach jest zasadniczo godna zaufania i powinna zostać wykorzystana do zresetowania pozostałych.

3. Ręcznie sprawdź kolekcje w bazie danych konfiguracji

Na koniec spójrz na bazę danych konfiguracji i zwróć uwagę na kolekcje wymienione w drugiej opcji powyżej. Jest to proste orzeczenie oparte na twojej znajomości twoich danych.

Mamy nadzieję, że wszystkie trzy metody wskazują ci ten sam host (lub hosty). Tego serwera konfiguracji należy używać do inicjowania pozostałych dwóch (po wykonaniu kopii zapasowych, aby można było wrócić). To jest w zasadzie twój najlepszy zakład. Jeśli to się nie powiedzie, możesz wypróbować jedną z pozostałych wersji (z kopii zapasowych) - zawsze upewniając się, że kiedy je uruchomisz, wszystkie trzy są identyczne.

Wreszcie, zawsze upewnij się, że wszystkie mongosprocesy używają tego samego ciągu serwera konfiguracji i że wszystkie 3 serwery są zawsze wymienione w tej samej kolejności na każdym procesie - niezastosowanie się do wszystkich mongosprocesów może prowadzić do (bardzo) dziwnych wyników.


W przypadku drugiej kategorii nie widzę kolekcji „baz danych”. Jak ważne jest to, że inne rzeczy, takie jak „fragmenty” są zsynchronizowane? Czy można go znaleźć gdzie indziej?
pobierz

Postępowałem zgodnie z tym, co powiedziałeś. Widzę tylko „md5”: „d41d8cd98f00b204e9800998ecf8429e” 3 serwerów konfiguracji jako takich samych. Jak mogę naprawić błąd?
Amit Tripathi

Cześć AdamC, obecnie mam ten sam problem i jest to dla mnie bardzo pilne, aby zrobić to jak najszybciej. Mam szybkie pytanie. Czy muszę zatrzymać wszystkie mongo i mongod przed zamknięciem configdb?
rendybjunior

Jeśli masz pilny problem, zaleciłbym uzyskanie profesjonalnej porady w tej sprawie - skontaktuj się z MongoDB i poproś o wsparcie. Nie pracuję już dla MongoDB i nie chciałbym omawiać tego rodzaju procedur, szczególnie w przypadku nowszych wersji bazy danych, w których ten problem znacznie się zmienił (odpowiedź została napisana prawie 4 lata temu)
Adam C
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.