miércoles, 13 de octubre de 2021

Balancear cache en varios discos usando NGINX



Cómo distribuir el contenido de la cache almacenada en varios discos distintos.



Hace unos días contaba cómo guardar contenido cacheado en un NGINX que actúa como reverse proxy. Hoy contaré una característica adicional a la configuración presentada anteriormente.

Imaginemos que estamos cacheando contenido en el reverse proxy no tanto para aumentar la velocidad de carga de una web sino para poder presentar ciertas imágenes en caso de que los servidores que las almacenan caigan y dejen de servirlas para asegurar así su disponibilidad.

Si tenemos varios discos duros mapeados a la máquina donde está instalado NGINX, podemos usar NGINX para dividir el caché almacenado entre ellos, añadiendo una capa extra a alta disponibilidad.

A continuación, un ejemplo que muestra como dividir a los clientes de manera uniforme en dos discos duros distintos según el URI de la solicitud enviada por el cliente:

proxy_cache_path /path/to/hdd1 levels=1:2 keys_zone=my_cache_hdd1:10m max_size=10g inactive=60m use_temp_path=off; proxy_cache_path /path/to/hdd2 levels=1:2 keys_zone=my_cache_hdd2:10m max_size=10g inactive=60m use_temp_path=off; split_clients $request_uri $my_cache { 50% “my_cache_hdd1”; 50% “my_cache_hdd2”; } server { # ... location / { proxy_cache $my_cache; proxy_pass http://my_upstream; } }

Las dos directivas proxy_cache_path definen dos cachés (my_cache_hdd1 y my_cache_hdd2) en dos discos duros diferentes (hdd1 y hdd2), para asegurar la alta disponibilidad.

El bloque de configuración split_clients especifica que los resultados de la mitad de las solicitudes (50 %) se almacenan en caché en my_cache_hdd1 y la otra mitad en my_cache_hdd2. El hash basado en la variable $request_uri (el URI de la solicitud) determina qué caché se usa para cada solicitud, lo que da como resultado que las solicitudes de un URI determinado siempre se almacenan en el mismo caché.

Mencionar que este enfoque no reemplaza la configuración de un RAID. Si hay una falla en uno de los discos, podría darse un comportamiento impredecible en el sistema, como mostrarse errores 500 a las solicitudes que se dirigieron al disco duro defectuoso.


Fuentes:

https://www.nginx.com/blog/nginx-caching-guide/
0

0 comentarios:

Publicar un comentario