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.
-
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
-
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*
-
Agregar el repositorio de MariaDB:
1wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup 2chmod +x mariadb_repo_setup 3./mariadb_repo_setup
-
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
-
Asegurar tu instalación de MariaDB:
1mariadb-secure-installation
-
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
-
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;
-
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
-
Deshabilitar
log_bin_trust_function_creators
:1mysql -u root -p 2set global log_bin_trust_function_creators = 0; 3quit;
-
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
-
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.
-
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
-
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;
-
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
-
Acceder al frontend en tu navegador:
Navega a:1http://<tu_ip_del_servidor>/
-
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.
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:
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.
• 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
-
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
-
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
- Sistemas basados en RHEL:
-
Asegura MariaDB:
1mariadb-secure-installation
-
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;
-
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
- Sistemas basados en RHEL:
-
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
-
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
-
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
- Sistemas basados en RHEL:
-
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
- Sistemas basados en RHEL:
-
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
-
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
-
Inicia los servidores Zabbix:
1systemctl enable zabbix-server 2systemctl start zabbix-server
Configurando NGINX con HA
-
Instala keepalived en zabbix-ha1 y zabbix-ha2:
- Sistemas basados en RHEL:
1dnf install -y keepalived
- Sistemas basados en Ubuntu:
1apt install keepalived
- Sistemas basados en RHEL:
-
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}
-
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
-
Configura NGINX:
- RHEL: Edita
/etc/nginx/conf.d/zabbix.conf
- Ubuntu: Edita
/etc/zabbix/nginx.conf
1listen 80; 2server_name 192.168.0.5;
- RHEL: Edita
-
Inicia el servidor web y keepalived:
1systemctl enable nginx keepalived 2systemctl start nginx keepalived
-
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.