![MongoDB cambia frecuentemente de primarios](https://rvso.com/image/658725/MongoDB%20cambia%20frecuentemente%20de%20primarios.png)
Estamos ejecutando un conjunto de réplicas de Mongo 2.6 con 3 miembros: primario, secundario y árbitro. Casi todos los días, nuestro MongoDB cambia qué servidor es el principal y esto provoca que se interrumpan todas las conexiones a esa base de datos. Estaría perfectamente bien si estuviera haciendo esto porque uno de los servidores realmente estaba inactivo, el desafío es que en cada caso parece como si el servidor "inactivo" no estuviera realmente inactivo. Estuvo arriba todo el tiempo.
Esto es lo que sabemos:
- El
mongod
proceso en los 3 servidores no se reinició ni se cayó. - Los servidores siguieron informando a New Relic todo el tiempo.
- En el registro de mongo vemos frecuentes fallos en los latidos del corazón.
- Los servidores no están realmente bajo una carga muy alta en ningún momento. Veo un aumento de CPU cada hora aproximadamente 10 minutos después de la hora, pero eso no se alinea claramente con las fallas.
El siguiente es el resultado de show log rs
while conectado al primario actual.
2015-05-17T15:05:49.339+0000 [rsBackgroundSync] replSet sync source problem: 10278 dbclient error communicating with server: server1:27017
2015-05-17T15:05:49.358+0000 [rsBackgroundSync] replSet syncing to: server1:27017
2015-05-17T15:05:56.444+0000 [rsBackgroundSync] replset setting syncSourceFeedback to server1:27017
2015-05-17T22:11:36.638+0000 [rsHealthPoll] replSet info server1:27017 is down (or slow to respond):
2015-05-17T22:11:36.644+0000 [rsHealthPoll] replSet member server1:27017 is now in state DOWN
2015-05-17T22:11:37.495+0000 [rsMgr] not electing self, we are not freshest
2015-05-17T22:11:38.656+0000 [rsHealthPoll] replSet member server1:27017 is up
2015-05-17T22:11:38.656+0000 [rsHealthPoll] replSet member server1:27017 is now in state PRIMARY
2015-05-17T22:11:39.140+0000 [rsBackgroundSync] replSet syncing to: server1:27017
2015-05-17T22:11:39.147+0000 [rsBackgroundSync] replset setting syncSourceFeedback to server1:27017
2015-05-17T23:05:47.431+0000 [rsBackgroundSync] replSet sync source problem: 10278 dbclient error communicating with server: server1:27017
2015-05-17T23:05:47.431+0000 [rsBackgroundSync] replSet syncing to: server1:27017
2015-05-17T23:05:47.876+0000 [rsBackgroundSync] replset setting syncSourceFeedback to server1:27017
2015-05-18T10:05:46.821+0000 [rsBackgroundSync] replSet sync source problem: 10278 dbclient error communicating with server: server1:27017
2015-05-18T10:05:46.822+0000 [rsBackgroundSync] replSet syncing to: server1:27017
2015-05-18T10:05:51.014+0000 [rsBackgroundSync] replset setting syncSourceFeedback to server1:27017
2015-05-18T22:12:11.433+0000 [rsHealthPoll] replSet info server1:27017 is down (or slow to respond):
2015-05-18T22:12:11.434+0000 [rsHealthPoll] replSet member server1:27017 is now in state DOWN
2015-05-18T22:12:11.507+0000 [rsMgr] replSet info electSelf 3
2015-05-18T22:12:14.708+0000 [rsMgr] replSet PRIMARY
2015-05-18T22:12:14.709+0000 [rsHealthPoll] replSet member server1:27017 is up
2015-05-18T22:12:14.709+0000 [rsHealthPoll] replSet member server1:27017 is now in state PRIMARY
2015-05-18T22:12:21.610+0000 [rsHealthPoll] replSet member server1:27017 is now in state ROLLBACK
2015-05-18T22:12:23.612+0000 [rsHealthPoll] replSet member server1:27017 is now in state SECONDARY
2015-05-19T22:13:13.004+0000 [rsHealthPoll] couldn't connect to server1:27017: couldn't connect to server server1:27017 (x.x.x.x), connection attempt failed
2015-05-19T22:13:24.127+0000 [rsHealthPoll] couldn't connect to server1:27017: couldn't connect to server server1:27017 (x.x.x.x) failed, connection attempt failed
2015-05-19T22:13:29.267+0000 [rsHealthPoll] replset info server1:27017 just heartbeated us, but our heartbeat failed: , not changing state
2015-05-20T22:14:35.832+0000 [rsHealthPoll] replset info server1:27017 just heartbeated us, but our heartbeat failed: , not changing state
Puede ver que recibimos frecuentes fallas de latidos y notificaciones de inactividad, pero en cada caso el servidor pasaría de inactivo a respaldado en segundos cada vez. No estoy realmente seguro de por dónde empezar a buscar para intentar descubrir qué podría estar causando el problema.
Respuesta1
Veo esto con frecuencia y siempre está fuera del mongod
proceso. Problemas de resolución de DNS, problemas de pila TCP/IP, enlaces de red, hardware físico, etc. Salga del mongod
proceso. Verifique los errores de red en su sistema operativo host, verifique los enlaces físicos (si lo físico está en la ecuación), verifique su proveedor de nube entre los dos servidores si abarca regiones. Con toda probabilidad, esto es algo relacionado con el sistema operativo host y no tiene nada que ver con MongoDB.
Respuesta2
Esto ha sido resuelto. El problema principal era que nuestro proveedor de hosting ejecutaba instantáneas de VMWare como mecanismo de respaldo. Estas instantáneas estaban provocando que la VM entrara temporalmente en un período de estasis; creo que el término técnico es que la VM se queda inactiva.
Una vez que se desactivaron estas instantáneas, ya no tuvimos ningún problema.