Gabriel Tello

Instalando Zabbix con Alta Disponibilidad

Fecha de publicación: | 1600 palabras | 8 mins

En este proyecto, vamos a instalar el servidor Zabbix y configurarlo con alta disponibilidad (HA). Zabbix es una potente solución de monitoreo de código abierto utilizada para hacer seguimiento al rendimiento y la disponibilidad de los sistemas informáticos. Al final de esta guía, tendrás un servidor Zabbix completamente funcional configurado con alta disponibilidad (HA), asegurando un monitoreo continuo incluso en caso de fallo del servidor.

En resumen, en este proyecto vamos a:

  • Instalar el servidor Zabbix.
  • Configurar el frontend de Zabbix para el monitoreo.
  • Habilitar la alta disponibilidad (HA) del servidor Zabbix para tolerancia a fallos.

Requisitos técnicos

Comenzaremos este proyecto con una máquina virtual Linux nueva. Puedes elegir una distribución Linux basada en RHEL o Debian. Luego configuraremos un servidor Zabbix desde cero en este host.

Utilizaré Rocky Linux 9 y Ubuntu 24.04 en mis ejemplos.

Aquí hay una tabla con los requisitos de hardware para máquinas virtuales según la documentación de Zabbix:

Tamaño de Instalación Métricas Monitoreadas Núcleos CPU/vCPU Memoria (GiB) Base de Datos Tipo de Instancia EC2 de Amazon
Pequeño 1,000 2 8 MySQL Server, Percona Server, MariaDB Server, PostgreSQL m6i.large / m6g.large
Mediano 10,000 4 16 MySQL Server, Percona Server, MariaDB Server, PostgreSQL m6i.xlarge / m6g.xlarge
Grande 100,000 16 64 MySQL Server, Percona Server, MariaDB Server, PostgreSQL m6i.4xlarge / m6g.4xlarge
Muy grande 1,000,000 32 96 MySQL Server, Percona Server, MariaDB Server, PostgreSQL m6i.8xlarge / m6g.xlarge

1 Métrica = 1 Elemento + 1 Disparador + 1 Gráfico

Por ejemplo, monitorear una métrica de CPU implicaría crear:

  • 1 Elemento para recopilar los datos (por ejemplo, uso de CPU).
  • 1 Disparador para alertar cuando el uso de CPU exceda un umbral.
  • 1 Gráfico para visualizar el uso de CPU a lo largo del tiempo.
    Estos componentes cuentan colectivamente como una métrica.

Instalando el Servidor Zabbix

Antes de instalar el servidor Zabbix, debemos cumplir algunos requisitos previos. Usaremos MariaDB, ya que es popular y tiene mucha documentación disponible para usar con Zabbix. Ejecuta estos comandos como root.

  1. Agregar el repositorio de Zabbix 7.0 a tu sistema
    Para sistemas basados en RHEL:

    1rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-2.el9.noarch.rpm  
    2dnf clean all  

    Para sistemas basados en Ubuntu:

    1wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb  
    2dpkg -i zabbix-release_7.0-1+ubuntu22.04_all.deb  
    3apt update  
  2. Eliminar los paquetes del repositorio EPEL de Zabbix (si están instalados) en sistemas RHEL:
    Edita el archivo:

    1vim /etc/yum.repos.d/epel.repo  

    Agrega la siguiente línea:

    1[epel]  
    2...  
    3excludepkgs=zabbix*  
  3. Agregar el repositorio de MariaDB:

    1wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup  
    2chmod +x mariadb_repo_setup  
    3./mariadb_repo_setup  
  4. Instalar y habilitar MariaDB:
    Para sistemas basados en RHEL:

    1dnf install mariadb-server  
    2systemctl enable mariadb  
    3systemctl start mariadb  

    Para sistemas basados en Ubuntu:

    1apt install mariadb-server  
    2systemctl enable mariadb  
    3systemctl start mariadb  
  5. Asegurar tu instalación de MariaDB:

    1mariadb-secure-installation  
  6. Instalar el servidor Zabbix con soporte MySQL:
    Para sistemas basados en RHEL:

    1dnf install zabbix-server-mysql zabbix-sql-scripts zabbix-selinux-policy  

    Para sistemas basados en Ubuntu:

    1apt install zabbix-server-mysql zabbix-sql-scripts  
  7. Crear la base de datos de Zabbix:
    Inicia sesión en MariaDB:

    1mysql -u root -p  

    Crea la base de datos y el usuario:

    1create database zabbix character set utf8mb4 collate utf8mb4_bin;  
    2create user zabbix@localhost identified by 'password';  
    3grant all privileges on zabbix.* to zabbix@localhost identified by 'password';  
    4set global log_bin_trust_function_creators = 1;  
    5quit;  
  8. Importar el esquema de la base de datos de Zabbix:

    1zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mariadb --default-character-set=utf8mb4 -u zabbix -p zabbix  
  9. Deshabilitar log_bin_trust_function_creators:

    1mysql -u root -p  
    2set global log_bin_trust_function_creators = 0;  
    3quit;  
  10. Configurar el servidor Zabbix:
    Edita el archivo de configuración:

    1vim /etc/zabbix/zabbix_server.conf  

    Actualiza los ajustes de la base de datos:

    1DBName=zabbix  
    2DBUser=zabbix  
    3DBPassword=password  
  11. Iniciar el servidor Zabbix:

    1systemctl enable zabbix-server  
    2systemctl start zabbix-server  

    Verifica el estado del servidor:

    1systemctl status zabbix-server  
    2tail -f /var/log/zabbix/zabbix_server.log  

Configurando el Frontend de Zabbix

Utilizaremos Nginx para configurar el frontend de Zabbix.

  1. Instalar el frontend:
    Para sistemas basados en RHEL:

    1dnf module switch-to php:8.3  
    2dnf install zabbix-web-mysql zabbix-nginx-conf  

    Para sistemas basados en Ubuntu:

    1apt install zabbix-frontend-php zabbix-nginx-conf  
  2. Configurar NGINX:
    Edita el archivo de configuración:
    Para sistemas RHEL:

    1vim /etc/nginx/conf.d/zabbix.conf  

    Para sistemas Ubuntu:

    1vim /etc/zabbix/nginx.conf  

    Actualiza la configuración:

    1listen 80;  
    2server_name 192.168.0.50;  
  3. Reiniciar los servicios:
    Para sistemas RHEL:

    1systemctl enable nginx php-fpm  
    2systemctl restart nginx php-fpm  

    Para sistemas Ubuntu:

    1systemctl enable nginx  
    2systemctl restart nginx php-fpm  
  4. Acceder al frontend en tu navegador:
    Navega a:

    1http://<tu_ip_del_servidor>/  
  5. Completa la instalación en el navegador:
    Deberías ver la pantalla de bienvenida de Zabbix, simplemente sigue las instrucciones para configurar los detalles de la base de datos y el servidor.

Panel de Zabbix

Panel de Zabbix

Ahora que hemos instalado nuestro frontend de Zabbix, nuestra configuración está completa y estamos listos para empezar a trabajar con él. Nuestro frontend se conectará a nuestra base de datos para editar los valores de configuración de nuestra instalación, como se muestra en el siguiente diagrama:

Diagrama de Zabbix

Habilitando Alta Disponibilidad (HA) en Zabbix

Introducida en Zabbix 6, la función de Alta Disponibilidad (HA) permite un monitoreo continuo a través de una configuración de clúster activo/pasivo. Esto asegura una operación continua incluso si falla un servidor Zabbix.

Características principales de la HA de Zabbix:

  • Soporta el agrupamiento de múltiples servidores Zabbix.
  • Usa una configuración activo/pasivo para el servidor Zabbix.
  • Se admite balanceo de carga a través de proxies de Zabbix.

Preparativos

Configurar un entorno de HA se considera avanzado. Antes de comenzar:

  • Asegúrate de contar con tres máquinas virtuales:
    • zabbix-ha1 (192.168.0.1)
    • zabbix-ha2 (192.168.0.2)
    • zabbix-ha-db (192.168.0.10) para la base de datos MySQL
  • Configura una IP Virtual para el clúster: 192.168.0.5.

Note

• Esta configuración utiliza una única base de datos MySQL para Zabbix.

• Configura SELinux/AppArmor y los firewalls según sea necesario para producción.

• La sincronización de tiempo precisa entre los servidores es crítica. Utiliza herramientas como chrony o ntpd para mantener la configuración horaria precisa. Relojes de sistema desalineados pueden afectar negativamente el rendimiento de sistemas distribuidos y causar problemas con el monitoreo y las operaciones de la base de datos.

Configurando la Base de Datos

  1. Inicia sesión en zabbix-ha-db e instala el repositorio de MariaDB:

    1wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup  
    2chmod +x mariadb_repo_setup  
    3./mariadb_repo_setup  
  2. Instala el servidor MariaDB:

    • Sistemas basados en RHEL:
      1dnf install mariadb-server  
      2systemctl enable mariadb  
      3systemctl start mariadb  
    • Sistemas basados en Ubuntu:
      1apt install mariadb-server  
      2systemctl enable mariadb  
      3systemctl start mariadb  
  3. Asegura MariaDB:

    1mariadb-secure-installation  
  4. Crea la base de datos de Zabbix:

     1mariadb -u root -p  
     2create database zabbix character set utf8mb4 collate utf8mb4_bin;  
     3create user zabbix@'192.168.0.1' identified by 'password';  
     4create user zabbix@'192.168.0.2' identified by 'password';  
     5create user zabbix@'192.168.0.5' identified by 'password';  
     6grant all privileges on zabbix.* to 'zabbix'@'192.168.0.1' identified by 'password';  
     7grant all privileges on zabbix.* to 'zabbix'@'192.168.0.2' identified by 'password';  
     8grant all privileges on zabbix.* to 'zabbix'@'192.168.0.5' identified by 'password';  
     9set global log_bin_trust_function_creators = 1;  
    10quit;  
  5. Instala el módulo de scripts SQL de Zabbix:

    • Sistemas basados en RHEL:
      1dnf install zabbix-sql-scripts  
    • Sistemas basados en Ubuntu:
      1apt install zabbix-sql-scripts  
  6. Importa la configuración inicial de la base de datos de Zabbix:

    1zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -u root -p zabbix  
  7. Deshabilita log_bin_trust_function_creators:

    1mysql -u root -p  
    2set global log_bin_trust_function_creators = 0;  
    3quit;  

Configurando los Nodos del Clúster del Servidor Zabbix

  1. Agrega el repositorio de Zabbix en zabbix-ha1 y zabbix-ha2:

    • Sistemas basados en RHEL:
      1rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-2.el9.noarch.rpm  
      2dnf clean all  
    • Sistemas basados en Ubuntu:
      1wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb  
      2dpkg -i zabbix-release_7.0-1+ubuntu22.04_all.deb  
      3apt update  
  2. Instala la aplicación del servidor Zabbix:

    • Sistemas basados en RHEL:
      1dnf install zabbix-server-mysql zabbix-selinux-policy  
    • Sistemas basados en Ubuntu:
      1apt install zabbix-server-mysql  
  3. Configura zabbix-ha1:

    1vim /etc/zabbix/zabbix_server.conf  

    Agrega:

    1DBHost=192.168.0.10  
    2DBPassword=password  
    3HANodeName=zabbix-ha1  
    4NodeAddress=192.168.0.1  
  4. Configura zabbix-ha2:

    1vim /etc/zabbix/zabbix_server.conf  

    Agrega:

    1DBHost=192.168.0.10  
    2DBPassword=password  
    3HANodeName=zabbix-ha2  
    4NodeAddress=192.168.0.2  
  5. Inicia los servidores Zabbix:

    1systemctl enable zabbix-server  
    2systemctl start zabbix-server  

Configurando NGINX con HA

  1. Instala keepalived en zabbix-ha1 y zabbix-ha2:

    • Sistemas basados en RHEL:
      1dnf install -y keepalived  
    • Sistemas basados en Ubuntu:
      1apt install keepalived  
  2. Configura keepalived en zabbix-ha1:

    1vim /etc/keepalived/keepalived.conf  

    Agrega:

     1vrrp_instance ZBX_1 {  
     2    state MASTER  
     3    interface ens192  
     4    virtual_router_id 51  
     5    priority 244  
     6    authentication {  
     7        auth_type PASS  
     8        auth_pass password  
     9    }  
    10    virtual_ipaddress {  
    11        192.168.0.5/24  
    12    }  
    13}  
  3. Configura keepalived en zabbix-ha2:

    1vim /etc/keepalived/keepalived.conf  

    Agrega:

     1vrrp_instance ZBX_1 {  
     2    state BACKUP  
     3    interface ens192  
     4    virtual_router_id 51  
     5    priority 243  
     6    authentication {  
     7        auth_type PASS  
     8        auth_pass password  
     9    }  
    10    virtual_ipaddress {  
    11        192.168.0.5/24  
    12    }  
    13}  

4.

Instala el frontend de Zabbix:

  • Sistemas basados en RHEL:
    1dnf install nginx zabbix-web-mysql zabbix-nginx-conf zabbix-selinux-policy  
  • Sistemas basados en Ubuntu:
    1apt install nginx zabbix-frontend-php zabbix-nginx-conf  
  1. Configura NGINX:

    • RHEL: Edita /etc/nginx/conf.d/zabbix.conf
    • Ubuntu: Edita /etc/zabbix/nginx.conf
      1listen 80;  
      2server_name 192.168.0.5;  
  2. Inicia el servidor web y keepalived:

    1systemctl enable nginx keepalived  
    2systemctl start nginx keepalived  
  3. Configura el frontend de Zabbix a través de tu navegador navegando a:

    1http://192.168.0.5/  

Cómo Funciona

La configuración de HA de Zabbix incluye dos nodos (zabbix-ha1 y zabbix-ha2) conectados a una sola base de datos (zabbix-ha-db) usando una VIP (192.168.0.5). HA asegura que:

  • Si un nodo falla, el otro toma el control.
  • Keepalived monitorea NGINX para cambiar la VIP al nodo activo.

Para una HA avanzada, considera usar una configuración de replicación maestro/maestro de MySQL. Aprende más en la documentación de MariaDB.


Para concluir, en esta guía hemos ido a través de la instalación de Zabbix con alta disponibilidad para asegurar un monitoreo confiable y continuo.

Estate atento a mi próxima publicación, donde profundizaré en la configuración y personalización del monitoreo con Zabbix, creación de alertas y disparadores, construcción de plantillas estructuradas y visualización de tus datos a través de paneles, informes y más.

#Zabbix   #Monitoring   #SOC   #Linux   #Blue Team   #High Availability   #Sysadmin   #Project  

Responder a este post por correo ↪