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
mongoshsessão conectada ao primário, use a seguinte sequência de operações para tornarm3.example.neto primário: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.netpara ter um valormembers[n].prioritymaior do que as outras instâncias domongod.A seguinte sequência de eventos ocorre:
m3.example.netem2.example.netsincronizar comm1.example.net(normalmente em 10 segundos).m1.example.netvê que já não tem a maior prioridade e, na maioria dos casos, renuncia.m1.example.netnão desiste se a sincronização dem3.example.netestiver muito atrasada. Nesse caso,m1.example.netespera até quem3.example.netesteja 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.netse torna primário com base em sua configuraçãopriority.
Opcionalmente, se
m3.example.netestiver mais de 10 segundos atrás do optime dem1.example.nete se você não precisar ter uma designação primária dentro de 10 segundos, você pode forçarm1.example.neta descer executando:db.adminCommand({replSetStepDown: 86400, force: 1}) Isso impede que o
m1.example.netseja o principal por 86.400 segundos (24 horas), mesmo que não haja outro membro que possa se tornar o principal. Quandom3.example.netalcançarm1.example.netele se tornará primário.Posteriormente, se você quiser tornar
m1.example.netprimário novamente enquanto espera quem3.example.netse atualize, emita o seguinte comando para fazer com quem1.example.netbusque a eleição novamente:rs.freeze() O
rs.freeze()fornece um wrapper em torno do comandoreplSetFreezebanco 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
mongoshque esteja conectada à instânciamongodem execução emmdb2.example.net, congelemdb2.example.netpara que ele não tente se tornar primário por 120 segundos.rs.freeze(120) Em uma sessão
mongoshque está conectada aomongodem execução nomdb0.example.net, reduza essa instância em que omongodnão é elegível para se tornar primário por 120 segundos:rs.stepDown(120) mdb1.example.nettorna-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.