On this page本页内容
You can force a replica set member to become primary by giving it a higher members[n].priority
value than any other member in the set.
Optionally, you also can force a member never to become primary by setting its members[n].priority
value to 0
, which means the member can never seek election as primary. For more information, see Priority 0 Replica Set Members.
For more information on priorities, see members[n].priority
.
A majority of the configured members of a replica set must be available for a set to reconfigure a set or elect a primary. See Replica Set Elections for more information.
Note
Changed in version 4.0.2:If the parameter enableElectionHandoff
is true (default), when a primary steps down from rs.stepDown()
(or the replSetStepDown
command without the force:
true
), the stepped-down primary nominates an eligible secondary to call an election immediately. Otherwise, secondaries can wait up to settings.electionTimeoutMillis
before calling an election. The stepped down primary does not wait for the effects of the handoff. For more information, see enableElectionHandoff
.
This procedure assumes your current primary is m1.example.net
and that you’d like to instead make m3.example.net
primary. The procedure also assumes you have a three-member replica set with the configuration below. For more information on configurations, see Replica Set Configuration Use.
This procedure assumes this configuration:
mongo
shell connected to the primary, use the following sequence of operations to make m3.example.net
the primary:
The last statement calls rs.reconfig()
with the modified configuration document to configure m3.example.net
to have a higher members[n].priority
value than the other mongod
instances.
The following sequence of events occur:
m3.example.net
and m2.example.net
sync with m1.example.net
(typically within 10 seconds).m1.example.net
sees that it no longer has highest priority and, in most cases, steps down. m1.example.net
does not step down if m3.example.net
’s sync is far behind. In that case, m1.example.net
waits until m3.example.net
is within 10 seconds of its optime and then steps down. This minimizes the amount of time with no primary following failover.m3.example.net
becomes primary based on its priority
setting.m3.example.net
is more than 10 seconds behind m1.example.net
’s optime, and if you don’t need to have a primary designated within 10 seconds, you can force m1.example.net
to step down by running:
This prevents m1.example.net
from being primary for 86,400 seconds (24 hours), even if there is no other member that can become primary. When m3.example.net
catches up with m1.example.net
it will become primary.
If you later want to make m1.example.net
primary again while it waits for m3.example.net
to catch up, issue the following command to make m1.example.net
seek election again:
The rs.freeze()
provides a wrapper around the replSetFreeze
database command.
Consider a replica set with the following members:
mdb0.example.net
- the current primary.mdb1.example.net
- a secondary.mdb2.example.net
- a secondary .To force a member to become primary use the following procedure:
mongo
shell, run rs.status()
to ensure your replica set is running as expected.mongo
shell connected to the mongod
instance running on mdb2.example.net
, freeze mdb2.example.net
so that it does not attempt to become primary for 120 seconds.
mongo
shell connected the mongod
running on mdb0.example.net
, step down this instance that the mongod
is not eligible to become primary for 120 seconds:
mdb1.example.net
becomes primary.
Note
During the transition, there is a short window where the set does not have a primary.
For more information, consider the rs.freeze()
and rs.stepDown()
methods that wrap the replSetFreeze
and replSetStepDown
commands.