Definición
replSetReconfigEl
replSetReconfigEl 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 laadminbase de datos del miembro del conjunto de réplicas principal.Tip
mongoshEn, este comando también se puede ejecutar a través del métodors.reconfig()auxiliar.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.
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( { replSetReconfig: <new_config_document>, force: <boolean>, maxTimeMS: <int> } )
Campos de comandos
El comando toma el siguiente campo opcional:
Campo | Descripción |
|---|---|
Por defecto es La reconfiguración forzada puede generar un comportamiento inesperado o no deseado, incluida la reversión de | |
Opcional. Especifica un límite de tiempo acumulado en milisegundos para |
También puede ejecutar con replSetReconfig rs.reconfig() el método del shell.
Comportamiento
Preocupación mundial por la escritura
A partir de MongoDB,5.0 debe configurar explícitamente la preocupación de escritura predeterminada global antes de intentar reconfigurar un conjunto de réplicas con una configuración que cambie la preocupación de escritura predeterminada implícita. Para configurar la preocupación de escritura predeterminada global, utilice el setDefaultRWConcern comando.
term Campo de configuración de réplica
El campo term lo establece el miembro principal del conjunto de réplicas. El replSetReconfig principal ignora el campo term si se establece explícitamente en la operación.
La reconfiguración no puede agregar ni eliminar más de un miembro con derecho a voto a la vez
replSetReconfig permite, por defecto, añadir o eliminar un 1 voting máximo de miembros a la vez. Por ejemplo, una nueva configuración puede realizar como máximo uno de los siguientes cambios en el membership clúster:
Agregar un nuevo miembro al conjunto de réplicas de votación.
Eliminar un miembro existente del conjunto de réplicas de votación.
Modificar para un miembro del conjunto de réplicas
votesexistente.
Para agregar o eliminar varios miembros con derecho a voto, ejecute una serie de operaciones para agregar o eliminar un miembro a la replSetReconfig vez.
Al forzar una reconfiguración, se instala inmediatamente la nueva configuración, incluso si se añaden o eliminan varios miembros con derecho a voto. Forzar la reconfiguración puede causar un comportamiento inesperado, como la reversión de "majority" operaciones de escritura confirmadas.
La reconfiguración espera hasta que la mayoría de los miembros instalen la configuración de réplica
replSetReconfig espera a que la mayoría de los miembros del conjunto de réplicas con derecho a voto instalen la nueva configuración de réplica antes de devolver la respuesta correcta. Un miembro con derecho a voto es cualquier miembro del conjunto members[n].votes de 1 réplicas donde es, 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) Espere a que se confirme la configuración actual antes de instalar la nueva configuración.
La configuración "actual" se refiere a la configuración de réplica que utiliza la configuración principal en el momento en que se
replSetReconfigemite.Una configuración se confirma 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 confirmadas en la configuración anterior también se han replicado a una mayoría en la configuración
"majority"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.
DelayedLos miembros o los miembros que sonlagging behindprincipales pueden aumentar el tiempo empleado en esta fase.Si la operación se emitió con un límite de maxTimeMS y lo supera durante la espera, se devuelve un error y se descarta la nueva configuración. El límite es acumulativo y no se restablece tras pasar a la siguiente fase.
- 2) Espere a que la mayoría de los miembros votantes tengan la nueva configuración para instalarla.
La "nueva" configuración se refiere a la configuración de réplica especificada
replSetReconfigen.El servidor principal instala y comienza a usar la nueva configuración de réplica antes de propagarla a los demás miembros del conjunto de réplicas. La operación solo espera a que la mayoría de los miembros con derecho a voto instalen la nueva configuración, sin necesidad de esperar a que se confirme.
Si la operación se emitió con un límite maxTimeMS y la operación excede el límite mientras espera, la operación devuelve un error pero continúa usando y propagando la nueva configuración.
Al forzar una reconfiguración, se instala inmediatamente la nueva configuración, independientemente del estado de confirmación de la configuración anterior. Forzar una reconfiguración puede causar un comportamiento inesperado, como la reversión de "majority" operaciones de escritura confirmadas.
Para comprobar el estado de compromiso de la configuración de réplica actual, emita replSetGetConfig con el parámetro commitStatus en el conjunto de réplicas principal.
Reconfiguración automática para nuevos miembros del conjunto de réplicas de votación
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
newlyAddedgenerarán un error incluso si se ejecutan con{ force: true }.Si un nodo existente tiene un
newlyAddedcampo, usar para cambiar la configuración no eliminarárs.reconfig()elnewlyAddedcampo. ElnewlyAddedcampo se añadirá a la configuración proporcionada por el usuario.replSetGetConfigeliminará losnewlyAddedcampos de su salida. Si desea ver losnewlyAddedcampos, puede consultarlocal.system.replsetdirectamente la colección.
Control de acceso
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.
Comportamiento de bloqueo
replSetReconfig obtiene un bloqueo mutuamente excluyente especial para evitar que se produzca más de una replSetReconfig operación al mismo tiempo.
Conjunto de réplicas de versiones mixtas
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.
Disponibilidad
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
termcampo para distinguir los cambios de configuración realizados en el nuevo primario de los cambios realizados en el primario anterior.Cuando el servidor principal se desactiva, ya no cierra todas las conexiones de cliente; sin embargo, se eliminan las escrituras en curso. Para más detalles, consulte Comportamiento.
El tiempo medio antes de que un clúster elija un nuevo servidor principal no suele superar los 12 segundos, asumiendo el valor predeterminado de.replica
configuration settings Esto incluye el tiempo necesario para marcar el servidor principal como no disponible y realizar una elección. Puede ajustar este tiempo modificando la settings.electionTimeoutMillis opción de configuración de replicación. Factores como la latencia de la red pueden prolongar el tiempo necesario para completar las elecciones del conjunto de réplicas, lo que a su vez afecta el tiempo que el clúster puede operar sin un servidor principal. Estos factores dependen de la arquitectura específica de su 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 impacto potencial en un clúster de producción, reconfigúrelo solo durante los períodos de mantenimiento programados.
{ force: true }
Advertencia
MongoDB no sincroniza la reconfiguración forzada de un conjunto de réplicas entre los conjuntos de réplicas de un clúster. Usar { force: true } puede provocar la reversión de las escrituras confirmadas mayoritariamente y un clúster fragmentado inconsistente. Tenga cuidado al usar esta opción.
Desconectar conexiones salientes después de eliminar un miembro
El uso de replSetReconfig para eliminar un miembro del conjunto de réplicas no elimina automáticamente las conexiones salientes abiertas desde otros miembros del conjunto de réplicas al miembro 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 eliminar inmediatamente todas las conexiones salientes del conjunto de réplicas al miembro eliminado, ejecute el comando administrativo en cada miembro restante en el conjunto de dropConnections réplicas:
db.adminCommand( { "dropConnections" : 1, "hostAndPort" : [ "<hostname>:<port>" ] } )
Reemplace <hostname> y <port> con los del miembro eliminado.
Prioridad y votos de los miembros
Los nodos con
prioritymayor que 0 no pueden tenervotesvotos.Los nodos sin derecho a voto (es decir,
voteses0) deben tenerpriorityde 0.
Información Adicional
Campos de configuración de set de réplicas, Configuración de set de réplicas autogestionado, rs.reconfig() y rs.conf().