Definición
rs.reconfigForPSASet( memberIndex, config, { options } )Nuevo en la versión 5.0.
Effectuez en toute sécurité certains changements de reconfiguration sur un set de réplicas primario-secundario-árbitro (PSA) ou sur un set de réplicas qui passe à une architecture PSA. Vous ne devez utiliser cette méthode que dans l’un des cas suivants :
Se desea reconfigurar un secundario en un set de réplicas existente de tres nodos con una arquitectura PSA para que se convierta en un nodo votante y portador de datos con un valor distinto de cero.
priority.Desea agregar un nuevo nodo que pueda votar y que contenga datos, con una prioridad distinta de cero, a un existente set de réplicas de dos miembros que contiene un nodo de datos con capacidad de voto y un árbitro.
Advertencia
Si el secundario que estás agregando está retrasado y el set de réplicas resultante tiene una configuración PSA, el primer cambio de configuración modificará el número de nodos necesarios para confirmar un cambio con
"majority". En este caso, el punto de confirmación se retrasará hasta que el secundario haya alcanzado al primario.Para obtener detalles sobre el comportamiento de este método, consulte Comportamiento.
Compatibilidad
Este método 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.
Sintaxis
El método rs.reconfigForPSASet() tiene la siguiente sintaxis:
rs.reconfigForPSASet( memberIndex: <num>, config: <configuration>, { "force" : <boolean>, "maxTimeMS" : <int> } )
Parameter | Tipo | Descripción |
|---|---|---|
| entero | El índice del secundario que se está añadiendo o modificando. |
| Documento | Un documento que especifica la nueva configuración de un conjunto de réplicas. |
| booleano | Opcional ADVERTENCIA: Ejecutar el método Especifica La reconfiguración forzada puede provocar un comportamiento inesperado o indeseable, incluido el rollback de los |
| entero | Opcional Especifica un límite de tiempo acumulativo en milisegundos para el procesamiento de cada reconfiguración durante la operación |
Comportamiento
El método rs.reconfigForPSASet() reconfigura su set de réplicas en dos pasos:
El método vuelve a configurar tu set de réplicas para agregar o modificar un secundario con
{ votes: 1, priority: 0 }.Una vez que el secundario añadido o modificado se haya puesto al día con todos los guardados confirmados, el método reconfigura el secundario para que tenga el
priorityespecificado en el comandors.reconfigForPSASet()({ votes: 1, priority: <num> }).
El enfoque de dos pasos evita la posibilidad de revertir escrituras comprometidas en el caso de una conmutación por error al nuevo secundario antes de que este tenga todas las escrituras comprometidas de la configuración anterior.
Ejemplo
Un set de réplicas llamado rs0 tiene la siguiente configuración:
{ "_id" : "rs0", "version" : 1, "term": 1, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : {}, "secondaryDelaySecs" : Long("0"), "votes" : 1 }, { "_id" : 2, "host" : "mongodb1.example.net:27017", "arbiterOnly" : true, "buildIndexes" : true, "hidden" : false, "priority" : 0, "tags" : {}, "secondaryDelaySecs" : Long("0"), "votes" : 1 } ], "protocolVersion" : Long("1"), "writeConcernMajorityJournalDefault": true, "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : 2000, "getLastErrorModes" : {}, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("60e6f83923193faa336889d2") } }
La siguiente secuencia de operaciones añade un nuevo secundario al conjunto de réplicas. Las operaciones se emiten en el shell mongosh mientras se está conectado a la primaria.
cfg = rs.conf(); cfg["members"] = [ { "_id" : 0, "host" : "mongodb0.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : {}, "secondaryDelaySecs" : Long("0"), "votes" : 1 }, { "_id" : 1, "host" : "mongodb1.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 2, "tags" : {}, "secondaryDelaySecs" : Long("0"), "votes" : 1 }, { "_id" : 2, "host" : "mongodb2.example.net:27017", "arbiterOnly" : true, "buildIndexes" : true, "hidden" : false, "priority" : 0, "tags" : {}, "secondaryDelaySecs" : Long("0"), "votes" : 1 } ] rs.reconfigForPSASet(1, cfg);
La primera instrucción utiliza el método
rs.conf()para recuperar un documento que contiene la configuración actual del set de réplicas y almacena el documento en la variable localcfg.La segunda instrucción agrega el nuevo secundario al arreglo
members. En esta configuración, el nuevo secundario se añade a lasmemberIndex1. ElmemberIndexes el mismo que el índice de arreglo. Para ajustes adicionales, consulta ajustes de configuración del set de réplicas.La última instrucción llama al
rs.reconfigForPSASet()métodomemberIndex1cfgcon, y modificado.memberIndexrepresenta la posición del nuevo miembro en lamembersmatriz. Tras una reconfiguración exitosa, la configuración del conjunto de réplicas se asemeja a la siguiente:{ "_id" : "rs0", "version" : 1, "term": 1, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : {}, "secondaryDelaySecs" : Long("0"), "votes" : 1 }, { "_id" : 1, "host" : "mongodb1.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 2, "tags" : {}, "secondaryDelaySecs" : Long("0"), "votes" : 1 }, { "_id" : 2, "host" : "mongodb2.example.net:27017", "arbiterOnly" : true, "buildIndexes" : true, "hidden" : false, "priority" : 0, "tags" : {}, "secondaryDelaySecs" : Long("0"), "votes" : 1 } ], "protocolVersion" : Long("1"), "writeConcernMajorityJournalDefault": true, "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : 2000, "getLastErrorModes" : {}, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("60e6f83923193faa336889d2") } }