OverviewThe classic example of a rollback occurs when you have two replicas (a primary-A and secondary-B) and the secondary (B) is not up to date (replication is behind). If the primary (A) fails (or is shutdown) before B is up-to-date and B becomes primary, then there is data which B does not have but A does. When this happens, MongoDB cannot automatically merge the old data to the new/current primary, but don't worry, the data is not lost. The rollback operation will ensure that all data is consistent based on the current primary's data. In order to roll back the data on the original primary (A), the oplog is traversed from the point in time that the server B took over as primary. For each delete or update in the oplog on server A the modified documents are re-fetched from B any new documents after that point are deleted from server A. This rolled back data, which only A had) is stored in the `rollback` directory. The data is stored in a BSON file, the name is date-encoded like this foo.bar.2011-05-09T18-10-04.0.bson. In newer versions of mongodb (>2.1) that data may be stored in the local database as well so that restoring it will be easier. TODO: Add diagram. Rolled back data
One common strategy for reconciling these conflicts is restore the rollback data to a new collection. Then reconcile between that rollback collection and the master with a custom program/script. Rollback LimitationsMongoDB will not rollback more than 300MB of data. In this situation, the rollback will halt with the log message: [replica set sync] replSet syncThread: 13410 replSet too much data to roll back To recover data from the member that has failed to rollback, you will need to manually intervene. If you do not care about this data, remove the data directory and fully resync (or restore from a backup) to resume normal operation. |

PLEASE POST QUESTIONS IN THE USER GROUPS FORUM. Post non-question comments and helpful hints here.
blog comments powered by Disqus