2017-06-28 2 views
0

J'utilise MongoDB 3.4.3 et j'ai trois machines dans un jeu de réplicas. Let ses noms comme , server2 et server3. server2 est dans un état de retour constant, donc nous l'avons éteint. server3 est en état de récupération et essaie d'obtenir oplog à partir de mais ses tentatives aboutissent à l'exception ExceededTimeLimit. Donc, c'est un extrait du journal server3:Délai de réplication de MongoDB

2017-06-26T14:42:14.442+0300 I REPL  [replication-0] could not find member to sync from 
2017-06-26T14:42:24.443+0300 I REPL  [rsBackgroundSync] sync source candidate: server1:27017 
2017-06-26T14:42:24.444+0300 I ASIO  [NetworkInterfaceASIO-RS-0] Connecting to server1:27017 
2017-06-26T14:42:24.455+0300 I ASIO  [NetworkInterfaceASIO-RS-0] Successfully connected to server1:27017 
2017-06-26T14:42:54.459+0300 I REPL  [replication-0] Blacklisting server1:27017 due to required optime fetcher error: 'ExceededTimeLimit: Operation timed out, request was RemoteCommand 191739 -- server1:27017 db:local expDate:2017-06-26T14:42:54.459+0300 cmd:{ find: "oplog.rs", oplogReplay: true, filter: { ts: { $gte: Timestamp 1497975676000|310, $lte: Timestamp 1497975676000|310 } } }' for 10s until: 2017-06-26T14:43:04.459+0300. required optime: { ts: Timestamp 1497975676000|310, t: 20 } 

Ainsi, ces attepms pour récupérer oplog sont infinies. Selon db.currentOp() il existe un journal des requêtes en cours d'exécution sur le (le principal de l'ensemble de réplicas) en essayant de récupérer le journal des opérations. Ces requêtes diminuent la performance de , donc ma base de données fonctionne très très lentement.

La taille de l'oplog actuelle est 643 GB. Je pense que sa taille est la raison pour laquelle la réplication ne fonctionne pas. server2 avait également des problèmes de dépassement de délai d'opération, donc nous l'avons éteint temporairement. Cette sutiation dure depuis plus d'une semaine. J'ai plus de 5 To de données sur la machine principale. Comment puis-je restaurer l'ensemble de réplicas?

upd: Nos serveurs ont chacun 64 Go de mémoire. Ce sont des machines virtuelles en effet.

Répondre

1

Pouvez-vous avoir des temps d'arrêt? Parce qu'il semble que votre machine (serveur1) n'a pas assez de mémoire. Avec 5 To de données et ce gros opLog, la quantité de mémoire nécessaire est de plusieurs centaines de Go. Je n'essaierais pas d'exécuter ce système en tant que jeu de réplicas. Plus de 3-5 grappes de fragments (totalement 9-15 nœuds, jeu de répliques de 3 pour chaque fragment). La bonne règle est de garder la taille du nœud toujours inférieure à 2 To et 1 To est un bon point de départ si vous pouvez l'archiver.

Si vous pouvez avoir des temps d'arrêt, vous devriez réduire votre opLog à une taille plus raisonnable. Vous pourriez commencer avec 50GB. Les étapes peuvent être trouvées here.

+0

Je peux avoir des temps d'arrêt en dernier recours. Et peut-être qu'il est temps pour elle ... – user2717575

+0

Nos serveurs ont 64 Go de mémoire chacun. Ce sont des machines virtuelles en effet. – user2717575

+0

Nous avons 10 * 1,1TB cluster .. Avec 120 Go de mémoire sur chaque .. Nous avons fait "test" avec 64 Go, mais la performance n'était pas assez bon. – JJussi