MongoDB Maintenance

I am writing a Maintenance Script for MongoDB that will collect scheduled replica collection collections. Script I still look good doing the work that he must do against the Primary and Secondary nodes. However, there is a problem:

A system using the MongoDB Replica Set is a high-availability web queue from which it constantly writes and reads. Thus, even a few seconds of inactivity when calling rs.StepDown () is completely unacceptable. Is there a way to safely lower node priority without MongoExceptions from hundreds of clients?

Thanks!

ps here is the actual version of Script that should be run through a cron job at low load once a month

// assuming we are a replica set ;-) if(rs.isMaster().setName){ try { //check if the script is run against a master if(rs.isMaster().ismaster){ //if so, step down as master print("Connected to a PRIMARY node") print("Will try to step down as primary"); rs.stepDown(); // after stepdown connections are dropped. do an operation to cause reconnect: rs.isMaster(); // now ready to go. // wait for another node to become primary -- it may need data from us for the last // small sliver of time, and if we are already compacting it cannot get it while the // compaction is running. var counter = 1; while( 1 ) { var m = rs.isMaster(); if( m.ismaster ) { print("ERROR: no one took over during our stepDown duration. we are primary again!"); assert(false); } if( m.primary ){ // someone else is, great print("new master host is: "+m.primary); break; } print("waiting "+counter+" seconds"); sleep(1000); counter++; } }else{ print("Connected to a SECONDARY node"); print("Going into Recovery Mode and Compacting"); } // someone else is primary, so we are ready to proceed with a compaction print(" "); print("Compacting..."); print("- queue"); printjson( db.runCommand({compact:"queue"}) ); print(" "); } catch(e) { print(" "); print("ACHTUNG! Exception:" + e); print(" "); } }else{ print('This script works with replica sets only'); } 
+4
source share
1 answer

Is there a way to safely downgrade a base node without MongoExceptions from hundreds of clients?

No. MongoDB does not have any form of “forward change” or “service change”.

Performing this seal cycle is the right thing. But you have to wait until the maintenance window reduces the primary one.

... is a high availability web queue.

Do you use capped collections for this? Collected collections do not require compaction. Objects in a private collection cannot be modified, but this is usually not a problem for Queue objects.

Although this is not an ideal solution, it may solve your problem.

+5
source

Source: https://habr.com/ru/post/1391446/


All Articles