Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

replSetStepDown

Nesta página

  • Descrição
  • Comportamento
  • Exemplos
replSetStepDown

Instrui o primário do conjunto de réplicas a se tornar um secundário. Depois que o primário recuar, os secundários qualificados realizarão uma eleição para primário.

O comando não diminui imediatamente o primary. Se nenhum secundário electable estiver atualizado com o primário, o primário aguardará até secondaryCatchUpPeriodSecs (por padrão, 10 segundos) para que um secundário se atualize. Uma vez que um secundário elegível esteja disponível, o comando retira o primário.

Uma vez recuado, o primário original torna-se secundário e não se qualifica para se tornar primário novamente pelo restante do tempo especificado por replSetStepDown: <seconds>.

Para uma explicação detalhada da execução do comando, consulteComportamento do .

Observação

O comando só é válido contra o primário e gera um erro se for executado em um membro não primário.

Dica

Em mongosh, esse comando também pode ser executado por meio do método auxiliar rs.stepDown() .

Os métodos auxiliares são convenientes para os usuários mongosh , mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a conveniência não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.

O replSetStepDown só pode ser executado no banco de dados admin e tem o seguinte formulário de protótipo:

db.adminCommand( {
replSetStepDown: <seconds>,
secondaryCatchUpPeriodSecs: <seconds>,
force: <true|false>
} )

replSetStepDown usa os seguintes campos como argumentos:

Campo
Tipo
Descrição
replSetStepDown
número

O número de segundos para deixar o primário, período durante o qual o nó renunciante não está qualificado para se tornar primário. Se você especificar um valor não numérico, o comando usará 60 segundos.

O período de recuo começa a partir do momento em que o mongod recebe o comando. O período de recuo deve ser maior que secondaryCatchUpPeriodSecs.

secondaryCatchUpPeriodSecs
número

Opcional. O número de segundos que o mongod aguardará até que um secundário elegível alcance o primário.

Quando especificado, secondaryCatchUpPeriodSecs substitui o tempo de espera padrão de 10 segundos ou, se force: true, 0 segundos.

force
boleano

Opcional. Um booleano que determina se o primário será desativado se não houver nenhum secundário elegível e atualizado dentro do período de espera.

Se true, o primário desiste mesmo que não exista nenhum membro secundário adequado; isso pode levar a reversões se um secundário com atraso de replicação se tornar o novo primário.

Se false, o primário não será desativado se não existir nenhum membro secundário adequado e o comando retornar um erro.

Padrão é false.

O comando replSetStepDown tenta encerrar operações de usuário de longa execução que bloqueiam a saída do primário, como uma construção de índice, uma operação de gravação ou um trabalho de redução de mapa.

Em seguida, o comando inicia um período de recuperação em que aguarda até secondaryCatchUpPeriodSeconds, por padrão 10 segundos, para que um secundário fique atualizado com o primário. O primary só é desativado se um secundário estiver atualizado com o primary durante o período de recuperação para evitar rollbacks.

Se nenhum secundário elegível atender a esse critério até o final do período de espera, o primário não será rebaixado e o comando apresentará erros. Você pode substituir esse comportamento e emitir com o comando com a opção force: true para descer imediatamente o primary.

Uma vez que o primário se retira com sucesso, esse nó não pode se tornar o primário pelo restante do período replSetStepDown: <seconds> , que começou quando o nó recebeu o comando.

A partir do MongoDB 4.2, o comando replSetStepDown não fecha mais todas as conexões do cliente.

No MongoDB 4.0 e versões anteriores, replSetStepDown o comando fecha todas as conexões do cliente durante a etapa inferior. Como a desconexão inclui a conexão usada para executar o comando, você não pode recuperar o status de retorno do comando se o comando for concluído com êxito. Você só pode recuperar o status de retorno do comando em caso de erro. Ao executar o 4.0 e comandos anteriores em um script, o script deve levar em conta esse comportamento.

Observação

Todas as gravações para o primário falham durante o período que começa quando o comando replSetStepDown é recebido até que uma nova primária seja eleita, ou se não houver secundários elegíveis, a primary original retoma a operação normal.

As gravações que estavam em andamento quando replSetStepDown é executado são eliminadas. As transações em andamento também falham com "TransientTransactionError" e podem ser repetidas como um todo.

O período de tempo em que as gravações falham é no máximo:

secondaryCatchUpPeriodSecs (10s por padrão) + electionTimeoutMillis (10s por padrão).

Quando você rebaixa uma primária usando rs.stepDown() ou replSetStepDown sem definir o campo force como true, a primária rebaixada indica um secundário elegível para convocar uma eleição imediatamente.

O exemplo a seguir, executado no primário atual, tenta reduzir o membro por 120 segundos.

A operação aguarda até os 10 segundos padrão para que um secundário se atualize. Se não existir nenhum secundário adequado, o primário não será desativado e o comando apresentará erro.

Observação

Todas as gravações para o primário falham durante o período que começa quando o comando replSetStepDown é recebido até que uma nova primária seja eleita, ou se não houver secundários elegíveis, a primary original retoma a operação normal.

As gravações que estavam em andamento quando replSetStepDown é executado são eliminadas. As transações em andamento também falham com "TransientTransactionError" e podem ser repetidas como um todo.

O período de tempo em que as gravações falham é no máximo:

secondaryCatchUpPeriodSecs (10s por padrão) + electionTimeoutMillis (10s por padrão).

db.adminCommand( { replSetStepDown: 120 } )

O exemplo a seguir, executado no primário atual, tenta reduzir o membro por 120 segundos, aguardando até 15 segundos para que um secundário elegível se atualize. Se não existir nenhum secundário adequado, o primário não será desativado e o comando apresentará erro.

Observação

Todas as gravações para o primário falham durante o período que começa quando o comando replSetStepDown é recebido até que uma nova primária seja eleita, ou se não houver secundários elegíveis, a primary original retoma a operação normal.

As gravações que estavam em andamento quando replSetStepDown é executado são eliminadas. As transações em andamento também falham com "TransientTransactionError" e podem ser repetidas como um todo.

O período de tempo em que as gravações falham é no máximo:

secondaryCatchUpPeriodSecs (10s por padrão) + electionTimeoutMillis (10s por padrão).

db.adminCommand( { replSetStepDown: 120, secondaryCatchUpPeriodSecs: 15 } )

O exemplo a seguir, executado no primário atual, tenta reduzir o membro por 120 segundos, aguardando até 15 segundos para que um secundário elegível se atualize. Devido à opção force: true , o primário desiste mesmo que não exista um secundário adequado.

Observação

Todas as gravações para o primário falham durante o período que começa quando o comando replSetStepDown é recebido até que uma nova primária seja eleita, ou se não houver secundários elegíveis, a primary original retoma a operação normal.

As gravações que estavam em andamento quando replSetStepDown é executado são eliminadas. As transações em andamento também falham com "TransientTransactionError" e podem ser repetidas como um todo.

O período de tempo em que as gravações falham é no máximo:

secondaryCatchUpPeriodSecs (10s por padrão) + electionTimeoutMillis (10s por padrão).

db.adminCommand( { replSetStepDown: 120, secondaryCatchUpPeriodSecs: 15, force: true } )

Dica

Veja também:

← replSetResizeOplog