Yedekli Zabbix 6.2 Kurulumu (HAProxy, Patroni, PostgreSQL)
Tags: beginners, tutorial, linux, opensource
Published: 2022-12-13 05:15:35

   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](https://dev.to/aciklab/pardus-21-sunucu-kurulumu-part-1-sanal-makine-olusturma-ve-makine-ayarlari-1c2e) 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](https://dev.to/aciklab/pardus-21-sunucu-kurulumu-part-2-45e4) 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rxs80bkhsz2it5effcz3.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/npd8g8u99hediolxkn98.png)

# 3 - Zabbix Server Kurulumu

Zabbix Server kurulumuna **[buradan](https://dev.to/aciklab/ubuntu-2004-sunucuya-zabbix-62-kurulumu-zabbix-server-frontend-agent-3816)** 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qb2ttkasigjv7thz6h29.png)

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

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x7q4r0q4j74zi9d1ftup.png)

**Add** Butonuna basarak SnapShot alabilirsiniz.

## Klon alma

``` bash
sudo shutdown now
```
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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gyjt0vqk16ekri1jkkng.png)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/715lllh1wiz2a5d2bu3e.png)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pxzowuoq9pfhje90tnci.png)


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


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/el05ghlc9r7d6m5fmsba.png)

İş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

``` bash
sudo apt install etcd -y
```

komutunu kullanarak sunucumuza etcd kuruyoruz.

``` bash
nano /etc/default/etcd
```

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"

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

``` bash
ip a
```
Komutuyla ip adresinizi öğrenebilirsiniz.

## Patroni Kurulumu

### PostgreSQL Kurulumu

``` bash
sudo apt install postgresql
```

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.

``` bash
sudo -u postgres psql
```
``` sql
SELECT version();
```


``` bash
sudo apt -y install patroni
```

``` bash
ln -s /usr/lib/postgresql/12/bin/* /usr/sbin/
```

Şİ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.

``` bash
sudo -u postgres psql
```

``` sql
ALTER USER postgres PASSWORD '1';
CREATE USER replicator WITH ENCRYPTED PASSWORD '1';
```

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

```

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

``` bash
sed -i 's/<patroni01 ip adresi>/<ip adresinizi yazınız>/g' /etc/patroni.yml
```
Örnek:
``` bash
sed -i 's/<patroni01 ip adresi>/192.168.1.142/g' /etc/patroni.yml
```

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

``` bash
sudo mkdir -p /data/patroni
sudo chown -R postgres:postgres /data/
sudo chmod -R 700 /data/
```

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

``` bash
nano /etc/systemd
```
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
```

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

## HAProxy Kurulumu

``` bash

sudo apt install haproxy

```

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.

``` bash
nano /etc/haproxy/haproxy.cfg
```

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
```
Konfigürasyonların geçerli olamsı için haproxy servisini yeniden başlatıyoruz.

``` bash
systemctl restart haproxy
```
haproxy düzgün çalışıyor mu diye kontrol ediyoruz.

``` bash
systemctl status haproxy
```

# 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.

``` bash
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;
```

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

``` bash

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

```

``` bash
nano /etc/zabbix/zabbix_server.conf
```

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

``` bash
DBHost=<haproxy ip adresi>
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBPort=<ha portu 5000>
```

```
systemctl restart zabbix-server
```