Domanda

Abbiamo una configurazione di due frammenti di MongoDB. Ogni frammento contiene un maestro, uno schiavo, uno schiavo dello schiavo di 24 ore e un arbitro. Tuttavia, il bilanciatore non riesce a migrare qualsiasi frammento in attesa che lo schiavo ritardato migri. Ho provato a impostare _secondarythrottle su False nella configurazione del bilanciatore, ma ho ancora il problema.

Sembra che la migrazione continui per un giorno e poi fallisce (una tonnellata di messaggi di slave nei registri). Alla fine si arrende e inizia una nuova migrazione. Il messaggio dice in attesa di 3 schiavi, ma lo schiavo di ritardo è nascosto e prio 0, quindi dovrebbe aspettarlo. E se la frastuono, non dovrebbe aspettare uno schiavo giusto?

È così da alcuni mesi, quindi la configurazione avrebbe dovuto essere ricaricata su tutte le mongosio. Alcune delle mongosi che gestiscono il bilanciatore sono state di recente.

Qualcuno ha idea di come risolvere il problema, non abbiamo avuto questi problemi prima di iniziare lo schiavo ritardato, ma è solo la nostra teoria.

Config:

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

Log dal processo principale di Shard1:

migratethread] ATTENZIONE: migrare commessa in attesa di 3 schiavi per 'xxx.xxx' {shardkey: objectId ('4fd2025ae087c37d32039a9e')} -> {shardkey: objectId ('4fd2035ae087c37f04014a79' in attesa per: 529dc. replica da recuperare prima di entrare nella sezione critica

Log dal processo principale di Shard2:

Mar Dec 3 14: 52: 25.302 [Conn1369472] MoveChunk Data Trasfer Transfer Progress: {Active: True, NS: "XXX.XXX", da: "Shard2/Mongo2: 27018, Mongob2: 27018", Min: {Shardkey: ObjectId (ObjectId (ObjectId (ObjectId (ObjectId (ObjectId (ObjectId (ObjectId (ObjectId (ObjectId (ObjectId (ObjectId (ObjectId (OggettoId (OggettoD (OggettoD (OggettoD (OggettoId '4fd2025ae087c37d32039a9e') }, max: { shardkey: ObjectId('4fd2035ae087c37f04014a79') }, shardKeyPattern: { shardkey: 1.0 }, state: "catchup", counts: { cloned: 22773, clonedBytes: 36323458, catchup: 0, steady: 0}, ok: 1.0} il mio Mem usato: 0

AGGIORNAMENTO: ho confermato che la rimozione di Slavedelay ha fatto funzionare di nuovo il bilanciatore. Non appena si sono alzati per accelerare Chunks. Quindi il problema sembra essere correlato allo Slavedelay. Ho anche confermato che il bilanciatore funziona con "secondario": False. Sembra aspettare comunque gli schiavi.

Shard2:

Mar dec 10 11: 44: 25.423 [migrateThread] Avviso: migrare commessa in attesa di 3 schiavi per 'xxx.xxx' {shardkey: objectId ('4ff1213ee087c3516b2f703f')} -> {shardkey: objectid ('4ff12aEddf2b32dff1e7ba') 52a6f089: 81

Mar dec 10 11: 44: 26.423 [migratethread] in attesa che la replica si recuperasse prima di entrare nella sezione critica

Mar dec 10 11: 44: 27.423 [migrateThread] in attesa che la replica raggiunga prima di entrare nella sezione critica

Mar 10 DEC 11: 44: 28.423 [migrateThread] in attesa che la replica raggiunga il passo prima di entrare nella sezione critica

Mar dec 10 11: 44: 29.424 [migratethread] in attesa che la replica si recutri prima di entrare nella sezione critica

Mar dec 10 11: 44: 30.424 [migratethread] in attesa che la replica si recuperasse prima di entrare nella sezione critica

Mar dec 10 11: 44: 31.424 [migratethread] in attesa che la replica si recuperasse prima di entrare nella sezione critica

Marce 10 11: 44: 31.424 [migratethread] Migrate commit è riuscito a sciacquare i secondari per 'xxx.xxx' {shardkey: objectId ('4ff1213ee087c3516b2f703f')} -> {shardkey: objectid ('4ff12a5eddf2b32dff1e7Bea')

Marce 10 11: 44: 31.425 [migratethread] migrare commessa arrossata su Journal per 'xxx.xxx' {shardkey: objectId ('4ff1213ee087c3516b2f703f')} -> {shardkey: objectid ('4ff12a5eddf2b32dff1e7bea')}

Marce 10 11: 44: 31.647 [migratethread] Migrate commit è riuscito a sciacquare i secondari per 'xxx.xxx' {shardkey: objectId ('4ff1213ee087c3516b2f703f')} -> {shardkey: objectId ('4ff12a5eddf2b32dff1e7Bea')

Martedì 10 11: 44: 31.667 [migratethread] migrare commessa arrossata su un diario per 'xxx.xxx' {shardkey: objectid ('4ff1213ee087c3516b2f703f')} -> {shardkey: objectid ('4ff12a5eddf2b32dff1e7bea')}

È stato utile?

Soluzione

Il bilanciatore sta aspettando correttamente la maggior parte del set di replica del frammento di destinazione che venga migrato i documenti prima di iniziare la cancellazione di tali documenti sul frammento di origine.

Il problema è che hai quattro membri nel tuo set di repliche (maestro, uno schiavo, uno schiavo di ritardo di 24 ore e un arbitro). Ciò significa che tre è la maggioranza. Non sono sicuro del motivo per cui hai aggiunto un arbitro, ma se lo rimuovi, due saranno la maggioranza e il bilanciatore non dovrà attendere lo schiavo ritardato.

Il modo alternativo per raggiungere lo stesso risultato è impostare lo schiavo ritardato votes:0 Proprietà e lasciare l'arbitro come terzo nodo di voto.

Altri suggerimenti

che versione hai? C'è un bug noto in 2.4.2 e inferiore, nonché 2.2.4 e inferiore che provoca un conteggio errato del numero di secondari nel set (e quindi rende impossibile soddisfare il valore predefinito W: maggioranza scrivere per la migrazione). Questo è il bug (risolto in 2.4.3+ e 2.2.5+):

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

Spegnere l'acceleratore secondario dovrebbe essere una soluzione valida, ma potresti voler fare un FlushRouterConfig su qualsiasi mongos processi (o semplicemente riavviare tutti i mongos Processi) per assicurarsi che l'impostazione abbia effetto per le migrazioni, soprattutto se si stanno prendendo un giorno per il tempo. Come un'altra potenziale soluzione prima dell'aggiornamento, puoi anche Lancia la collezione Local.Slaves (sarà ricreato).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top