Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Replicación

replSetReconfig (comando de base de datos)

replSetReconfig

El comando administrativo modifica la configuración de un conjunto de réplicas existente. Puede usar este comando para agregar y eliminar miembros, así como para modificar las opciones establecidas en los miembros existentes. Debe ejecutar este comando en replSetReconfig la admin base de datos del primary set de réplicas.

Tip

En mongosh, este comando también se puede ejecutar a través del método asistente rs.reconfig().

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.

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.

El comando tiene la siguiente sintaxis:

db.adminCommand(
{
replSetReconfig: <new_config_document>,
force: <boolean>,
maxTimeMS: <int>
}
)

El comando tiene el siguiente campo opcional:

Campo
Descripción

fuerza

Por defecto es false. Especifica true para obligar a los miembros del set de réplicas disponibles a aceptar la nueva configuración.

La reconfiguración forzada puede provocar un comportamiento inesperado o indeseable, incluido el rollback de los "majority" commits confirmados.

opcional. Especifica un límite de tiempo acumulativo en milisegundos para procesar el replSetReconfig. Por defecto, replSetReconfig espera indefinidamente a que la configuración de la réplica se propague a la mayoría de los miembros del conjunto de réplicas. Establecer maxTimeMS puede resultar en que la operación falle antes de poder aplicar la nueva configuración. Consulta La reconfiguración espera hasta que la mayoría de los nodos instalen la configuración de la réplica para obtener más información.

También puedes ejecutar replSetReconfig con el método rs.reconfig() del shell.

A partir de MongoDB 5.0, se debe configurar explícitamente el nivel de confirmación de escritura (write concern) predeterminado global antes de intentar reconfigurar un set de réplicas con una configuración que cambiaría el nivel de confirmación de escritura (write concern) implícito por defecto. Para configurar la configuración global de nivel de confirmación de escritura (write concern) por defecto, use el comando setDefaultRWConcern.

El campo term lo define el miembro principal del set de réplicas. El primario ignora el campo term si se establece explícitamente en la operación replSetReconfig.

replSetReconfig por defecto permite agregar o remover no más de 1 voting nodos a la vez. Por ejemplo, una nueva configuración puede hacer como máximo uno de los siguientes cambios en el clúster membership:

  • Agregar un nuevo miembro al conjunto de réplicas de votación.

  • Removiendo a un miembro existente del conjunto de réplicas con derecho a voto.

  • Modificar para un miembro del conjunto de réplicas votes existente.

Para agregar o remover varios nodos con derecho a voto, emite una serie de replSetReconfig operaciones para agregar o remover un nodo a la vez.

Emitir una reconfiguración forzada instala inmediatamente la nueva configuración incluso si añade o elimina varios nodos con derecho a voto. La reconfiguración forzada puede causar un comportamiento inesperado, como el rollback de "majority" operaciones de escritura confirmadas.

replSetReconfig espera hasta que la mayoría de los miembros con derecho a voto del conjunto de réplicas implementen la nueva configuración de réplica antes de devolver el éxito. Un nodo votante es cualquier nodo de un set de réplicas donde members[n].votes es 1, incluidos los árbitros.

Los miembros del conjunto de réplicas propagan su configuración mediante latidos. Cuando un miembro detecta una configuración con valores superiores version a term y, instala la nueva configuración. El proceso de reconfiguración consta de dos fases de espera distintas:

1) Espera que la configuración actual esté confirmada antes de instalar la nueva configuración.

La configuración «actual» se refiere a la configuración de réplica que utiliza el primario en el momento en que se emite replSetReconfig.

Una configuración se compromete cuando:

  • La mayoría de los miembros del conjunto de réplicas con derecho a voto han instalado la configuración actualy

  • Todas las escrituras que fueron "majority" confirmadas en la configuración anterior también se han replicado a la mayoría en la configuración actual.

Normalmente, la configuración actual ya se ha instalado en la mayoría de los miembros del conjunto de réplicas con derecho a voto. Sin embargo, es posible que la mayoría de las escrituras confirmadas en la configuración anterior no se hayan confirmado en la configuración actual. Delayed Los miembros o los miembros que son lagging behind principales pueden aumentar el tiempo empleado en esta fase.

Si la operación se emitió con un límite de maxTimeMS y la operación excede el límite mientras espera, la operación devuelve un error y descarta la nueva configuración. El límite es acumulativo y no se restablece después de pasar a la siguiente fase.

2) Espera a que la mayoría de los nodos votantes en la nueva configuración instalen la nueva configuración.

La configuración "nueva" se refiere a la configuración de réplica especificada para replSetReconfig.

El primario instala y comienza a usar la nueva configuración de réplica antes de propagar la configuración a los miembros restantes del set de réplicas. La operación solo espera que la mayoría de los nodos con derecho a voto instalen la nueva configuración y no requiere esperar a que la nueva configuración sea comprometida.

Si a la operación se le asigna un límite maxTimeMS y supera el límite mientras espera, la operación devuelve un error pero continúa utilizando y propagando la nueva configuración.

Emitir una forzada reconfiguración instala inmediatamente la nueva configuración independientemente del estado de compromiso de la configuración anterior. La reconfiguración forzada puede causar un comportamiento inesperado, como el rollback de "majority" operaciones de escritura confirmadas.

Para verificar el estado del compromiso de la configuración actual del réplica, emite replSetGetConfig con el parámetro commitmentStatus en el set de réplicas primario.

A partir de MongoDB 5.0, un miembro secundario recién agregado no cuenta como miembro con derecho a voto y no puede ser elegido hasta que haya alcanzado el SECONDARY estado.

Al añadir un nuevo nodo con derecho a votación a un conjunto de réplicas, replSetReconfig añadirá internamente un newlyAdded campo a la configuración del nodo. Los nodos con el newlyAdded campo no se contabilizan para el número actual de nodos con derecho a votación. Al finalizar la sincronización inicial y alcanzar el estado,SECONDARY el newlyAdded campo se elimina automáticamente.

Nota

  • Las configuraciones que intenten agregar un campo llamado newlyAdded producirán un error, incluso si se ejecutan con { force: true }.

  • Si un nodo existente tiene un campo newlyAdded, usar rs.reconfig() para cambiar la configuración no eliminará el campo newlyAdded. Se añadirá el campo newlyAdded a la configuración proporcionada por el usuario.

  • replSetGetConfig eliminará cualquier campo de newlyAdded de su salida. Si desea ver cualquier campo de newlyAdded, puede query directamente la local.system.replset colección.

Para ejecutar el comando en implementaciones que aplican el control de acceso, el usuario debe tener el privilegio replSetConfigure sobre el recurso del clúster. El rol de clusterManager funcionalidad incorporada, disponible en la base de datos admin, proporciona los privilegios requeridos para este comando.

replSetReconfig obtiene un bloqueo exclusivo para prevenir que más de una replSetReconfig operación ocurran al mismo tiempo.

Advertencia

Evitar reconfigurar sets de réplicas que contengan miembros de diferentes versiones de MongoDB, ya que las reglas de validación pueden diferir entre versiones de MongoDB.

La mayoría de los miembros del conjunto deben estar operativos para que los cambios se propaguen correctamente.

replSetReconfig puede provocar la renuncia de los candidatos a la primaria actual en algunas situaciones. La renuncia a la primaria desencadena una elecciónpara elegir una nueva primaria:

  • Cuando se aumenta el nuevo primario, se incrementa el term campo para distinguir los cambios de configuración realizados en el nuevo primario de los cambios realizados en el primario anterior.

  • Al descender, el primario ya no cierra todas las conexiones de los clientes; sin embargo, los guardados que estaban en curso son finalizados. Para más detalles, consulta Comportamiento.

El tiempo medio antes de que un clúster elija un nuevo primario no debe exceder normalmente los 12 segundos, suponiendo las replica configuration settings por defecto. Esto incluye el tiempo necesario para marcar el primario como no disponible y para convocar y completar una elección. Puedes ajustar este período de tiempo modificando la opción de configuración de replicación settings.electionTimeoutMillis. Factores como la latencia de red pueden prolongar el tiempo necesario para completar las elecciones del set de réplicas, lo que a su vez afecta la cantidad de tiempo que su clúster puede operar sin un primario. Estos factores dependen de su arquitectura particular de clúster.

Durante el proceso electoral, el clúster no puede aceptar operaciones de escritura hasta que elija la nueva primaria.

La lógica de conexión de la aplicación debe incluir tolerancia para las conmutaciones por error automáticas y las elecciones posteriores. Los controladores de MongoDB pueden detectar la pérdida del nodo principal y reintentar automáticamente ciertas operaciones de guardado una sola vez, proporcionando un manejo adicional incorporado para conmutaciones por error automáticas y elecciones:

Los controladores compatibles habilitan las Escrituras reintentables por defecto

Para reducir aún más el potencial impacto en un clúster de producción, solo reconfigura durante los períodos de mantenimiento programados.

Advertencia

MongoDB no sincroniza una reconfiguración forzada del set de réplicas entre los sets de réplicas de un clúster. El uso de { force: true } puede llevar a un rollback de escrituras comprometidas por la mayoría y a un clúster inconsistente. Procura tener precaución al usar esta opción.

Al utilizar replSetReconfig para remover un nodo del conjunto de réplicas, no se descartan automáticamente las conexiones salientes abiertas de otros nodos del conjunto de réplicas hacia el nodo eliminado.

De forma predeterminada, los miembros del conjunto de réplicas esperan 5 minutos antes de interrumpir las conexiones con el miembro eliminado. En conjuntos de réplicas fragmentados, puede modificar este tiempo de espera mediante el ShardingTaskExecutorPoolHostTimeoutMS parámetro de servidor.

Para descartar inmediatamente todas las conexiones salientes del set de réplicas al nodo eliminado, ejecutar el comando administrativo dropConnections en cada nodo restante del set de réplicas:

db.adminCommand(
{
"dropConnections" : 1,
"hostAndPort" : [
"<hostname>:<port>"
]
}
)

Reemplaza <hostname> y <port> con los del nodo eliminado.

Campos de configuración de set de réplicas, Configuración de set de réplicas autogestionado, rs.reconfig() y rs.conf().

Volver

replSetMaintenance

En esta página