Forçar um membro do conjunto de réplicas autogerenciado a se tornar primário
Nesta página
Visão geral
Você pode forçar um membro do conjunto de réplicas a se tornar o primário atribuindo a ele um members[n].priority
valor mais alto do que qualquer outro membro do conjunto.
Opcionalmente, você também pode forçar um membro a nunca se tornar primário, definindo seu valor members[n].priority
como 0
, o que significa que o membro nunca poderá tentar ser eleição como primário. Para mais informações, consulte Priority 0 Replica Set Members.
Para mais informações sobre prioridades, consulte members[n].priority
.
Consideração
A maioria dos membros configurados de um conjunto de réplicas deve estar disponível para reconfigurar um conjunto ou eleger um primário. Consulte Eleições do conjunto de réplicas para obter mais informações.
Procedimentos
Observação
Quando você desiste de uma primário usando rs.stepDown()
ou replSetStepDown
sem definir o campo force
como true
, a primário reduzida indica um secundário elegível para convocar uma eleição imediatamente.
Forçar um membro a ser primário definindo sua prioridade como alta
Este procedimento pressupõe que seu primário atual seja m1.example.net
e que você gostaria de tornar o m3.example.net
principal. O procedimento também pressupõe que você tenha um conjunto de réplica de três membros com a configuração abaixo. Para mais informações sobre configurações, consulte Uso do conjunto de réplica.
Este procedimento pressupõe esta configuração:
{ "_id" : "rs", "version" : 7, "members" : [ { "_id" : 0, "host" : "m1.example.net:27017" }, { "_id" : 1, "host" : "m2.example.net:27017" }, { "_id" : 2, "host" : "m3.example.net:27017" } ] }
Em uma sessão do
mongosh
que está conectada ao primário, utilize a seguinte sequência de operações para tornar om3.example.net
a principal:cfg = rs.conf() cfg.members[0].priority = 0.5 cfg.members[1].priority = 0.5 cfg.members[2].priority = 1 rs.reconfig(cfg) A última declaração chama
rs.reconfig()
com o documento de configuração modificado para configurar om3.example.net
para ter um valormembers[n].priority
maior do que as outras instâncias domongod
.A seguinte sequência de eventos ocorre:
m3.example.net
em2.example.net
sincronizar comm1.example.net
(normalmente em 10 segundos).m1.example.net
vê que já não tem a maior prioridade e, na maioria dos casos, renuncia.m1.example.net
não desiste se a sincronização dem3.example.net
estiver muito atrasada. Nesse caso,m1.example.net
espera até quem3.example.net
esteja dentro de 10 segundos de seu optime e depois desce. Isso minimiza a quantidade de tempo sem nenhum primário following failover após o failover.O step down força uma eleição em que
m3.example.net
se torna primário com base em sua configuraçãopriority
.
Opcionalmente, se
m3.example.net
estiver mais de 10 segundos atrás do optime dem1.example.net
e se você não precisar ter uma designação primária dentro de 10 segundos, você pode forçarm1.example.net
a descer executando:db.adminCommand({replSetStepDown: 86400, force: 1}) Isso impede que o
m1.example.net
seja o principal por 86.400 segundos (24 horas), mesmo que não haja outro membro que possa se tornar o principal. Quandom3.example.net
alcançarm1.example.net
ele se tornará primário.Posteriormente, se você quiser tornar
m1.example.net
primário novamente enquanto espera quem3.example.net
se atualize, emita o seguinte comando para fazer com quem1.example.net
busque a eleição novamente:rs.freeze() O
rs.freeze()
fornece um wrapper em torno do comandoreplSetFreeze
banco de dados.
Forçar um membro a ser o principal usando comandos de banco de dados
Considere um conjunto de réplicas com os seguintes membros:
mdb0.example.net
- o principalatual.mdb1.example.net
- um secundário.mdb2.example.net
- um secundário.
Para forçar um membro a se tornar principal, use o seguinte procedimento:
No
mongosh
, executers.status()
para garantir que seu conjunto de réplicas esteja sendo executado como esperado.Em uma sessão
mongosh
que esteja conectada à instânciamongod
em execução emmdb2.example.net
, congelemdb2.example.net
para que ele não tente se tornar primário por 120 segundos.rs.freeze(120) Em uma sessão
mongosh
que está conectada aomongod
em execução nomdb0.example.net
, reduza essa instância em que omongod
não é elegível para se tornar primário por 120 segundos:rs.stepDown(120) mdb1.example.net
torna-se primário.Observação
Durante a transição, há uma janela curta onde o conjunto não tem um primary.
Para mais informações, considere os métodos rs.freeze()
e rs.stepDown()
que envolvem os comandos replSetFreeze
e replSetStepDown
.