Descripción
replSetStepDownInstruye a la La primaria del conjunto de réplicas se convertirá en secundaria. Tras la desvinculación de la primaria, las secundarias elegibles celebran una elección para la primaria.
El comando no baja inmediatamente el principal. Si ningún
electablesecundario está al día con el primario, el primario espera hastasecondaryCatchUpPeriodSecs(por defecto 10 segundos) para que un secundario se ponga al día. Una vez que haya disponible un secundario elegible, el comando degrada al primario.Una vez replegado, el primario original se convierte en secundario y no es elegible para volver a ser primario durante el resto del tiempo especificado por
replSetStepDown: <seconds>.Para obtener una explicación detallada de la ejecución del comando, consulte Comportamiento.
Nota
El comando solo es válido en el primario y arroja un error si se ejecuta en un miembro que no sea primario.
Tip
En
mongosh, este comando también se puede ejecutar a través del método asistenters.stepDown().Los métodos asistente son convenientes para usuarios de
mongosh, pero es posible que no proporcionen el mismo nivel de información que los comandos de base de datos. En los casos en que no se necesite la conveniencia o se requieran campos de retorno adicionales, utiliza el comando de base de datos.El
replSetStepDownsolo puede ejecutarse en la base de datosadmin.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Importante
Este comando no es compatible con los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulta Comandos no compatibles.
Sintaxis
El comando tiene la siguiente sintaxis:
db.adminCommand( { replSetStepDown: <seconds>, secondaryCatchUpPeriodSecs: <seconds>, force: <true|false> } )
Campos de comandos
El comando toma los siguientes campos:
Campo | Tipo | Descripción |
|---|---|---|
| Número | El número de segundos para degradar el primario, durante el cual el nodo degradado no es elegible para convertirse en primario. Si se especifica un valor no numérico, la comando utiliza El período de reducción comienza desde el momento en que recibe el comando. El período de reducción debe ser |
| Número | opcional. El número de segundos que el Cuando se especifica, |
| booleano | Opcional. Un valor booleano que determina si el primario se reduce si no existe un secundario elegible y actualizado dentro del período de espera. Si Si Se establece por defecto en |
Comportamiento
Operaciones Concurrentes
El comando replSetStepDown intenta terminar las operaciones de usuario de larga duración que bloquean a la primaria para que no se retire, como la creación de índices, una operación de escritura o una tarea de map-reduce.
Disponibilidad de secundarios elegibles
El comando inicia entonces un periodo de actualización donde espera hasta secondaryCatchUpPeriodSeconds (10 segundos por defecto) para que un servidor secundario se actualice con el servidor principal. El servidor principal solo se desconecta si un servidor secundario se actualiza con el principal durante el periodo de actualización para evitar reversiones.
Si ningún secundario elegible cumple este criterio al final del período de espera, el primario no renuncia y el comando presenta errores. Puedes anular este comportamiento y emitir el comando con la opción force: true para degradar inmediatamente el primario.
Una vez que el primario baja exitosamente, ese nodo no podrá convertirse en el primario durante el resto del período replSetStepDown: <seconds>, que comenzó cuando el nodo recibió la orden.
Conexiones de cliente
replSetStepDown El comando no cierra todas las conexiones de cliente.
Escribe durante el paso a paso
Nota
Todas las escrituras en el primario fallan durante el período que comienza cuando se recibe el comando replSetStepDown hasta que se elige un nuevo primario o, si no hay secundarios elegibles, el primario original reanuda la operación normal.
Los guardados que estaban en curso cuando se ejecuta replSetStepDown son finalizados. Las transacciones en curso también fallan con TransientTransactionError y se pueden volver a intentar como un todo.
El período de tiempo en el que las escrituras fallan es máximo:
secondaryCatchUpPeriodSecs (10s por defecto) + (10s por electionTimeoutMillis defecto).
Entrega de elecciones
Cuando se desciende un primario usando rs.stepDown() o replSetStepDown sin configurar el campo force en true, el primario que se baja nomina un secundario elegible para convocar a una elección inmediatamente.
Ejemplos
Bajar con opciones predeterminadas
El siguiente ejemplo, ejecutado en el principal actual, intenta degradar al nodo durante 120 segundos.
La operación espera hasta un máximo de 10 segundos por defecto para que un secundario se ponga al día. Si no existe un secundario adecuado, el primario no se retira y el comando muestra errores.
Nota
Todas las escrituras en el primario fallan durante el período que comienza cuando se recibe el comando replSetStepDown hasta que se elige un nuevo primario o, si no hay secundarios elegibles, el primario original reanuda la operación normal.
Los guardados que estaban en curso cuando se ejecuta replSetStepDown son finalizados. Las transacciones en curso también fallan con TransientTransactionError y se pueden volver a intentar como un todo.
El período de tiempo en el que las escrituras fallan es máximo:
secondaryCatchUpPeriodSecs (10s por defecto) + (10s por electionTimeoutMillis defecto).
db.adminCommand( { replSetStepDown: 120 } )
Especificar el tiempo de espera para la actualización secundaria
El siguiente ejemplo, ejecutado en el primario actual, intenta bajar el nodo durante 120 segundos, esperando hasta 15 segundos para que un secundario elegible se ponga al día. Si no existe un secundario adecuado, el primario no se retira y el comando genera un error.
Nota
Todas las escrituras en el primario fallan durante el período que comienza cuando se recibe el comando replSetStepDown hasta que se elige un nuevo primario o, si no hay secundarios elegibles, el primario original reanuda la operación normal.
Los guardados que estaban en curso cuando se ejecuta replSetStepDown son finalizados. Las transacciones en curso también fallan con TransientTransactionError y se pueden volver a intentar como un todo.
El período de tiempo en el que las escrituras fallan es máximo:
secondaryCatchUpPeriodSecs (10s por defecto) + (10s por electionTimeoutMillis defecto).
db.adminCommand( { replSetStepDown: 120, secondaryCatchUpPeriodSecs: 15 } )
Especifica catch up secundario con Forzar bajada de nivel
El siguiente ejemplo, ejecutado en el principal actual, intenta reducir el miembro durante 120 segundos, esperando hasta 15 segundos a que un secundario elegible lo alcance. Gracias a la opción force: true, el principal reduce el miembro incluso si no existe un secundario adecuado.
Nota
Todas las escrituras en el primario fallan durante el período que comienza cuando se recibe el comando replSetStepDown hasta que se elige un nuevo primario o, si no hay secundarios elegibles, el primario original reanuda la operación normal.
Los guardados que estaban en curso cuando se ejecuta replSetStepDown son finalizados. Las transacciones en curso también fallan con TransientTransactionError y se pueden volver a intentar como un todo.
El período de tiempo en el que las escrituras fallan es máximo:
secondaryCatchUpPeriodSecs (10s por defecto) + (10s por electionTimeoutMillis defecto).
db.adminCommand( { replSetStepDown: 120, secondaryCatchUpPeriodSecs: 15, force: true } )