Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
replSetStepDown
Nesta página
Descrição
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 auxiliarrs.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 dadosadmin
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:CampoTipoDescriçãoreplSetStepDown
númeroO 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 quesecondaryCatchUpPeriodSecs
.secondaryCatchUpPeriodSecs
númeroOpcional. 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 de10
segundos ou, seforce: true
,0
segundos.force
boleanoOpcional. 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
.
Comportamento
Operações simultâneas
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.
Disponibilidade de secundários qualificados
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.
Conexões de clientes
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.
Grava durante o recuo
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).
Transferência de eleiçã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.
Exemplos
Reduza as opções padrão
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 } )
Especifique o tempo de espera para a recuperação secundária
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 } )
Especifique a recuperação secundária com redução de força
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 } )