Definición
rs.reconfigForPSASet( memberIndex, config, { options } )Nuevo en la versión 5.0.
Realice cambios de reconfiguración de forma segura en un conjunto de réplicas de árbitro principal-secundario (PSA) o en un conjunto de réplicas que esté cambiando a una arquitectura PSA. Este método solo debe usarse en uno de los siguientes casos:
Desea reconfigurar un secundario en un conjunto de réplicas existente de tres miembros con una arquitectura PSA para convertirse en un nodo de votación y portador de datos con un valor distinto de cero.
priority.Desea agregar un nuevo nodo con votación y almacenamiento de datos con una prioridad distinta de cero a un conjunto de réplicas existente de dos miembros que contiene un nodo con votación y almacenamiento de datos y un árbitro.
Advertencia
Si el secundario que está agregando está retrasado y el conjunto de réplicas resultante es una configuración PSA, el primer cambio de configuración modificará la cantidad de nodos que deben confirmar un cambio
"majority"con. En este caso, su punto de confirmación se retrasará hasta que el secundario se recupere.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á agregando o modificando. |
| Documento | Un documento que especifica la nueva configuración de un conjunto de réplicas. |
| booleano | Opcional ADVERTENCIA: No se recomienda ejecutar el método Especifique La reconfiguración forzada puede generar un comportamiento inesperado o no deseado, incluida la reversión de |
| entero | Opcional Especifica un límite de tiempo acumulado en milisegundos para procesar cada reconfiguración durante la |
Comportamiento
El método reconfigura su conjunto de réplicas en dos rs.reconfigForPSASet() pasos:
El método reconfigura su conjunto de réplicas para agregar o modificar una secundaria 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 añade el nuevo secundario a la
membersmatriz. En esta configuración, el nuevo secundario se añadememberIndex1en. ElmemberIndexcoincide con el índice de la matriz. Para obtener más información, consulte la configuración del conjunto 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") } }