Nginx high availability en FreeBSD con CARP y Monit

¿Que es CARP?

Common Address Redundancy Protocol (CARP) permite que varios servidores compartan la misma dirección IP y la misma identificación de host virtual (VHID) para proporcionar alta disponibilidad para uno o más servicios. Esto significa que uno o más servidores pueden fallar, y los otros servidores tomarán el control de forma transparente.

¿Que es Monit?

Monit es una utilidad para administrar y monitorear procesos, programas, archivos, directorios y sistemas de archivos en un sistema Unix. Monit lleva a cabo el mantenimiento y la reparación automáticos y puede ejecutar  en situaciones de error.

P.ej. Monit puede iniciar un proceso si no se ejecuta, reiniciar un proceso si no responde y detener un proceso si usa demasiados recursos. Puede usar Monit para monitorear archivos, directorios y sistemas de archivos en busca de cambios, tales como cambios en la fecha y hora, cambios en la suma de verificación o cambios de tamaño.

Configuración del entorno

Para la configuración de este escenario en alta disponibidad en FreeBSD vamos a emplear CARP el cual nos proporcionara una ip virtual y Monit con el cual realizaremos la monitorización del servicio de nginx.

Para llevar esto la nic em1  la cual es la que realiza la comunicación entre los servidores tiene que estar en modo promiscuo.

Diagrama:

 

Instalamos en los dos nodos los paquetes necesarios

pkg install nginx monit

Activamos CARP (ambos nodos)

echo ‘carp_load=”YES”‘ >> /boot/loader.conf
kldload carp

Configuramos el direccionamiento IP

freebsdweb01

cat /etc/rc.conf
hostname=”freebsdweb01″
keymap=”es.acc.kbd”
ifconfig_em0=”inet 192.168.1.40 netmask 255.255.255.0″
ifconfig_em1=”inet 10.10.1.8 netmask 255.255.255.0″
ifconfig_em1_alias0=”inet vhid 1 pass testpass alias 10.10.1.10/32″
defaultrouter=”192.168.1.1″

freebsdweb02

hostname=”freebsdweb02″
keymap=”es.acc.kbd”
ifconfig_em0=”inet 192.168.1.41 netmask 255.255.255.0″
ifconfig_em1=”inet 10.10.1.9 netmask 255.255.255.0″
ifconfig_em1_alias0=”inet vhid 1 pass testpass alias 10.10.1.10/32 advskew 100″
defaultrouter=”192.168.1.1″

 

Configuración de monit (en ambos nodos)

debemos copiar el archivo de configuración de ejemplo:

cp /usr/local/etc/monitrc.sample /usr/local/etc/monitrc

Agregamos la configuración para la monitorizacón del servicio de nginx

# Monitors the Nginx HTTP server
check process nginx with pidfile /var/run/nginx.pid
start program “/usr/local/etc/rc.d/nginx start”
stop program “/usr/local/etc/rc.d/nginx stop”
if failed port 80 protocol http then restart
if failed port 443 protocol http then restart
if 1 restarts within 2 cycles then exec “/sbin/ifconfig em1 vhid 1 state backup”

 

Agregamos en el inicio el servico de nginx y monit

echo ‘nginx_enable=”YES”‘ >> /etc/rc.conf

echo ‘monit_enable=”YES”‘ >> /etc/rc.conf

Iniciamos ambos servicios

service nginx start

service monit start

 

Ahora solo faltaría realizar las pruebas de alta disponibilidad.

 

:wq!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*