🚀 deploy zabbix multi-node monitoring system on almalinux vps
Learn how to deploy zabbix multi-node monitoring system on almalinux vps!

This article provides a guide demonstrating how to deploy Zabbix multi-node monitoring system on AlmaLinux VPS.

What is Zabbix?

Zabbix is a free, open-source IT infrastructure monitoring software that collects, analyzes, and visualizes data from networks, servers, virtual machines, cloud services, and applications. It provides real-time performance data and alerting to ensure system reliability by monitoring key metrics like CPU load, network traffic, and disk space. Zabbix can alert users to problems through various notification mechanisms, such as email, and offers features for reporting and data visualization.

Here’s a detailed, step-by-step technical guide for installing a Zabbix multi-node monitoring system on AlmaLinux VPS and configuring it with separate server, database, web frontend, and agent nodes. This guide assumes you are using AlmaLinux 9 VPS (clean install) for each node and are comfortable with using the command line.
Launch 100% ssd fedora vps from $2. 49/mo!

🧭 Guide: Deploy Zabbix Multi-Node Monitoring System on AlmaLinux VPS

⚙️ Overview

In a multi-node architecture, we separate key components for scalability and fault tolerance:

Node Role Example Hostname
Node 1 Zabbix Server + Frontend zabbix-master.yourdomain.com
Node 2 Database (MariaDB) db01.yourdomain.com
Node 3 Zabbix Proxy proxy01.yourdomain.com
Node 4+ Zabbix Agents agent01.yourdomain.com, etc.
  1. 🧩 System Preparation

    Perform these steps on each AlmaLinux VPS:

    sudo dnf update -y sudo dnf install epel-release -y sudo dnf install wget curl nano net-tools -y sudo hostnamectl set-hostname zabbix-master.yourdomain.com

    Open required firewall ports (adjust for each node):

    sudo firewall-cmd --permanent --add-port=10050/tcp # agent sudo firewall-cmd --permanent --add-port=10051/tcp # server/proxy sudo firewall-cmd --permanent --add-port=80/tcp # web interface sudo firewall-cmd --reload
  2. 🗄️ Install and Configure MariaDB (on Database Node)

    1. Install MariaDB

      sudo dnf install mariadb-server -y sudo systemctl enable --now mariadb
    2. Secure the Installation

      sudo mysql_secure_installation

      Follow prompts to set root password, remove test DB, and disable remote root login.

    3. Create Zabbix Database and User

      mysql -u root -p
      CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER 'zabbix'@'%' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'%'; FLUSH PRIVILEGES; EXIT;
    4. Enable Remote Access

      Edit /etc/my.cnf.d/mariadb-server.cnf:

      [mysqld] bind-address=0.0.0.0

      Restart service:

      sudo systemctl restart mariadb
  3. 🖥️ Install Zabbix Server + Web Frontend (on Zabbix Master Node)

    1. Add Zabbix Repository

      For Zabbix 7.0 (LTS):

      sudo rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/9/x86_64/zabbix-release-7.0-3.el9.noarch.rpm sudo dnf clean all
    2. Install Packages

      sudo dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-agent -y
    3. Import Database Schema

      Connect to your remote database:

      zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -h db01.yourdomain.com -u zabbix -p zabbix
    4. Configure Zabbix Server

      Edit /etc/zabbix/zabbix_server.conf:

      DBHost=db01.yourdomain.com DBName=zabbix DBUser=zabbix DBPassword=StrongPassword123!
    5. Configure PHP Frontend

      Edit /etc/php-fpm.d/zabbix.conf and ensure:

      php_value[date.timezone] = America/Chicago

      Enable and start services:

      sudo systemctl enable --now zabbix-server zabbix-agent httpd php-fpm
  4. 🌐 Access Zabbix Web Interface

    Open your browser and visit:

    http://zabbix-master.yourdomain.com/zabbix
    

    Default credentials:

    • Username: Admin
    • Password: zabbix

    Complete the installation wizard:

    • Database host: db01.yourdomain.com
    • DB name: zabbix
    • DB user: zabbix
    • DB password: (as configured)
    • Zabbix server host: localhost
    • Port: 10051
  5. 🛰️ Install Zabbix Proxy (Optional but Recommended)

    Use a proxy for remote or distributed networks.

    1. On Proxy Node

      sudo dnf install zabbix-proxy-mysql mariadb-server -y sudo systemctl enable --now mariadb

      Create local DB:

      mysql -u root -p CREATE DATABASE zabbix_proxy CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER 'zabbix_proxy'@'localhost' IDENTIFIED BY 'ProxyPass!'; GRANT ALL PRIVILEGES ON zabbix_proxy.* TO 'zabbix_proxy'@'localhost'; FLUSH PRIVILEGES; EXIT;
    2. Initialize Schema

      zcat /usr/share/zabbix-sql-scripts/mysql/proxy.sql.gz | mysql -uzabbix_proxy -p zabbix_proxy
    3. Configure Proxy

      Edit /etc/zabbix/zabbix_proxy.conf:

      Server=zabbix-master.yourdomain.com
      Hostname=proxy01.yourdomain.com
      DBName=zabbix_proxy
      DBUser=zabbix_proxy
      DBPassword=ProxyPass!
      

      Enable and start:

      sudo systemctl enable --now zabbix-proxy
      

      Then, in the Zabbix frontend:

      • Navigate to Administration → Proxies → Create Proxy
      • Add proxy01.yourdomain.com as an active proxy
  6. 💻 Install Zabbix Agent (on Monitored Hosts)

    1. Install Agent

      sudo dnf install zabbix-agent -y
    2. Configure

      Edit /etc/zabbix/zabbix_agentd.conf:

      Server=zabbix-master.yourdomain.com,proxy01.yourdomain.com
      ServerActive=zabbix-master.yourdomain.com
      Hostname=agent01.yourdomain.com
      

      Enable and start:

      sudo systemctl enable --now zabbix-agent
      

      Add the host in Zabbix frontend:

      • Configuration → Hosts → Create Host
      • Set Host name = agent01.yourdomain.com
      • Choose Proxy if applicable
      • Link to Linux by Zabbix agent template
  7. 🧠 Verify and Test

    Run:

    sudo systemctl status zabbix-server
    sudo systemctl status zabbix-agent
    sudo systemctl status zabbix-proxy
    

    In the Zabbix Dashboard, check:

    • All nodes have green availability icons ✅
    • Data (CPU, memory, disk usage) appearing for agents
      Zabbix dashboard
  8. 🔐 Hardening and Optimization

    • Enable SSL/TLS between agents, proxies, and server
    • Use Nginx reverse proxy for frontend + Let’s Encrypt
    • Limit database user privileges
    • Tune MariaDB (innodb_buffer_pool_size, etc.) for performance
    • Regularly back up /etc/zabbix/, /usr/share/zabbix/, and DB

🧩 Architecture Diagram

          +-------------------+
|  Web Frontend     |
|  (Apache/PHP)     |
+---------+---------+
|
v
+-------------------+
|  Zabbix Server    |
|  (10051/tcp)      |
+---------+---------+
|
+--------------+-------------+
|                            |
v                            v
+------------+             +--------------+
| Zabbix     |             | Zabbix Proxy |
| Agent(s)   |             | Remote Sites |
| (10050/tcp)|             | (10051/tcp)  |
+------------+             +--------------+
|
v
+-------------------+
|  MariaDB Server   |
+-------------------+

Let’s extend your Zabbix multi-node monitoring system on AlmaLinux VPS with a secure, production-ready HTTPS frontend using Nginx + Let’s Encrypt (Certbot).

This section will assume:

  • Zabbix frontend is already running on Apache (default from RPM).
  • You want Nginx to act as a reverse proxy providing SSL termination.
  • Let’s Encrypt handles the certificates automatically with auto-renewal.

🔐 Secure Zabbix Frontend with Let’s Encrypt + Nginx Reverse Proxy (Zabbix Multi-Node Monitoring System on AlmaLinux VPS)

  1. 🧱 Prerequisites

    Ensure:

      sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-service=https
    sudo firewall-cmd --reload
    
  2. 🧩 Install Nginx and Certbot

    sudo dnf install nginx certbot python3-certbot-nginx -y

    Stop Apache (it uses port 80, which Certbot needs for validation):

    sudo systemctl stop httpd sudo systemctl disable httpd
  3. 🪶 Configure Nginx Reverse Proxy

    Create a new config file for your Zabbix domain:

    sudo nano /etc/nginx/conf.d/zabbix.conf

    Paste the following configuration 👇

    server { listen 80; server_name zabbix-master.yourdomain.com; # Redirect all HTTP to HTTPS location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; server_name zabbix-master.yourdomain.com; # SSL Certificates (to be auto-generated by Certbot) ssl_certificate /etc/letsencrypt/live/zabbix-master.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/zabbix-master.yourdomain.com/privkey.pem; # Recommended SSL settings ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM"; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # Proxy to Apache backend (Zabbix frontend) location / { proxy_pass http://127.0.0.1:8080; # We'll make Apache listen on 8080 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } access_log /var/log/nginx/zabbix_access.log; error_log /var/log/nginx/zabbix_error.log; }

    Save and exit.

  4. ⚙️ Reconfigure Apache to Run Behind Nginx

    Since Nginx is now serving on ports 80/443, make Apache serve locally on port 8080.

    Edit /etc/httpd/conf/httpd.conf:

    Find:

    Listen 80

    Change to:

    Listen 127.0.0.1:8080

    Restart Apache:

    sudo systemctl enable httpd sudo systemctl restart httpd
  5. 🧾 Obtain and Install Let’s Encrypt SSL Certificate

    Now generate the SSL certificate with Certbot (for your Nginx server block):

    sudo certbot --nginx -d zabbix-master.yourdomain.com
    

    Follow prompts to:

    • Agree to terms
    • Provide admin email
    • Enable HTTPS redirection (say Y)

    Certbot automatically configures your SSL paths in /etc/nginx/conf.d/zabbix.conf.

  6. 🪄 Verify HTTPS and Auto-Renewal

    Check syntax and restart Nginx:

    sudo nginx -t sudo systemctl enable --now nginx sudo systemctl restart nginx

    Open your browser:

    https://zabbix-master.yourdomain.com/zabbix

    ✅ You should see your Zabbix login page with a secure lock icon.

    Test renewal simulation:

    sudo certbot renew --dry-run
  7. ⚡ Optional Hardening

    Enable HTTP Security Headers

    Edit /etc/nginx/conf.d/zabbix.conf inside the HTTPS server block:

    add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff"; add_header X-XSS-Protection "1; mode=block"; add_header Referrer-Policy "strict-origin-when-cross-origin"; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    Restart Nginx:

    sudo systemctl restart nginx
  8. 🧠 Verify Integration

    • Apache (Zabbix frontend) is running on 127.0.0.1:8080
    • Nginx proxies HTTPS requests to Apache
    • Certificates auto-renew every 60–90 days

    Check process statuses:

    sudo systemctl status nginx
    sudo systemctl status httpd
    sudo systemctl status zabbix-server
    

🧰 Troubleshooting Tips

Issue Solution
Certbot fails to bind port 80 Stop Apache temporarily: systemctl stop httpd before running Certbot.
“502 Bad Gateway” Verify Apache is listening on port 8080 and restart it.
SSL works, but no dashboard Ensure proxy_pass points to the correct local address and port.
Auto-renew not running Add a cron job: echo "0 3 * * * /usr/bin/certbot renew --quiet" | sudo tee /etc/cron.d/certbot-renew

🔐 Final Architecture (with SSL)

[ User Browser ]
|
HTTPS (443)
|
+-------------+
|   NGINX     |  ← SSL termination + reverse proxy
+-------------+
|
HTTP (8080)
|
+-------------+
|  Apache +   |
|  Zabbix UI  |
+-------------+
|
+-------------+
|  Zabbix     |
|  Server     |
+-------------+
|
+-------------+
|  MariaDB    |
+-------------+

Launch 100% ssd fedora vps from $2. 49/mo!

Conclusion

You now know how to deploy Zabbix multi-node monitoring system on AlmaLinux VPS.

Avatar of editorial staff

Editorial Staff

Rad Web Hosting is a leading provider of web hosting, Cloud VPS, and Dedicated Servers in Dallas, TX.
lg