En plataformas con varios frontales web, es imprescindible utilizar un almacenamiento centralizado como document root de nuestra plataforma.
Al reiniciar el servidor, generalmente el montaje de nuestro almacenamiento centralizado vía NFS se produce antes de que se inicie el servicio web (Apache, Nginx…) pero, es posible que, por lentitud del punto de montaje, latencia de red, o ya sea simplemente por el orden de arranque, nuestro almacenamiento centralizado no esté montado cuando se vaya a iniciar el servidor web, y esto provoque un fallo en el arranque de los frontales al ser reiniciados.
Pues bien, solucionar este posible inconveniente es muy sencillo, y basta con configurar el arranque de nuestro servidor web para que se inicie siempre tras el montaje del NFS.
Para ello, primeramente debemos saber que cuando se monta un NFS, systemd genera una unidad de «servicio» a la que podemos recurrir para ello.
En el ejemplo, dispongo de un NFS montado en el punto de montaje /var/www:
10.1.1.1:/myvol 190G 47G 144G 25% /var/www
Si listamos por systemctl y grepamos por /var/www , obtendremos el «servicio» que systemd crea para este montaje:
:~# systemctl list-units | grep /var/www
var-www.mount
Como vemos, el «servicio» se llama var-www.mount, pues bien, ya por último solo nos queda editar el fichero .service de nuestro servidor web (o cualquier otro servicio que deseemos), e indicar que no se arranque el mismo hasta que el «servicio» var-www.mount haya concluido:
En mi caso, nginx, editaría el fichero:
vim /usr/lib/systemd/system/nginx.service
Y añadiría en «After» lo siguiente:
[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target nss-lookup.target var-www.mount
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed
ExecStartPre=/bin/sleep 10
[Install]
WantedBy=multi-user.target
Y por último, tras editar el fichero, reeleemos el .service:
systemctl daemon-reload
¡Y listo! Con esto, nuestro servicio «nginx» (o el que hayamos editado) se ejecutará siempre una vez se haya montado el NFS, evitando posibles fallos de arranque.
0 comentarios