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.
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.
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
Opsiyonel SnapShot Alma
Zabbix Server Makinasının sağ tarafında bulunan seçeneklere gelip 'SnapShots' a basalım.
Add Butonuna basarak SnapShot alabilirsiniz.
Klon alma
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.
Clone butonuna basarak işlemimizi gerçekleştiriyoruz.
İş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
komutunu kullanarak sunucumuza etcd kuruyoruz.
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.
ip a
Komutuyla ip adresinizi öğrenebilirsiniz.
Patroni Kurulumu
PostgreSQL Kurulumu
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.
sudo -u postgres psql
SELECT version();
sudo apt -y install patroni
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.
sudo -u postgres psql
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.
sed -i 's/<patroni01 ip adresi>/<ip adresinizi yazınız>/g' /etc/patroni.yml
Örnek:
sed -i 's/<patroni01 ip adresi>/192.168.1.142/g' /etc/patroni.yml
Şimdi Patroni verilerinin tutlacağı dosyaları oluşturabilriz.
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.
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
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.
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.
systemctl restart haproxy
haproxy düzgün çalışıyor mu diye kontrol ediyoruz.
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.
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.
zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
nano /etc/zabbix/zabbix_server.conf
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>
systemctl restart zabbix-server