Zabbix Database, Server ve Frontend Sunucularının Ayrılması

By | 28 Mart 2022

Merhaba,

Bu makalemizde büyük yapılarda yönetilebilirlik ve kaynak kullanımının iyi aktarılabilmesi için Zabbix platformunu oluşturan 3 temel öge olan Main Server, Frontend ve Database’in birbirinden ayrı olarak kurulmasını işliyor olacağız.

Öncelikle bunu yapmadan önce Zabbix’in çalışma mantığını bir hatırlayalım ve bunu neden yapıyoruz ya da buna neden ihtiyacımız olabilir diye bir düşünelim.

Zabbix ile monitoring yaparken kendimize Linux ailesinden bir işletim sistemi seçiyoruz ve buna göre resmi dokümandan faydalanarak kurulumları 5dk içinde yapıyoruz Zabbix ayağa kalkıyor ve çalışıyor. Ayağa kalkan bu Zabbix sunucusu içine kurulum sırasında bir database (Mysql yada Postgresql) seçtiğimiz için onun kurulumu yapılıyor. Administrative işleri yapmamız için Apache Server ile PHP tabanlı bir frontend panel kuruluyor ve son olarak ise monitör ettiğimiz cihazlardan data toplayan Zabbix (deamon) yada main diyeceğimiz bir Zabbix Server kuruluyor. Yani bir tane Ubuntu ya da Centos üzerine Zabbix kurup çalıştırdığımızda içerde aslında içinde 3 tane sunucu ile bu operasyonu tek bir sunucu üzerinde yapmış oluyoruz.

Eğer büyük yapılar yönetmiş iseniz zaten bilirsiniz izleme ortamı büyüdükçe Zabbix sunucusunun konfigürasyon dosyasında bazı değerleri arttırmak zorunda kalırsınız ki zaten bunu yapmadan sistem size iyi bir monitoring yaptırmaz. Bu sebeple ki;

Monitoring yapılacak ortamın kapasitesi büyüdükçe Zabbix tek bir sunucu üzerinde koşturulmaz. Bu içerdeki 3 sunucu birbirinden ayrılır ve ona göre kaynak takviyesi yapılarak ilerlenir.

Bu hem database yönetiminin kolayca yapılmasını sağlar. Hem de Zabbix Main Server yanı sıra HA yapısında bize ana Zabbix kapansa dahi HA üyesi diğer sunucuların görevi devralarak devam etmesini sağlar.

Şimdi aşağıdaki görselden bu yazdıklarımıza bakalım.

Gördüğünüz gibi ben kurulumu 2 şekilde açıkladım. Birincisi Klasik kurulum yani küçük ve orta ölçekteki bir Infrastructure için Zabbix tek bir sunucu üzerine kurularak yukarıdaki gibi kurulup yönetilebilir. Büyük yapılarda ise içerideki 3 sunucu birbirinden ayrılarak bir kurulum kurgulanır ki bu da ölçeklenebilirlik için bize avantaj sağlar.

Buna birde Zabbix 6.0 ile gelen HA yapısını ayağa kaldırmak istediğinizi düşünelim.

Zabbix 6.0 versiyonu ile Native HA Cluster özelliğini getirdi ve birden fazla Zabbix sunucusunu HA yapıda kullanabiliyoruz.

Örneğin sizin bir tane hali hazırda Zabbix 6.0 sisteminiz var ve buna HA Cluster özelliğini açarak 2 tane daha Zabbix Server eklediniz.

1.Sorun:

Zabbix ilk sunucunuz üzeri de hem Database, hem Frontend hem de Zabbix Server olduğu için sizin yedek HA sisteminiz devreye girdiğinde ilk Zabbix sunucusunun komple kapanmamış olması gerekiyor çünkü Database ve Frontend de ilk sunucu üzerinde. Yani sadece Zabbix Server servisinin kapanmış olması gerekiyor. Bu noktada tam bir failover cluster olmuş olmuyor.

2. Sorun:

Siz tüm kötü senaryolar için sürekli ilk kurulu olan Zabbix makinesine her anlamda bağımlısınız ve onun sürekli devrede olması gerekiyor. Yönetim için Frontend sunucunun açık olması HA sistemi devreye girdiğinde ise Database’in çalışıyor olması gibi.

Yukarıdaki sebeplerden dolayı biz yapıyı ayırarak ayağa kaldırdığımızda bu bağımlılıkları ortadan kaldırıyoruz ve daha esnek ve yönetilebilir bir HA Cluster ortamı kurmuş oluyoruz. Aşağıdaki şekilden bir göz atarak bakalım.

Gördüğünüz gibi sistemde 3 tane birbirinden ayrı sunucu üzerinde kurgulanmış bir Zabbix yapılandırması mevcut.

  1. Zabbix Frontend Server (192.168.1.200/zabbix)
  2. Zabbix Server (192.168.1.150)
  3. Zabbix Database Server (192.168.1.100)

Bu yapıda datayı Zabbix Server topluyor (192.168.1.150) IP adresi ile biz de sistemi (192.168.1.200/zabbix) IP adresli Frontend Sunucu üzerinden yönetiyoruz. Tüm operasyon dataları ise başka bir sunucu olan (192.168.1.100) IP adresli Database sunucusuna yazılıyor.

Devamında ise HA Cluster devreye alınarak bu yapıya aşağıdaki 2 sunucu daha ekleniyor.

  • Zabbix Server Node-2 (192.168.1.160)
  • Zabbix Server Node-3 (192.168.1.170)

Bu senaryoda ise ana Zabbix Sunucu Down olduğunda operasyon kesilmeden yedekler üzerinden devam ediyor. Sonuç olarak FE ve Database sistemi halen tekli olsa da HA Cluster ilk senaryoya göre daha yetkin çalışıyor.

Şimdi bu makalede yukarıdaki senaryoda bulunan Zabbix Sunucuların birbirinden ayrılarak kurulmasını işliyor olacağız o yüzden bunun mantığını anlatmak adına böyle bir giriş yaptım. Sözü fazla uzatmadan işlemlerimize geçelim.

Senaryodaki uygulamada kullanılan sunucular Ubuntu 20.04 LTS olup tüm sunucularda aynı şekilde kurulmuştur. Güncellemeleri yapılmış statik IP atamaları verilmiştir. Sunucuların tamamında ufw(Uncomplicated Firewall) devre dışı olup Selinux disable edilmiştir.

Makalemiz 3 ana bölümden oluşarak devam edecek.

1-) Zabbix Mysql Database Sunucusunun Kurulması

Bu kurulumda Zabbix Database için Mysql Server tercih edilmiş olup Ubuntu 20.04 üzerinde temiz bir Mysql Server kurulumu yapacağız ve içine Zabbix Database’ini oluşturacağız.

İlk olarak ufw firewall devre dışı bırakıyorum ve Selinux’u disable konuma çekiyorum. Bunu bir kez burada gösteriyorum diğer tüm sunucular için ayrı ayrı ekran görüntüsü almadım.

systemctl status ufw
systemctl disable ufw
systemctl stop ufw
apt install selinux-utils
setenforce 0

Ardından “apt-get install mysql-server –y” komutu ile mysql server kurulumunu başlatıyorum.

apt-get install mysql-server -y

Kurulum tamamlanınca mysql servisini “service mysql start” komutu ile çalıştırıp ardından “mysql_secure_installation” komutu ile mysql güvenli mod kurulumunu yapıyorum. Bu kurulumda mysql database sunucumuzun root parolasını belirliyoruz ve kurulumu tamamlıyoruz.

service mysql start
service mysql status
mysql_secure_installation

Zabbix 6.0 kurulum ekranındaki database oluşturma komutlarına bakıyorum ve yukarıdaki sarı ile işaretli olan Zabbix isimli database oluşturma komutunu kopyalıyorum.

create database zabbix character set utf8mb4 collate utf8mb4_bin;

İlgili komutu uyguluyorum ve artık Mysql Database içinde zabbix adında database oluşturmuş olduk.

Bizim bu zabbix isimli database’imize 2 yerden bağlantı olacak birisi Zabbix Server, diğeri ise Zabbix Frontend Server. Bu iki sunucu için zabbix database’e erişecek birer kullanıcı, şifre ve bağlanacakları IP adresleri için database üzerinde izin verme işlemini yapıyorum.

Zabbix Server için;

create user ‘zabbix-srv’@’192.168.1.150’ identified by ‘Tokat60!’;

grant all privileges on zabbix.* to ‘zabbix-srv’@’192.168.1.150’;

create user 'zabbix-srv'@'192.168.1.150' identified by 'Tokat60!';
grant all privileges on zabbix.* to 'zabbix-srv'@'192.168.1.150';

Zabbix Frontend Server için;

create user ‘zabbix-fe’@’192.168.1.200’ identified by ‘Tokat60!’;

grant all privileges on zabbix.* to ‘zabbix-fe’@’192.168.1.200’;

create user 'zabbix-fe'@'192.168.1.200' identified by 'Tokat60!';
grant all privileges on zabbix.* to 'zabbix-fe'@'192.168.1.200';

yukarıdaki komutları sırası ile mysql konsol üzerinde uyguluyorum.

SELECT user FROM mysql.user;
SELECT user,host FROM mysql.user;

Uyguladıktan sonra “SELECT user FROM mysql.user; ve SELECT user,host FROM mysql.user;” komutları ile kontrol ediyorum.

Ardından “nano /etc/mysql/mysql.conf.d/mysqld.cnf” komutu ile mysql konfigürasyon dosyasını açıyorum ve mysql sunucusunun dışarıdan erişimlere kapalı olan “bind-address” kısmını düzenliyorum. Mysql Database Sunucusu default kurulumda yalnızca localhost üzerinden bağlantıya izin verecek şekilde yapılandırılır o yüzden buradaki localhost IP adresini değiştirmeden dışarıdan hiçbir IP adresi üzerinden yetkiniz olsa dahi Mysql Database’e bağlanamazsınız.

nano /etc/mysql/mysql.conf.d/mysqld.cnf

İlgili satırı 0.0.0.0 olarak değiştirip kaydedip çıkıyorum.

Ardından “service mysql restart” komutu ile mysq restart ediyorum. (Buradaki ekran görüntüsünü yanlış almışım restart olacak)

service mysql restart

2-) Zabbix Server Sunucusunun Kurulması

Şimdi Zabbix Server kurulumu ile devam edelim.

Resmi dokümanın ekranında bize verilen kurulum komutundan sadece sarı ile boyalı olan kısımları uyguluyoruz. Dağınık kurulum yaptığımız için Zabbix Server için sadece yukarıdaki kısımlar gerekli.

wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1+ubuntu20.04_all.deb
dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb
apt update
apt install zabbix-server-mysql zabbix-sql-scripts zabbix-agent

İlgili komutları Zabbix-SRV sunucusunda sırası ile uyguluyorum.

İkinci komutu da uyguluyorum.

Resmi dokümanda zabbix database içine tablo şemalarının aktarıldığı bir kısım vardı daha önceki kurulumlardan hatırlarsanız “zcat” ile başlayan yukarıdaki komut. Şimdi bunun uygulamasını dağınık kurulumda biraz farklı yapıyoruz. Buradaki server.sql.gz dosyası Zabbix Server üzerinde var ancak Zabbix Database sunucusu üzerinde yok. İlk olarak bu dosyayı Zabbix Database sunucusuna alacağız ve orada yukarıdaki komutu çalıştıracağız. Bunun sebebi Mysql içindeki Zabbix Database içine Zabbix tablo şemasının aktarılmasıdır.

Gördüğünüz gibi Zabbix-SRV sunucusu içinde /usr/share/doc/zabbix-sql-scripts/mysql yolunda server.sql.gz dosyası duruyor.

Şimdi Zabbix-DB suncusuna geçiyorum ve bu dosyayı “scp -P 22 monitoring@192.168.1.150:/usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz /root” komutunu kullanarak Zabbix-SRV sunucusundan Zabbix-DB sunucusu /root dizinine çekiyorum. (Scp Linux sistemler üzerinde güvenli dosya kopyalama yöntemi) Benden hedef sunucunun ilgili kullanıcısı için şifre istiyor ve girip kopyalamayı tamamlıyorum. Artık server.sql.gz dosyası Zabbix-DB sunucusu /root dizininde.

scp -P 22 monitoring@192.168.1.150:/usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz /root

Şimdi yukarıdaki komutu “zcat server.sql.gz | mysql -uroot -p zabbix” şu şekilde düzelterek mysql root kullanıcısını kullanarak Zabbix isimli database üzerinde bu şema yazma işlemine geçiyorum.

zcat server.sql.gz | mysql -uroot -p zabbix

Benden parola istedi burda root kullanıcısı ile işlemi başlattığımız için mysql root kullanıcı şifremi giriyorum. Devamında 1-2 dakika bekleyip tekrar beni konsol ekranına atacak.

Tekrar konsol geldiğine göre işlem tamamlandı. Ancak kontrol etmekte fayda var.

Mysql database’e bağlanıyorum ve zabbix database seçerek “show tables” komutunu yazıyorum. Gördüğünüz gibi zabbix database içine ilgili tablolar yazılmış ve database şematik olarak kullanıma hazır.

Şimdi “nano /etc/zabbix/zabbix_server.conf” komutu ile Zabbix Server konfigürasyon dosyasını açıyorum.

Bizim yapılanmamıza göre yukarıdaki ilgili alanlara IP ve tanılamaları yazıyorum.

DBHost=192.168.1.100 IP adresini

DBName=zabbix (Database adını)

DBUser=zabbix-srv (Mysql üzerinde Zabbix Server için oluşturduğumuz parametrelerdeki user)

DBPassword=(Mysql üzerinde Zabbix Server için oluşturduğumuz parametrelerdeki şifre)

DBPort= Mysq server’a 3306 standar mysql portundan bağlanacağı için bunu bu şekilde yazıyoruz.

Son hali yukarıdaki gibi.

Zabbix Server konfigürasyon dosyasını kaydedip çıkıyorum.

Ardından “systemctl enable zabbix-server –now” komutu ile Zabbix Server’ı başlatıyorum.

systemctl enable zabbix-server –-now

Ardından “/var/log/zabbix/zabbix_server.log” yolundaki zabbix log dosyasına bakıyorum herhangi bir hata varmı diye. Mysql bağlantısında bazı hatalar görüyorum.

Zabbix-DB sunucusuna geçip mysql servisini yeniden başlatıyorum.

Tekrar “tail –f /var/log/zabbix/zabbix_server.log” ile kontrol ettiğimde zabbix loğlarına düşen herhangi bir bağlantı hatası görmüyorum. Zabbix Server artık çalışıyor.

tail –f /var/log/zabbix/zabbix_server.log

3-) Zabbix Frontend Sunucusunun Kurulması

Şimdi sıra Zabbix arayüzünü bize sunan Apache ve PHP tabanlı Frontend Sunucunun kurulmasında.

Resmi dokümandaki yukarıdaki sarı komutları alıyorum ve Frontend Server kurulumuna başlıyorum. Burada dikkat ettiyseniz Zabbix-Agent da kuruluma dahil ettim sebebi bu ajan ile Zabbix Frontend sunucusunun da monitör edilmesini sağlamak. Zaten tüm sunuculara ajan kuracağız.

wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1+ubuntu20.04_all.deb
dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb
apt update
apt install zabbix-frontend-php zabbix-apache-conf zabbix-agent

İlgili komutları ZABBIX-FE sunucusunda uyguluyorum.

Apache kurulumu yapıldıktan sonra ilk iş “/etc/zabbix/apache.conf”  dosyasındaki Time Zone ayarını düzeltmek.

nano /etc/zabbix/apache.conf

Devamında apache2 servisini enable edip başlatıyorum.

systemctl restart apache2

Şimdi browser üzerinden ZABBIX-FE(Frontend) sunucusunun IP adresini yazarak kurulumun son aşamasına geçebiliriz.

Bizi klasik Zabbix 6.0 kurulum ekranı karşıladı.

Pre-requisites ekranını kontrol ediyorum herhangi bir hata yok.

Burada Database Host, port, user ve password bilgilerini giriyorum. Makalenin başında Mysql Server’da zabbix database üzerinde yetkili 2 tane user açıp yetkilerini vermiştik burada onlardan zabbix-fe olanı giriyorum.

Ardından isim verip geçiyorum.

Next step diyerek devam ediyorum.

Kurulum tamamlandı.

Default şifremi giriyorum.

Karşımda dashboard ekranı ve ilk sorunumuzda bize bakıyor. 😊

İlgili sebepler içinde ilk olanı düzeltmek için “nano /etc/zabbix/web/zabbix.conf.php” komutunu yazarak zabbix.conf.php dosyasını Zabbix-FE sunucusunda açıyorum.

nano /etc/zabbix/web/zabbix.conf.php

Burada // (yorum satırı) olarak duran $ZBX_SERVER ve $ZBX_SERVER_PORT kısımlarını yorum satırından çıkartıp karşılarına Zabbix Server IP adresini ve port bilgisini yazıyorum.

$ZBX_SERVER           ='192.168.1.150';
$ZBX_SERVER_PORT      ='10051';

Bizim main sunucumuz 192.168.1.150 olduğu için onu yazıyorum ve default port bilgisini de ekliyorum.

Dosyayı  kaydedip çıkıyorum.

Ardından “systemctl restart apache2” komutu ile apache2 servisini restart ediyorum.

systemctl restart apache2

Tekrar frontend panele gelip sayfayı yenilediğimde hatanın düzelmesini bekliyorum.

Hata gitti ve kurulum tamamlandı.

Şimdi Host’lar içinde Zabbix Server’ımıza bakalım Ajan ile ilgili bir problemi var galiba.

Zabbix-SRV sunucusunda ajan durumunu kontrol ediyorum. Çalışmadığını görüyorum.

ZABBIX-SRV sunucusunda agent servisini yeniden başlatıyorum.

systemctl status zabbix-agent
systemctl enable zabbix-agent --now

Zabbix Server artık kendini izleyebiliyor.

Zabbix Server adında güncelleme yapıyorum ve Zabbix Server Main adını veriyorum.

Şimdi yukarıdaki komutları ZABBIX-DB sunucusunda uygulayıp Ajan kurulumunu yapalım ve Database Sunucumuzu da Host olarak izleyelim.

wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1+ubuntu20.04_all.deb
dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb
apt update
apt install zabbix-agent

Ajan kurulumu tamamlandı.

Zabbix-DB sunucusu üzerinde Zabbix-Agent kurulumuna geçiyorum. “nano /etc/zabbix/zabbix_agentd.conf” ile açıyorum.

nano /etc/zabbix/zabbix_agentd.conf

Server ve Server Active yazan kırımlara Zabbix Server IP (192.168.1.150) adresimi yazıyorum.

Ardından Zabbix Agent servisini enable yapıyorum ve başlatıyorum.

systemctl status zabbix-agent
systemctl enable zabbix-agent --now

Şimdi yeni bir Host oluşturalım ve Zabbix-DB sunucumunuz izlemeye alalım.

İlgili kısımları dolduruyorum ve kaydediyorum.

Aynı şekilde Zabbix-FE sunucusu içinde Zabbix Agent kurulumunu tamamlıyorum. Hatırlarsanız Zabbix-FE kurulumu sırasında Ajan kurulumunu da yapmıştık şimdi onun konfigürasyonlarını aynı DB sunucusunda olduğu gibi Agent konfigurasyon dosyasını düzenliyorum.

Onu da enable ediyorum.

Database Host bilgisini açıyorum ve Full Clone diyerek bir tane kopyasını alıyorum.

Ad, IP adress vs değişiklikleri kaydedip bu Host eklemeyi de tamamlıyorum.

Yukarıdaki gibi 3 farklı sunucu üzerinde koşan Zabbix Monitoring sistemimiz karşımızda. Zabbix bu 3 sunucuyu da Agent vasıtası ile monitör ediyor.

Sunucularımızın yakından görüntüsü.

Şimdi Zabbix Health Dashboard ekranımızı kontrol edelim. Gördüğümüz gibi hiçbir hareket oluşmamış. Burada bir şeyleri düzeltmemiz gerekli.

İlgili harita üzerine girip Data Set alanında isim değişikliği yaptığım için otomatik değişmeyen Zabbix Server Main sunucusunu seçiyorum.

Datalar gelmeye başladı. Bunu tüm bu ekrandaki haritalar için yapıyorum.

Sonunda tüm haritalardan data akışı başladı.

Herhangi bir sorun olmadan Zabbix sistem bileşenlerini birbirinden ayırarak kurulumu tamamladık. Bir sonraki makalede bu yapıya HA Cluster kurulumunu yapıyor ve 2 tane yedek Cluster üyesi Zabbix Server ekliyor olacağız.

Hoşçakalın.

One thought on “Zabbix Database, Server ve Frontend Sunucularının Ayrılması

  1. Mehmet

    Selamlar,
    Verdiğin bilgileri başka bir yerde bulamadım emeğin ve paylaşımın için çok teşekkürler.
    Sunucu olarak Red Hat Enterprise Linux 8.7 kullandım.(MySQL ve Apache)
    Uzun uğraşlar sonunda kurulumları tamamladım.Çalıştı 🙂
    Sıra HA Clustter yapıya geldi.
    https://www.suleymankaratas.net/zabbix-ha-cluster-kurulumu/ göre Main serverları HA yapacam ama DB ve FE içinde paylaşım yaparsan çok güzel olur.
    Kolaylıklar dilerim.

    Reply

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.