Yedekli Zabbix 6.2 Kurulumu (HAProxy, Patroni, PostgreSQL)

Doğukan Eren - Dec 13 '22 - - Dev Community

Bu yazıda birbiriyle yedekli çalışan Zabbix sunucuları ve veri tabanları kuracağız. Bu kurulumlarda Zabbix 6.2 ve veri tabanı olarak PostgreSQL kullanacağız. PostgreSQL veri tabanlarının yedekliliği için ise Patroni kurulumu gerçekleştireceğiz.

1- Ortamların Hazırlanması

Kurulum işlemlerini gerçekleştirebilmemiz için 2 Zabbix Sunucusu, 1 HAProxy sunucusu ve 2 tane de Veri tabanı yedekliliği için makinaya ihtiyacımız bulunmakta. Bir makinaya birden fazla görev yükleyerek daha az sayıda makinada da kurulum yapabilirsiniz ancak port çakışmaları ve yapıyı anlamak adına sorunlar oluşacağından şimdilik mümkün olduğunca yapıyı ayırmayı tercih ediyorum.

Ortamların kurulumunu VirtualBox veya istediğiniz bir sanallaştırma platformu üzerinde gerçekleştirebilirsiniz. Bu kurulumda VirtualBox üzerinde oluşturulmuş 5 makina üzerinden devam edeceğiz.

VirtualBox kurulumuna buradan ulaşabilirsiniz.

İşletim sistemi olarak istediğiniz bir Linux işletim sistemini kullanabilirsiniz, ben Ubuntu 20.04.5 LTS üzerinden anlatacağım.

Ubuntu 20.04.5 LTS kurulumuna buradan ulaşabilirsiniz.

Makinalardan bir tanesi üzerine Ubuntu kurulumu yaptıktan sonra, VirtualBox'ın Klonlama özelliğini kullanarak 4 tane yeni klon oluşturabilirsiniz veya Zabbix sunucusunu kurduktan sonra bir klon, Patroni nodelarından birini kurduktan sonra da diğer klonu alabilirsiniz.

Bu uygulamada bir sanal makina üzerine Ubuntu 20.04.5 LTS kurulumu gerçekleştirdikten sonra 2 tane de klonunu alarak toplamda 3 makineye sırasıyla Zabbix, HAProxy ve Patroni kurulumu yapacağız. Sonrasında patroni ve Zabbix makinalarının klonlarını alarak 5 makina ile devam edeceğiz.

2- IP ayarlamaları

VirtualBox üzerinden sanal makinamızın Bridge modda olduğundan emin olalım.

Image description

Not: İnterface Name alanı sizde farklılık gösterebilir. Ben internete USB üzerineden bağlandığım için usb0 olarak görünüyor. Sizde eno0 veya ensp0 gibi görünebilir normaldir. Ayrıca eğer bilgisayarınızda birden fazla network interface bağlıysa hangisi üzerinen bağlamak istiyorsanız onu seçebilirsiniz. Ancak tüm makinalarda aynı olmasına dikkat editmeyi unutmayın.

Bu işlemi yaptıktan sonra makinanızda 'ip a' komutunu çalıştırdığınızda ip adresinin değiştiğini görmelisiniz.

Bu işlemi başarılı bir şekilde yaptıysanız artık
'SSH' ile sunucuya baplanabiliriz.

Image description

3 - Zabbix Server Kurulumu

Zabbix Server kurulumuna buradan ulaşabilirsiniz.

Zabbix Server Kurulumundan sonra yedeği olacak makinayı da kısaca bu makşnanın klonunu alarak oluşturalım.

VirtualBox arayüzünü açalım

Image description

Opsiyonel SnapShot Alma

Zabbix Server Makinasının sağ tarafında bulunan seçeneklere gelip 'SnapShots' a basalım.

Image description

Add Butonuna basarak SnapShot alabilirsiniz.

Klon alma

sudo shutdown now
Enter fullscreen mode Exit fullscreen mode

Komutunu kullanarak makinamızı kapatıyoruz.

Sonrasında Makinanın üzerine bir defa tıklayı Ctrl + O tuş kombinasyonuna veya Fare ile sağ basarak Clone seçiyoruz.

Image description

Image description

Image description

Clone butonuna basarak işlemimizi gerçekleştiriyoruz.

Image description

İşlem sonucunda 2 zabbix sunucumuz olmuş oldu. Makinaya 2 defa tıklayarak çalıştırıyoruz.

Şu an elimizde 2 farklı Zabbix server, agent ve frontend bulunmakta.

5 - HAProxy ve ETCD Kurulumu

Bu kurulumda Ubuntu 20.04.5 LTS bir makina üzerinde HAProxy ve ETCD kurulumu gerçekleştiriyoruz.

ETCD kurulumu

sudo apt install etcd -y
Enter fullscreen mode Exit fullscreen mode

komutunu kullanarak sunucumuza etcd kuruyoruz.

nano /etc/default/etcd
Enter fullscreen mode Exit fullscreen mode

Komutunu çalıştırıyoruz ve dosyanın sonuna aşağıdaki satırları ekliyoruz.

ETCD_LISTEN_PEER_URLS="http://192.168.1.195:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://192.168.1.195:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.195:2380"
ETCD_INITIAL_CLUSTER="default=http://192.168.1.195:2380,"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.195:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

Enter fullscreen mode Exit fullscreen mode

Bu dosyayı eklerken 192.168.1.195 yerine kendi etcd sunucunuzun ip adresini yazmalısınız.

ip a
Enter fullscreen mode Exit fullscreen mode

Komutuyla ip adresinizi öğrenebilirsiniz.

Patroni Kurulumu

PostgreSQL Kurulumu

sudo apt install postgresql
Enter fullscreen mode Exit fullscreen mode

Postgresql apt ile kurulduğunda yazının yazıldığı tarih itibari ile 12 versiyonunu default oalrak kurmakta. Versiyonu kontrol etmek için aşağıdaki komutları sırasıyla çalıştırabilirsiniz.

sudo -u postgres psql
Enter fullscreen mode Exit fullscreen mode
SELECT version();
Enter fullscreen mode Exit fullscreen mode
sudo apt -y install patroni
Enter fullscreen mode Exit fullscreen mode
ln -s /usr/lib/postgresql/12/bin/* /usr/sbin/
Enter fullscreen mode Exit fullscreen mode

Şİmdi psql çalıştırmaya yetkili olan postgres kullanıcısına geçerek Patroni için gerekli kullanıcı ve Veri tabanı oluşturma işlemlerini gerçekleştireceğiz.

sudo -u postgres psql
Enter fullscreen mode Exit fullscreen mode
ALTER USER postgres PASSWORD '1';
CREATE USER replicator WITH ENCRYPTED PASSWORD '1';
Enter fullscreen mode Exit fullscreen mode

Yukarıdaki SQL scripti ile postgres kullanıcısının parolasını belirledik ve Patroni işlemleri için kullanılacak replicator kullanıcısı oluşturduk.

Buraya kadar olan aadımları 2 Patroni makinasında da yapıyoruz (ip adresleri farklı olacak şekilde)

Sonrasında /etc/patroni.yml dosyalasını iki makinada da oluşturup aşağıdaki gibi düzenliyoruz.

Örnek yml dosyası:

scope: postgreskume
namespace: /db/
name: patroni01

restapi:
    listen: <patroni01 ip adresi>:8008
    connect_address: <patroni01 ip adresi>:8008

etcd:
    host: <etcd ip adresi>:2379

bootstrap:
    dcs:
        ttl: 30
        loop_wait: 10
        retry_timeout: 10
        maximum_lag_on_failover: 1048576
        postgresql:
            use_pg_rewind: true

    initdb:
    - encoding: UTF8
    - data-checksums

    pg_hba:
    - host replication replicator 127.0.0.1/32 md5
    - host replication replicator <patroni01 ip adresi>/0 md5
    - host replication replicator <patroni02 ip adresi>/0 md5
    - host all all 0.0.0.0/0 md5

    users:
        admin:
            password: admin
            options:
                - createrole
                - createdb

postgresql:
    listen: <patroni01 ip adresi>:5432
    connect_address: <patroni01 ip adresi>:5432
    data_dir: /data/patroni
    pgpass: /tmp/pgpass
    authentication:
        replication:
            username: replicator
            password: Parola01.!
        superuser:
            username: postgres
            password: Parola01.!
    parameters:
        unix_socket_directories: '.'

tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false

Enter fullscreen mode Exit fullscreen mode

Aşağıdaki komutu kullanarak kendi ip adresinizi bu dosyada değiştirebilirsiniz.

sed -i 's/<patroni01 ip adresi>/<ip adresinizi yazınız>/g' /etc/patroni.yml
Enter fullscreen mode Exit fullscreen mode

Örnek:

sed -i 's/<patroni01 ip adresi>/192.168.1.142/g' /etc/patroni.yml
Enter fullscreen mode Exit fullscreen mode

Şimdi Patroni verilerinin tutlacağı dosyaları oluşturabilriz.

sudo mkdir -p /data/patroni
sudo chown -R postgres:postgres /data/
sudo chmod -R 700 /data/
Enter fullscreen mode Exit fullscreen mode

Aşağıdaki komutu çalıştırarak Patroni servis dosyasını hazırlıyoruz.

nano /etc/systemd
Enter fullscreen mode Exit fullscreen mode

Editörde aşağıdaki dosyaları yapıştırıyoruz. (Ctrl + Shift + v)

[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target

[Service]
Type=simple

User=postgres
Group=postgres

ExecStart=/usr/bin/patroni /etc/patroni.yml
KillMode=process
TimeoutSec=30
Restart=no

[Install]
WantedBy=multi-user.targ
Enter fullscreen mode Exit fullscreen mode

Sonrasından Patroni servisini yeniden başlatıyoruz.

systemctl daemon-reload
systemctl stop postgresql
systemctl restart patroni
systemctl restart postgresql
systemctl status patroni
systemctl status postgresql
systemctl enable patroni
systemctl enable postgresql
Enter fullscreen mode Exit fullscreen mode

HAProxy Kurulumu


sudo apt install haproxy

Enter fullscreen mode Exit fullscreen mode

Komutuyla HAProxy kurulumu gerçekleştiriyoruz. Bu yazıda etcd e HAProxy aynı makinaya, zabbixleri ve patronileri de ayrı makinalara kurmayı tercih etim, siz ihtiyaçlarınız doğrultusunda kurabilirsiniz.

nano /etc/haproxy/haproxy.cfg
Enter fullscreen mode Exit fullscreen mode

Editör ile HAProxy konfigürasyon dosyasını 5000 portu züerinden karşılayacak şekilde düzenliyoruz. (PostgreSQL servisi 5432 portunu default olarak kullanır.)

global
    maxconn 1000

defaults
    log global
    mode tcp
    retries 2
    timeout client 30m
    timeout connect 4s
    timeout server 30m
    timeout check 5s

listen stats
    mode http
    bind *:7000
    stats enable
    stats uri /

listen postgres
    bind *:5000
    option httpchk
    http-check expect status 200
    default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
    server postgresql01 <patroni01 ip>:5432 maxconn 100 check port 8008
    server postgresql02 <patroni02 ip>:5432 maxconn 100 check port 8008

Yapılan
Enter fullscreen mode Exit fullscreen mode

Konfigürasyonların geçerli olamsı için haproxy servisini yeniden başlatıyoruz.

systemctl restart haproxy
Enter fullscreen mode Exit fullscreen mode

haproxy düzgün çalışıyor mu diye kontrol ediyoruz.

systemctl status haproxy
Enter fullscreen mode Exit fullscreen mode

Zabbix Konfigürasyonarı

Önceki yazımdaki gibi Zabbix Kurulumu yaptığınız zaman, zabbix sunucusunun olduğu makinada bir Postgresql suncusu da oluşturup onun züerine de zabbix veri tabanını kurmuştuk. Şimdi ise 2 farklı Veri tabanımız bulunmakta. Veri tabanına ulşamak için HAProxy ve etcd kurulu olan makinanın yukarıdan dda ayarladığımız port olan 5000 portuna bağlanarak ulşacağız. Bu adımdan önce ise Patroni makinalarına Zabbix kullanıcı ve Veri tabanı oluşturmamız gerekmektedir.

Aşağıdaki komutları çalıştırarak patronilere zabbix veri için gerekli kullnıcıyı ve veri tabanını oluşturuyoruz.

Zabbix makinalarından birine giriş yapıyoruz ve aşağıdaki komutları çalıştırıyoruz.

psql -h <haproxy ip> -p 5000  -U postgres -W

create user zabbix with encrypted password 'zabbix';

create database zabbix;

grant all privileges on database zabbix to zabbix;
Enter fullscreen mode Exit fullscreen mode

Sonrasında da aşağıdaki komutu çalıştırıyoruz.


zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix

Enter fullscreen mode Exit fullscreen mode
nano /etc/zabbix/zabbix_server.conf
Enter fullscreen mode Exit fullscreen mode

Bu dosyada aşağıdaki alanları uygun şekilde değiştiriyoruz.

DBHost=<haproxy ip adresi>
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBPort=<ha portu 5000>
Enter fullscreen mode Exit fullscreen mode
systemctl restart zabbix-server
Enter fullscreen mode Exit fullscreen mode
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .