2012-09-06 4 views
0

Dans mon test Envinroment: node1: primaire shard1, shard2 primaire node2: shard1 secondaire, shard2 secondaire node3: arbitre shard1, shard2 artbiter J'ai écrit un multi-thread pour écrire simultanément le mongo réplicat ensemble shard, après 1 heure (le primaire avait 6g de données) J'ai trouvé le statut secondaire est: récupération J'ai vérifié le journal secondaire, a déclaré: données obsolètes de l'oplog primaire Donc la raison était ma demande d'écriture très fréquent? le secondaire ne peut pas se répliquer à temps? ou d'autres raisons? Je suis curieux ... Merci d'avanceinsert mongodb MultiThread fait des données périmées

Répondre

0

Cette situation peut se produire si la taille de l'OpLog n'est pas suffisante pour garder un enregistrement de toutes les opérations se produisant sur le primaire, ou le secondaire ne peut tout simplement pas garder avec le primaire. Ce qui se passera dans ce cas est la position dans le OpLog où le secondaire sera écrasé par les nouvelles insertions du primaire. À ce stade, le secondaire signalera que son statut est Recovering et vous verrez un message RS102 dans le journal, indiquant qu'il est trop vieux pour rattraper.

Pour résoudre le problème, vous devez suivre les étapes décrites dans le documentation.

Afin d'éviter que le problème ne se reproduise à l'avenir, vous devez ajuster la taille de l'OpLog et vous assurer que les secondaires ont des configurations matérielles équivalentes.

Pour faciliter le réglage de l'OpLog, vous pouvez consulter la sortie db.printReplicationInfo() qui vous indiquera le temps dont vous disposez dans votre OpLog. Le documentation explique comment redimensionner l'OpLog s'il est trop petit.

Questions connexes