Descripción
replSetStepDownInstruye a la primario del set de réplicas para convertirse en secundario. Después de que el primario renuncie, los secundarios elegibles llevan a cabo una elección para primario.
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 periodo de reducción de potencia comienza en el momento en que el |
| Número | opcional. El número de segundos que el Cuando se especifica, |
| booleano | opcional. Un booleano que determina si el primario cede el puesto 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 un periodo de actualización en el que espera hasta secondaryCatchUpPeriodSeconds, por defecto 10 segundos, para que un secundario se ponga al día con el primario. El primario solo realiza la bajada si un secundario está actualizado con el primario durante el período de actualización para prevenir los rollback.
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 del cliente
replSetStepDown El comando no cierra todas las conexiones de cliente.
Escribe durante la reducción
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 en el que fallan los guardados es, como máximo:
secondaryCatchUpPeriodSecs (10s por defecto) + electionTimeoutMillis (10s por 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
Reducir con opciones por defecto
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 en el que fallan los guardados es, como máximo:
secondaryCatchUpPeriodSecs (10s por defecto) + electionTimeoutMillis (10s por 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 en el que fallan los guardados es, como máximo:
secondaryCatchUpPeriodSecs (10s por defecto) + electionTimeoutMillis (10s por defecto).
db.adminCommand( { replSetStepDown: 120, secondaryCatchUpPeriodSecs: 15 } )
Especifica catch up secundario con Forzar bajada de nivel
El siguiente ejemplo, ejecutado en el primario actual, intenta bajar al nodo durante 120 segundos, esperando hasta 15 segundos para que un secundario elegible se ponga al día. Debido a la opción force: true, el primario baja 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 en el que fallan los guardados es, como máximo:
secondaryCatchUpPeriodSecs (10s por defecto) + electionTimeoutMillis (10s por defecto).
db.adminCommand( { replSetStepDown: 120, secondaryCatchUpPeriodSecs: 15, force: true } )