Overview
Puedes forzar una miembro del conjunto de réplicas se vuelve primario al otorgarle un valor más alto members[n].priority valor que cualquier otro miembro del conjunto.
Opcionalmente, también puede forzar que un miembro nunca se convierta en principal estableciendo su members[n].priority valor 0 en, lo que significa que nunca podrá presentarse como principal. Para más información, consulte 0 Miembros del conjunto de réplicas con prioridad.
Para obtener más información sobre las prioridades,members[n].priority consulte.
Consideración
La mayoría de los miembros configurados de un conjunto de réplicas deben estar disponibles para que un conjunto pueda reconfigurarlo o elegir un conjunto principal.Consulte Elecciones de Conjuntos 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 declaración llama a con el documento de configuración modificado para
rs.reconfig()configurarm3.example.netpara que tenga un valor más altomembers[n].priorityque las otrasmongodinstancias.Se produce la siguiente secuencia de eventos:
m3.example.netym2.example.netse sincronizan conm1.example.net(normalmente en 10 segundos).m1.example.netDetecta que ya no tiene la máxima prioridad y, en la mayoría de los casos, se desconecta.m1.example.netno se desconecta sim3.example.netla sincronización de está muy retrasada. En ese caso,m1.example.netespera hasta quem3.example.netesté a 10 segundos de su tiempo óptimo y luego se desconecta. Esto minimiza el tiempo sin principal tras la conmutación por error.La reducción fuerza una elección en la que
m3.example.netse convierte en primaria en función de supriorityconfiguración.
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 10 segundos, puede forzar am1.example.neta retirarse ejecutando:db.adminCommand({replSetStepDown: 86400, force: 1}) Esto evita que
m1.example.netsea principal durante 86,400 segundos (24 horas), incluso si no hay otro miembro que pueda convertirse en principal. Cuandom3.example.netalcance am1.example.net, se convertirá en 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 proporciona un
rs.freeze()replSetFreezecontenedor alrededor del comando de base de datos.
Forzar a un miembro a ser principal mediante comandos de base de datos
Considere un conjunto de réplicas con los siguientes miembros:
mdb0.example.net- el actual primario.mdb1.example.net- una secundaria.mdb2.example.net- una secundaria .
Para obligar a un miembro a convertirse en principal utilice el siguiente procedimiento:
mongoshEn, ejecute para asegurarse de que su conjunto de réplicas se esté ejecutando como sers.status()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) En una sesión
mongoshque está conectada a lamongodque se ejecuta enmdb0.example.net, reduzca el nivel de esta instancia para que lamongodno sea elegible para convertirse en principal 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, considere los rs.freeze() métodos rs.stepDown() y replSetFreeze replSetStepDown que envuelven los comandos y.