Question

Nous avons une configuration de deux éclats de MongoDB. Chaque fragment contient un maître, un esclave, un esclave de retard d'esclave 24h et un arbitre. Cependant, l'équilibreur ne migre pas les éclats en attendant que l'esclave retardé migre. J'ai essayé de définir _secondarythrottle à false dans la configuration de l'équilibreur, mais j'ai toujours le problème.

Il semble que la migration continue une journée puis échoue (une tonne d'attente des messages esclaves dans les journaux). Finalement, il abandonne et démarre une nouvelle migration. Le message indique en attendant 3 esclaves, mais l'esclave de retard est caché et PRIO 0, il devrait donc attendre celui-là. Et si le _secondarythrottle fonctionnait, il ne devrait pas attendre d'esclave, non?

C'est comme ça depuis quelques mois maintenant, donc la configuration aurait dû être rechargée sur tous les mongoses. Certains des Mongoses qui dirigent l'équilibreur ont récemment été le restaurateur.

Quelqu'un a-t-il une idée de la façon de résoudre le problème, nous n'avons pas eu ces problèmes avant de commencer l'esclave retardé, mais c'est juste notre théorie.

Config:

{ "_id" : "balancer", "_secondaryThrottle" : false, "stopped" : false }

Journal à partir du processus maître Shard1:

MigraTeThead] AVERTISSEMENT: Migrate Commit en attente de 3 esclaves pour 'xxx.xxx' {shardkey: ObjectId ('4FD2025AE087C37D32039A9E')} -> {Shardkey: ObjectId ('4FD2035AE087C37F04014A79')} Waiting For: 529DC9: 7a] réplication pour rattraper avant d'entrer dans la section critique

Journal à partir du processus maître Shard2:

Mar 3 14: 52: 25.302 [Conn1369472] MovEchunk Data Transfer Progress: {active: true, ns: "xxx.xxx", de: "Shard2 / Mongo2: 27018, Mongob2: 27018", Min: {Shardkey: ObjectId (ObjectId ( '4fd2025ae087c37d32039a9e') }, max: { shardkey: ObjectId('4fd2035ae087c37f04014a79') }, shardKeyPattern: { shardkey: 1.0 }, state: "catchup", counts: { cloned: 22773, clonedBytes: 36323458, catchup: 0, steady: 0}, ok: 1.0} mon mem utilisé: 0

MISE À JOUR: J'ai confirmé que la suppression de Slavedelay a fait fonctionner l'équilibreur. Dès qu'ils se sont mis à jour, des morceaux se sont déplacés. Le problème semble donc être lié au Slavedelay. J'ai également confirmé que l'équilibreur fonctionne avec "Secondarythrottle": False. Il semble de toute façon attendre les esclaves.

Shard2:

Mar 10 décembre 11: 44: 25.423 [migraTethRead] AVERTISSEMENT: migrater engager en attendant 3 esclaves pour 'xxx.xxx' {Shardkey: ObjectId ('4FF1213EE087C3516B2F703F')} -> {Shardke 52A6F089: 81

Mar 10 décembre 11: 44: 26.423 [MigrateThread] En attente de la réplication pour rattraper son retard avant d'entrer dans la section critique

Mar 10 décembre 11: 44: 27.423 [MigrateThread] En attente de la réplication pour rattraper son retard avant d'entrer dans la section critique

Mar 10 décembre 11: 44: 28.423 [MigrateThread] En attente de la réplication pour rattraper son retard avant d'entrer dans la section critique

Mar 10 décembre 11: 44: 29.424 [MigraTethead] En attente de la réplication pour rattraper son retard avant d'entrer dans la section critique

Mar 10 décembre 11: 44: 30.424 [MigrateThread] En attente de la réplication pour rattraper son retard avant d'entrer dans la section critique

Mar 10 décembre 11: 44: 31.424 [MigrateThread] En attente de la réplication pour rattraper son retard avant d'entrer dans la section critique

Mar 10 décembre 11: 44: 31.424 [migraTethread] migrate commit a réussi à faire du rinçage aux secondaires pour 'xxx.xxx' {shardkey: objectId ('4ff1213ee087c3516b2f703f')} -> {shardke

Mar 10 décembre 11: 44: 31.425 [MigraTeThead] Migrate Commit Flushed vers le journal pour 'xxx.xxx' {Shardkey: ObjectId ('4FF1213EE087C3516B2F703F')} -> {Shardkey: ObjectId ')

Mar 10 décembre 11: 44: 31.647 [migraTethread] migrate commit a réussi à rincer vers les secondaires pour 'xxx.xxx' {shardkey: ObjectId ('4ff1213EE087C3516B2F703F')} -> {shardke

Mar 10 décembre 11: 44: 31.667 [migraTead] migrater commit rouge au journal pour 'xxx.xxx' {shardkey: ObjectId ('4FF1213EE087C3516B2F703F')} -> {shardkey: ObjectId ')

Était-ce utile?

La solution

L'équilibreur attend correctement la majorité de l'ensemble des répliques du Shard de destination pour que les documents soient migrés avant de déclencher la suppression de ces documents sur l'éclat source.

Le problème est que vous avez quatre membres dans votre réplique (maître, un esclave, un esclave de retard d'esclave 24h et un arbitre). Cela signifie que trois est la majorité. Je ne sais pas pourquoi vous avez ajouté un arbitre, mais si vous le supprimez, alors deux seront la majorité et l'équilibreur n'aura pas à attendre l'esclave retardé.

La manière alternative d'atteindre le même résultat est de configurer l'esclave retardé avec votes:0 propriété et quittez l'arbitre comme le troisième nœud de vote.

Autres conseils

Quelle version utilisez-vous? Il y a un bogue connu dans 2.4.2 et inférieur, ainsi que 2.2.4 et inférieur qui provoque un nombre incorrect du nombre de secondaires dans l'ensemble (et rend donc impossible de satisfaire la valeur par défaut W: majorité écrire pour la migration). Ceci est le bogue (corrigé en 2.4.3+ et 2.2.5+):

https://jira.mongodb.org/browse/server-8420

La désactivation de l'accélérateur secondaire devrait être une solution de contournement valide, mais vous voudrez peut-être faire un flushrouterconfig sur mongos processus (ou simplement redémarrer tous les mongos processus) pour s'assurer que le paramètre prend effet pour vos migrations, surtout s'ils prennent un jour à temps. Comme un autre correctif potentiel avant la mise à niveau, vous pouvez également Déposez la collection locale.Slaves (il sera recréé).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top