Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Forçar um membro do conjunto de réplicas autogerenciado a se tornar primário

Nesta página

  • Visão geral
  • Consideração
  • Procedimentos

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.

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.

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.

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"
}
]
}
  1. Em uma sessão do mongosh que está conectada ao primário, utilize a seguinte sequência de operações para tornar o m3.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 o m3.example.net para ter um valor members[n].priority maior do que as outras instâncias do mongod.

    A seguinte sequência de eventos ocorre:

    • m3.example.net e m2.example.net sincronizar com m1.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 de m3.example.net estiver muito atrasada. Nesse caso, m1.example.net espera até que m3.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ção priority.

  2. Opcionalmente, se m3.example.net estiver mais de 10 segundos atrás do optime de m1.example.net e se você não precisar ter uma designação primária dentro de 10 segundos, você pode forçar m1.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. Quando m3.example.net alcançar m1.example.net ele se tornará primário.

    Posteriormente, se você quiser tornar m1.example.net primário novamente enquanto espera que m3.example.net se atualize, emita o seguinte comando para fazer com que m1.example.net busque a eleição novamente:

    rs.freeze()

    O rs.freeze() fornece um wrapper em torno do comando replSetFreeze banco de dados.

Considere um conjunto de réplicas com os seguintes membros:

Para forçar um membro a se tornar principal, use o seguinte procedimento:

  1. No mongosh, execute rs.status() para garantir que seu conjunto de réplicas esteja sendo executado como esperado.

  2. Em uma sessão mongosh que esteja conectada à instância mongod em execução em mdb2.example.net, congele mdb2.example.net para que ele não tente se tornar primário por 120 segundos.

    rs.freeze(120)
  3. Em uma sessão mongosh que está conectada ao mongod em execução no mdb0.example.net, reduza essa instância em que o mongod 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.

Voltar

Manter membro