Overview
En un conjunto de réplicas de tres miembros con una arquitectura de árbitro primario-secundario (PSA) o un clúster fragmentado con fragmentos PSA de tres miembros, un nodo portador de datos que esté inactivo o retrasado puede generar problemas de rendimiento.
Si uno de los nodos que contienen datos se desconecta, el otro nodo se convierte en el primario. Guarda con w:1 siguen teniendo éxito en este estado, pero las grabaciones con nivel de confirmación de escritura (write concern) "majority" no pueden tener éxito y el commit punto empieza a retrasarse. Si tu set de réplicas PSA contiene un secundario retrasado y tu set de réplicas requiere dos nodos para que la mayoría confirme un cambio, tu punto de confirmación también se retrasa.
Con un punto de confirmación retrasado, dos cosas pueden afectar el rendimiento de su clúster:
El motor de almacenamiento guarda en disco todos los cambios posteriores al punto de confirmación para conservar un historial duradero. La E/S adicional derivada de estas escrituras tiende a aumentar con el tiempo. Esto puede afectar considerablemente el rendimiento de escritura y aumentar la presión de la caché.
MongoDB permite que el oplog crezca más allá de su límite de tamaño configurado para evitar
majority commit pointeliminar.
Para reducir la presión de la caché y el aumento del tráfico de escritura, configure votes: 0 y priority: 0 para el nodo que está no disponible o con retraso. Para las operaciones de escritura emitidas con "mayoría", solo se consideran los nodos con derecho a voto para determinar el número de nodos necesarios para realizar una confirmación por mayoría. Configurar la configuración del nodo en votes: 0 reduce el número de nodos necesarios para comprometer una escritura con nivel de confirmación de escritura (write concern) "majority" de dos a uno y permite que estas escrituras tengan éxito.
Una vez que se haya alcanzado el secundario, puedes usar el método rs.reconfigForPSASet() para reponer votes a 1.
Nota
En versiones anteriores de MongoDB, enableMajorityReadConcern y --enableMajorityReadConcern se podían configurar para permitir la desactivación del nivel de consistencia de lectura por defecto "majority" que tenía un efecto similar.
Procedimiento
Para reducir la presión de caché y el aumento del tráfico de escritura en una implementación con una arquitectura primaria-secundaria-árbitro de tres miembros (PSA), configure { votes: 0, priority: 0 } para el secundario que esté no disponible o retrasado:
cfg = rs.conf(); cfg["members"][<array_index>]["votes"] = 0; cfg["members"][<array_index>]["priority"] = 0; rs.reconfig(cfg);
Si desea cambiar la configuración del secundario más tarde, utilice el rs.reconfigForPSASet() método.