Zabbix HA Cluster Kurulumu

By | 29 Mart 2022

Merhaba,

Bu makalemizde aşağıdaki gibi kurguladığımız yapıda ilk olarak HA Cluster özelliğini aktif edeceğiz ve devamında yapıya yedeklilik kazandırmak için 2 tane daha Zabbix Server ekleyeceğiz.

Mevcut yapının nasıl hazırlandığını buradaki link üzerinden okuyabilirsiniz.

Şimdi elimizdeki sunucularımıza birlikte bakalım.

  1. Zabbix-DB   (192.168.1.100)
  2. Zabbix-SRV (192.168.1.150)
  3. Zabbix-FE    (192.168.1.200/zabbix)

Gördüğünüz gibi şuanda çalışan yapıda yukarıdaki 3 sunucu koşmakta. Biz bu sisteme HA Cluster özelliğini ekleyerek aşağıdaki 2 sunucuyu daha dahil edeceğiz.

  • Zabbix-SRV2   (192.168.1.160)
  • Zabbix-SRV3   (192.168.1.170)

Tüm sunucular üzerinde Ubuntu 20.04 LTS işletim sistemi kurulu ufw devre dışı bırakıldı, selinux disable konumda.

Dashboard ekranından Global View’a baktığımızda High Availability Cluster Disable olarak görüntülüyoruz.

Zabbix Server Main sunucumuz 192.168.1.150 IP adresi üzerinde çalışıyor kendisini ise 127.0.0.1 localhost üzerinden monitör ediyor. Diğer DB ve FE sunucularımızı da yukarıda görüntülüyorum.

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

1-) HA Cluster Özelliğinin Aktif Edilmesi

Şimdi ilk olarak HA Cluster özelliğini aktif ederek işlemlerimize başlıyorum.

Zabbix 6.0 ile konfigürasyon dosyasının son satırına  #High Availability cluster parameters# alanı eklendi. Şimdi Zabbix-SRV (102.168.1.150) IP adresli sunucuda

nano /etc/zabbix/zabbix_server.conf

komutu ile konfigurasyon dosyasını açıyorum ve en alt kısımdaki ilgili parametre kısmına geliyorum.

Burada HA Cluster özelliğini aktif etmek için 2 parametreye müdahale edeceğiz.

  1. HANodeName (Cluster’a dahil olan Node adı)
  2. NodeAddress  (Cluster’a dahil olan Node IP Adresi)

Bu sunucu bizim Main sunucumuz olduğu için tanımlamalarını yukarıdaki gibi yapıyorum.

  1. HANodeName=zabbix-server-node-main
  2. NodeAddress=192.168.1.150:10051 (kendi IP Adresini yazıyoruz)

Dosyayı kaydedip çıkıyorum ve

systemctl restart zabbix-server

komutu ile Zabbix-Server servisini restart ediyorum.

Şimdi tekrar Global View ekranına geldiğimde HA Cluster özelliğinin Enable olduğunu görüyorum. Tek sunucu ile HA Aktif olmuş durumda.

Reports > System information sekmesinden ise HA Cluster ortamına eklenen Node’lara bakıyorum. Node Name olarak konfigürasyon dosyasında verdiğimiz HANodeName=zabbix-server-node-main yazıyor ve IP adresi olarak da kendi IP adresini görüyorum. Status olarak da Active yani çalışıyor.

Yakından görüntüsü yukardaki gibi.

Şimdi HA Cluster özelliğini aktif ettiğimize göre Zabbix-FE sunucusundaki “/etc/zabbix/web/zabbix.conf.php” dosyasındaki 2 parametreyi düzeltmemiz gerekiyor. Buradaki dokümanda bu şekilde anlatılmış.

Mevcut olarak yukarıdaki gibi olan kısmı başına // koyarak yorum satırına çevirerek kaydediyoruz.

Ardından

systemctl restart apache2

komutu ile FE sunucusunda apache2 serverı yeniden başlatıyorum.

Frontend panele geldiğimde herhangi bir hata almıyorum. Normalde “/etc/zabbix/web/zabbix.conf.php” dosyasındaki buradaki parametre olmadan bir önceki makalede hata alıyorduk. Şuan HA devrede olduğu için bu hatayı almadan yolumuza devam edebiliyoruz.

2-) HA Cluster Ortamına Yeni Node Eklenmesi

Şimdi aktif olan bu HA Cluster yapımıza yeni bir Zabbix Server ekleyelim.

Zabbix-Srv2 (192.168.1.160) IP adresli yeni ekleyeceğim sunucumu açıyorum. Sunucu üzerinde hiçbir şey kurulu değil. Ufw devre dışı, Selinux Disable.

Yukarıdaki gibi boş ve hazır durumda.

Yeni bir sunucuyu eklemek için ona resmi dokumandaki sarı ile işaretlediğim komut kısımlarını uygulamamız yeterli. Burada sadece Zabbix Server ve Agent kurulumu yapmış oluyoruz.

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-agent

Komutları boş sunucuda sırası ile uyguluyorum.

Şimdi bu sunucunun konfigürasyon dosyasını düzenlemeden önce bunun da Zabbix Database sunucusuna ve “zabbix” isimli db’ye erişebileceği bir user ve yetkiye ihtiyacımız var. Bu yetki işlemini yine database üzerinde yukardaki komut ile uyguluyoruz.

create user 'zabbix-srv2'@'192.168.1.160' identified by 'Tokat60!';
grant all privileges on zabbix.* to 'zabbix-srv2'@'192.168.1.160';
create user 'zabbix-srv3'@'192.168.1.170' identified by 'Tokat60!';
grant all privileges on zabbix.* to 'zabbix-srv3'@'192.168.1.170';

Zabbix-DB sunucumu açıyorum ve hem Zabbix-SRV-2 hem de Zabbix-SRV-3 için bu user ve yetki komutunu giriyorum. Burada Cluster ortamına ekleyeceğimiz 2 sunucu için DB tarafındaki tüm işlemi toplu olarak yapmış olduk. Zabbix-SRV-3 için tekrar bu ekrana dönmeyeceğim.

Yeni sunucum olan Zabbix-SRV-2 için konfigürasyon dosyasını artık düzenleyebilirim.

DBHost=192.168.1.100 (Database sunucu IP Adresini yazıyorum)

DBName=zabbix (Database adımızı yazıyorum)

DBUser=zabbix-srv2 (Bu şekilde oluşturmuştuk)

DBPassword= Tokat60! (Bu şekilde oluşturmuştuk)

DBPort=3306 (Database sunucumuzun erişim portu)

Yukardaki alanlara gerekli bilgileri girdikten sonra konfigürasyon dosyasının en altına ilerliyorum. HA Cluster ayarlarını yapmaya başlıyorum.

Bu Node HA Cluster’ın 2. Node’u olacağı için;

  1. HANodeName=zabbix-server-node-2
  2. NodeAddress=192.168.1.160:10051 (kendi IP Adresini yazıyoruz)

Yukarıdaki gibi 2 parametreyi yazıyorum ve dosyayı kaydedip çıkıyorum.

Zabbix Server sistemini enable ediyorum ve başlatıyorum.

systemctl enable zabbix-server --now

Reports > System information sekmesinden Cluster Node ekranına baktığımda yeni eklediğim Zabbix-SRV-2 Node buraya gelmiş oluyor. Cluster’a Node eklemek işte bu kadar kolay! 😊 Standby konumda hazır olarak bekliyor.

Aynı işlemleri Zabbix-SRV-3 sunucusunda da yapıyorum.

Konfigurasyon dosyasını edit’liyorum.

  1. HANodeName=zabbix-server-node-3
  2. NodeAddress=192.168.1.170:10051 (kendi IP Adresini yazıyoruz)

Cluster bilgilerini giriyorum.

Sistemi enable ederek başlatıyorum.

systemctl enable zabbix-server --now

Oda Cluster ekranına gelmiş durumda. Artık HA Cluster yapımda toplam 3 sunucu ile hizmet verebileceğim.

Main sunucu Active durumda diğer 2 sunucu ise Standby olarak bekliyor.

Şimdi Cluster ortamını çalıştıralım ve ortalık biraz şenlensin. 😎 Zabbix-SRV yani main sunucuda Zabbix Server servisini “systemctl stop zabbix-server” komutu ile durduruyorum. Bu komut ile monitoring yapan main sunucum durmuş oluyor ve normal şartlarda Frontend panelde “Zabbix Server is not running” gibi bir uyarı almam gerekiyor.

Cluster devreye girdi ve Zabbix-SRV-2 olan sunucu anında rolü üzerine aldı. Monitoring kesintiye uğramadan devam ediyor.

Aynı şekilde 2. Sunucuda da

systemctl stop zabbix-server

komutu ile servisi durduruyorum.

Şimdi 3. Sunucu Rolleri üzerine aldı. Harika bir şekilde çalışıyor. 😎

Alarm ekranında ise Cluster Node değişim alarmları geldi. Her şey yolunda.

3-) HA Cluster Ortamında Agent Ayarları

Şimdi hizmet veren toplam 3 tane sunucumuz oldu ve sırası ile kapattığımızda hazırda bekleyenler görevi devralarak hizmeti devam ettirdi. Peki monitör ettiğimiz Agent’ların bundan haberi var mı ?

Maalesef yok. O yüzden her bir agent konfigürasyon dosyasına giderek yeni Cluster Node IP adreslerini yazmamız gerekiyor ki ilgili Node devreye giren Cluster sunucusuna data aktarımını devam ettirebilsin.

Örneğin Zabbix-SRV main sunucusuna Agent data yollarken bu sunucu down olduğunda SRV-2 veya SRV3 görevi aldığında bu aktarımı ona devam etmesini monitör ettiğimiz Agent konfigürasyon dosyasından yapmamız gerekiyor.

Şimdi Zabbix-DB sunucuma gidiyorum ve Agent konfigürasyon dosyasını açıyorum.

Server=192.168.1.150 olarak sadece tek Zabbix-SRV main sunucusu olan kısma artık 2 Cluster Server IP adresini de eklemem gerekiyor aralarına virgül koyarak sırası ile ekliyorum.

Server=192.168.1.150,192.168.1.160,192.168.1.170

ServerActive=192.168.1.150,192.168.1.160,192.168.1.170

Olarak düzenliyorum ve kaydediyorum.

Düzenlememi tamamlıyorum.

Aynı işlemi Zabbix-SRV (Main) sunucu Agent dosyasında da yapıyorum.

Burada da tüm düzeltmeleri bitirip kaydediyorum. Bu işlemi aşağıdaki tüm Sunucu Agent dosyalarında yapıyorum.

  1. Zabbix-DB (192.168.1.100)
  2. Zabbix-SRV (192.168.1.150)
  3. Zabbix-FE (192.168.1.200)
  4. Zabbix-SRV2 (192.168.1.160)
  5. Zabbix-SRV3 (192.168.1.170)

Tüm kayıt işleminden sonra

systemctl restart zabbix-agent

komutunu çalıştırmamız gerekiyor. Agent konfigürasyonu değiştiği için bunu yapmamız gerekli.

Şimdi Zabbix-SRV Main Host’u güncelleyelim ve IP adresini 127.0.0.1 localhost’dan kendi IP adresine çevirip düzeltelim.

Devamında bir Full Clone alalım ve Cluster ortamına yeni eklediğimiz 192.168.1.160 IP Adresli Zabbix-Server-Node-2 yi ekleyelim.

Aynı şekilde devam edelim.

Zabbix Server Node-3 Sunucusunu da ekliyorum.

Tüm Zabbix Infrastucture sunucularım kendi IP adresleri ise sistemde ve Agent vasıtası ile monitör ediliyor aynı zamanda da izleniyor. İzlemeye önce kendinden başla! (Güzel söz yazdım bunu 😂)

Buda aktiflik durumu. Hepsi yeşillendi.

Cluster durumunu komut satırından kontrol etmemiz için

zabbix_server -R ha_status

komutunu verebiliriz.

Bu komutu sadece Aktif çalışan Server üzerinde verdiğinizde cevap alabiliyorsunuz. Pasif Server üzerinde cevap gelmiyor bilginiz olsun.

Global View ekranında Zabbix Server Health grafiklerinde tüm Zabbix Cluster sunucuların seçilmesi gerekiyor ki down olan sunucunun yerine geçen sunucudan grafik’ler devam etsin.

4-) Gerçek HA Failover Testi

Şimdi geldik en heyecanlı kısma. 😎 Gerçekten bir sunucuyu tamamen kapatıp Zabbix HA Cluster ortamının buna tepkisine bakalım.

Ana sunucuyu Hyper-V ortamından küt! diye kapatıyorum. 😮

Frontend panelde yukarıdaki gibi bir hata çıkıyor ve sakince bekliyorum. Hiçbir şeye müdahale etmiyorum sadece sayfayı yeniliyorum. Yaklaşık 30-40 saniye bu şekilde sürüyor.

Müdahale etmeden bekliyorum.

Failover delay süresi 1dk olduğu için gerçekten de 1 dk içinde sistem Down olan sunucuyu algılıyor ve yerine Cluster ortamından başka bir sunucuyu geçiriyor. Kapattığımız sunucu için de “unavailable” yazıyor. Her şey yolunda.

Buradaki işlemin herhangi bir sunucudaki zabbix-server servisini durdurduğumuzdaki gibi saniyeler içinde olmaması gayet normal. Servis durdurarak sistem dışına attığımız sunucu o anda henüz Network’den kopmadığı için sadece servisi durduğu için Cluster Node değişimi çok hızlı oluyor. Bu şekilde çalışan bir sunucuyu küt diye kapatınca onun sistem dışına düştüğünü Cluster üyesi diğer sunucular 1dk içinde DB den check ediyor ve anca algılıyor. Bu süre kısaltılabilir mi? Evet ancak çok yüklü sistemlerde zaten saniyede akan data sayısı çok falza olduğu için ne kadar azaltsanız da sistemlerin o sırada bunu algılaması yine dakika bazında süreyi bulabilir. O yüzden be bu şekilde bırakıyorum.

Yukarıdaki gibi ana sunucu kapalı durumda ve sistem çalışmaya devam ediyor.

Host ekranından durumuna da bakalım.

Availability de kırmızıya döndü.

Genel görünüm.

Alarmlar da gelmiş durumda.

Uzun bir yazı dizisinin sonuna geldik. Eğer buraya kadar okuduysanız ve Zabbix için yeni bir özellik olan HA Cluster mimarisini anladıysanız ne mutlu bana.

Başka bir yazıda görüşmek üzere. 😎

8 thoughts on “Zabbix HA Cluster Kurulumu

  1. Kemal

    Selamlar,

    Kaleminize sağlık. Bir sonraki yazıda harita ekleyip lokasyonlar üzerinde görsel bir şov yapmak mı olacak?

    Teşekkürler,

    Reply
  2. semih

    Selamlar,
    Yazın ve verdiğin bilgiler için ellerine sağlık ve çok teşekkür ederim. Bir sorum olacak benim size.
    Burada main serverları HA yaptık ya DB ve FE içinde herhangi bir düşüncen var mı?
    Bende bir tık Zabbix ile ilgilenmeye başladım ama ayrıntılı araştırma yapmadan önce sana danışayım dedim.

    Frontend’leri ve BD’leride HA yapmayı düşünsek sen nasıl yapardın?

    Kolaylıklar dilerim.

    Reply
    1. admin Post author

      Merhaba,
      Yorum için teşekkür ederim.
      Sistemin full HA çalışması mümkün. Ben bu makaleyi yayınladığımda Zabbix 6.0 native HA yeni çıkmıştı ve resmi dokümanlarda çok fazla bilgi yoktu.
      DB ve FE için HA yapılabilir bunu linux sistemler üzerinde HA Proxy ve keepalived kurarak yapmak mümkün bunları araştırırsan yapabilirsin. DB tarafında bir DBA ile çalışman faydalı olacaktır. Mysql master-slave veya master olarak kurgulanabilir.

      Reply
      1. Alexey

        You can use Patroni postgresql as HA DB cluster(3 nodes and 2 ha-proxy with keepalived, tested – works fine). Frontend can be used as 2 nginx with vrrp or keepalived

        Reply
        1. admin Post author

          Thanks for your advice. When I write this blog post, Zabbix Native HA was newly poblished and there is any documents about HA installation. Many people wrote and said to me that they have known about the keepalived. This is good solution and I also used it on my many projects.(keepalived). Other hand, on database side working with an HA cluster is almost different specialist area. I think DBA admins must setup the HA cluster for production.

          Reply
  3. Mert

    Selamlar,

    Öncelikle güzel anlatımınız için teşekkürler, böyle temiz ve Türkçe döküman bulmak gerçekten çok zor. Aklıma takılan bir nokta var HA Cluster setup’ında FE,SRV1, SRV2 ve DB makinesi ayrı olacak şekilde bir HA yapısı hazırlamak istiyorum fakat burada aklıma takılan bir konu var. FE makinesini ayırdığımda server ip girmem gerekiyor burada node1 bilgisinin girilmesi gerektiğini yazmışsınız, node1 down olduğunda FE makinesi node2 makinesine nasıl yönlenecek bunu db ile iletişime geçerek mi anlamakta? Yapıyı kurmadan önce bu sorunu çözmek istiyorum. Desteğin için teşekkürler şimdiden.

    Reply
    1. admin Post author

      Merhaba,
      Bunun makalesi bloğumda mevcut, Server,DB ve FE nin nasıl ayrıldığını uyguladıktan sonra aynı yapıyı HA kurulumunda devam ederek anlattım. Dikkat edersen orada FE içine yazdığım ip adresini yapı HA olunca kaldırıyorum. Neden böyle yaptığımıda kaynak dokümanı paylaşarak yazdım.
      Keyifli okumalar.

      Reply

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir