Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save v0112358/203ebaf9f1ba303e919dfa085add04b6 to your computer and use it in GitHub Desktop.
Save v0112358/203ebaf9f1ba303e919dfa085add04b6 to your computer and use it in GitHub Desktop.
switchover primary-secondary MongoDB with minimal downtime

MongoDB with replica sets before switchover:

mongodb-01: {role: primary, priority: 9, hidden: 0}
mongodb-02: {role: secondary, priority: 1, hidden: 0}
mongodb-03: {role: secondary, priority: 1, hidden: 0}
mongodb-04: {role: secondary, priority: 7, hidden: 0}
mongodb-05: {role: secondary, priority: 1, hidden: 0}

MongoDB with replica sets after switchover:

mongodb-01: {role: secondary, priority: 1, hidden: 0}
mongodb-02: {role: secondary, priority: 1, hidden: 0}
mongodb-03: {role: secondary, priority: 1, hidden: 0}
mongodb-04: {role: primary, priority: 7, hidden: 0}
mongodb-05: {role: secondary, priority: 1, hidden: 0}

Steps to swithcover:

  • Run query on secondary server mongodb-02, mongodb-03, mongodb-05.
replica:SECONDARY> rs.freeze(60)
  • Run query on primary server.
replica:PRIMARY> cfg = rs.conf();
replica:PRIMARY> cfg.members[0].priority = 1;
replica:PRIMARY> cfg.settings.electionTimeoutMillis = 2000;
replica:PRIMARY> rs.reconfig(cfg);
  • Connect to new primary mongodb-04 and reset electionTimeoutMillis setting.
replica:PRIMARY> cfg = rs.conf();
replica:PRIMARY> cfg.settings.electionTimeoutMillis = 10000;
replica:PRIMARY> rs.reconfig(cfg);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment