Lo que quiero lograr es tener un script /etc/init.d que inicie de manera más confiable Mongodb, incluso si fue muy difícil - debería intentar una reparación automática en caso de que el sistema está en un estado bloqueadoReiniciar/Autorematar Mongodb en producción
Sí, podría escribir esto yo mismo, pero creo que alguien ya debe haber hecho esto.
Me di cuenta de que después de que un servidor falla, Mongodb se encuentra en un estado en el que no se reinicia mediante el script /etc/init.d/mongod. Obviamente, los archivos de bloqueo deben eliminarse y debe iniciarse con la opción --repair y corregir --dbpath primero, antes de que pueda reiniciarse con éxito. En algunos casos, también es necesario cambiar la propiedad de los archivos db para el usuario que ejecuta mongodb. Un problema adicional es que la secuencia de comandos /etc/init.d/mongod estándar no informa un error en esta situación, sino que devuelve con alegría e incorrectamente el estado "OK" e informa que Mongod se inició, aunque no fue así.
$ sudo /etc/init.d/mongod start
Starting mongod: forked process: 9220
all output going to: /data/mongo/log/mongod.log
[ OK ]
$ sudo /etc/init.d/mongod status
mongod dead but subsys locked
El sistema operativo es CentOS o Fedora.
¿Alguien ha modificado scripts /etc/init.d o un puntero a tales scripts, que intentan una reparación automáticamente en esa situación? ¿O hay otra herramienta que funcione como un perro guardián para Mongod?
¿Alguna opinión sobre por qué podría ser una mala idea intentar reparar automáticamente mongodb?
$ sudo /etc/init.d/mongod status
mongod dead but subsys locked
$ sudo ls -l /var/lib/mongo/mongod.lock
-rw-r--r--. 1 mongod mongod 5 Nov 19 11:52 /var/lib/mongo/mongod.lock
$ sudo tail -50 /data/mongo/log/mongod.log
**************
old lock file: /data/mongo/db/mongod.lock. probably means unclean shutdown
recommend removing file and running --repair
see: http://dochub.mongodb.org/core/repair for more information
*************
Sat Nov 19 11:55:44 exception in initAndListen std::exception: old lock file, terminating
Sat Nov 19 11:55:44 dbexit:
Sat Nov 19 11:55:44 shutdown: going to close listening sockets...
Sat Nov 19 11:55:44 shutdown: going to flush oplog...
Sat Nov 19 11:55:44 shutdown: going to close sockets...
Sat Nov 19 11:55:44 shutdown: waiting for fs preallocator...
Sat Nov 19 11:55:44 shutdown: closing all files...
Sat Nov 19 11:55:44 closeAllFiles() finished
Sat Nov 19 11:55:44 dbexit: really exiting now
gracias por su respuesta detallada. El diario parece ser el camino a seguir ... ¿qué versión introdujeron en el diario? – Tilo
El registro en el diario se introdujo en 1.8+, simplemente configure 'journal = true' en su archivo de configuración. En 2.0+, el diario está activo de manera predeterminada. Tenga en cuenta que el diario no es "gratuito". No funciona en 32 bits, utilizará RAM adicional, espacio de disco adicional e IO adicional. Si realiza muchas actualizaciones in situ (como contadores), esto podría ser significativo. Así que prueba el modo diario antes de un empujón ciego a la producción. –
¡Gran respuesta! aunque en realidad no es un script :) El diario probablemente sea el truco. 32 bits no es un problema para mí. ¡Voy a probar el diario! ¡gracias por tu ayuda! – Tilo