Overview
Puedes forzar un miembro del conjunto de réplicas se vuelve primario al otorgarle un valor más alto members[n].priority valor que cualquier otro nodo del conjunto.
Opcionalmente, también puedes forzar a un nodo a que nunca se convierta en primario configurando su valor members[n].priority a 0, lo que significa que el nodo nunca podrá buscar elección como primario. Para obtener más información, consulta Miembros del set de réplicas de Prioridad 0.
Para obtener más información sobre prioridades, consulte members[n].priority.
Consideración
La mayoría de los nodos configurados de un conjunto de réplicas debe estar disponible para que un conjunto pueda volver a configurarse o escoger un primario. Consulte Elecciones de sets de réplicas para obtener más información.
Procedimientos
Nota
Cuando se desciende un primario usando rs.stepDown() o replSetStepDown sin establecer el campo force a true, el primario descendido nomina a un secundario elegible para llamar a una elección inmediatamente.
Obligar a un miembro a ser primario estableciendo su prioridad alta
Este procedimiento presupone que su servidor principal actual es m1.example.net y que desea convertir m3.example.net en el principal. También presupone que tiene un conjunto de réplicas de tres miembros con la configuración que se indica a continuación. Para obtener más información sobre las configuraciones, consulte Uso de la configuración del conjunto de réplicas.
Este procedimiento asume esta configuración:
{ "_id" : "rs", "version" : 7, "members" : [ { "_id" : 0, "host" : "m1.example.net:27017" }, { "_id" : 1, "host" : "m2.example.net:27017" }, { "_id" : 2, "host" : "m3.example.net:27017" } ] }
En un
mongoshsesión que está conectada a la principal, utilice la siguiente secuencia de operaciones para hacer que seam3.example.netla principal:cfg = rs.conf() cfg.members[0].priority = 0.5 cfg.members[1].priority = 0.5 cfg.members[2].priority = 1 rs.reconfig(cfg) La última instrucción llama a
rs.reconfig()con el documento de configuración modificado para configurarm3.example.netde modo que tenga un valormembers[n].prioritysuperior al de otras instanciasmongod.Se produce la siguiente secuencia de eventos:
m3.example.netym2.example.netse sincronizan conm1.example.net(normalmente en 10 segundos).m1.example.netve que ya no tiene la máxima prioridad y, en la mayoría de los casos, renuncia.m1.example.netno renunciará si la sincronización dem3.example.netestá muy atrasada. En ese caso,m1.example.netespera hasta quem3.example.netesté a menos de 10 segundos de su optime y luego renuncia. Esto minimiza el tiempo sin primario tras una conmutación por error.El retiro forzado desencadena una elección en la que
m3.example.netse convierte en primario con base en su configuración depriority.
Opcionalmente, si
m3.example.netestá más de 10 segundos detrás del tiempo óptimo dem1.example.net, y si no necesita tener un primario designado dentro de los 10 segundos, puede forzar am1.example.neta retirarse ejecutando:db.adminCommand({replSetStepDown: 86400, force: 1}) Esto evita que
m1.example.netsea el principal durante 86.400 segundos (24 horas), incluso si no hay ningún otro miembro que pueda serlo. Cuandom3.example.netalcance am1.example.net, se convertirá en el principal.Si más adelante desea que
m1.example.netvuelva a ser primario mientras espera quem3.example.netlo alcance, ejecute el siguiente comando para quem1.example.netbusque nuevamente la elección:rs.freeze() El
rs.freeze()proporciona un contenedor alrededor del comando de base de datosreplSetFreeze.
Forzar que un nodo sea primario utilizando comandos de base de datos
Considera un set de réplicas con los siguientes miembros:
mdb0.example.net- el actual primario.mdb1.example.net- a secundario.mdb2.example.net- un secundario.
Para obligar a un miembro a convertirse en principal utilice el siguiente procedimiento:
En
mongosh, ejecutars.status()para asegurarte de que tu set de réplicas esté funcionando como se esperaba.En una sesión
mongoshque está conectada a la instanciamongodque se ejecuta enmdb2.example.net, congelemdb2.example.netpara que no intente convertirse en principal durante 120 segundos.rs.freeze(120) Inicia sesión en la
mongoshconectada almongodque se ejecuta enmdb0.example.net, baje esta instancia para quemongodno sea elegible para convertirse en primario durante 120 segundos.rs.stepDown(120) mdb1.example.netse vuelve primario.Nota
Durante la transición, hay una breve ventana en la que el conjunto no tiene un primario.
Para obtener más información, consulta los métodos rs.freeze() y rs.stepDown() que envuelven los comandos replSetFreeze y replSetStepDown.