Overview
Puedes forzar un set de réplicas miembro para convertirse en primario dándole un 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.
Forzar a un nodo a ser el primario al establecer su alta prioridad
Este procedimiento asume que tu principal actual es m1.example.net y que te gustaría, en cambio, establecer m3.example.net como principal. El procedimiento también asume que tienes un set de réplicas de tres nodos con la siguiente configuración. Para obtener más información sobre las configuraciones, consulta Uso de la configuración de sets de réplicas.
Este procedimiento supone 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 conectada al principal, utiliza la siguiente secuencia de operaciones para hacer quem3.example.netsea el 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.netserá sincronizado 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 por detrás del optime dem1.example.net, y si no necesita tener un primario designado en un plazo de 10 segundos, se puede forzar am1.example.neta retirarse ejecutando:db.adminCommand({replSetStepDown: 86400, force: 1}) Esto impide que
m1.example.netsea primario durante 86 400 segundos (24 horas), incluso si no hay ningún otro nodo que pueda convertirse en primario. Cuandom3.example.netalcance am1.example.net, se convertirá en el primario.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 forzar a un nodo a convertirse en primario, se debe seguir este 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 lamongodinstancia ejecutándose enmdb2.example.net, congelarmdb2.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 convierte en 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.