Bu yazıda Cihaz Yönetimi (Mico-Server) yedekli ortam kurulumu ve konfigürasyonlarını ele alacağız.
Aynı zamanda yedekli Liman ortamınız da mevcutsa senkronizasyonu için bu yazıdan yararlanabilirsiniz:
Liman MYS ve Eklenti Senkronizasyonu: Yüksek Erişilebilirlik için Temel Adımlar
Bu yapıda;
- HA Proxy
- ETCD
- Patroni
- Liman MYS
- Mico-server kullanılacaktır.
Yapacağımız örneğin mimarisi şu şekildedir:
Liman MYS ve Mico Server Kurulumu
Öncelikle Liman MYS kurulumu için aşağıdaki siteden gerekli adımları izleyebilirsiniz.
Sonrasında her iki sunucuda da Miço serverların kurulumunu gerçekleştirelim:
sudo apt install ./mico-x64.deb
Mico Database Backup Alınması
cd /tmp
sudo -u mico pg_dump mico > /tmp/mico_backup.sql
- Bu komut ile mico veritabanının yedeğini almış olduk.
Bu kurulumlar esnasında postgresql kurulumu otomatik olarak gerçekleşmektedir. Eğer ki Liman sunucusunda da bir Patroni bulundurup diğer Patroni'ler ile beraber çalışmasını isterseniz; postgresql sürümlerinin aynı olması gerekmektedir. Liman MYS postgresql 15, Mico server ise postgresql 14 kullanmaktadır. Biz örnek olması adına bu durum için yine de Mico sunucularımıza postgresql-15 kurulumu yaparak devam edeceğiz:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt install gnupg2 ca-certificates -y
wget -O- https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor > pgsql.gpg
sudo mv pgsql.gpg /etc/apt/trusted.gpg.d/pgsql.gpg
sudo apt update
sudo apt-get install postgresql-15
Patroni Kurulum ve Konfigürasyonları
Şimdi ise Mico sunucularımıza Patroni kurulumlarını gerçekleştirelim.
sudo apt update
sudo apt -y install patroni
PostgreSQL dosyalarına kolay erişebilmek için aşağıdaki gibi linkleyelim.
ln -s /usr/lib/postgresql/15/bin/* /usr/sbin/
Patroni için verilerin tutulacağı dizinleri oluşturup yetkilendirme işlemlerini gerçekleştirelim.
sudo mkdir -p /data/patroni
sudo chown -R postgres:postgres /data/
sudo chmod -R 700 /data/
İki node yapsı için de /etc/patroni.yml dosyasını oluşturup düzenleyelim:
sudo nano /etc/patroni.yml
scope: development
namespace: /db/
name: node-1
restapi:
    listen: 192.168.122.81:8008
    connect_address: 192.168.122.81:8008
etcd:
    host: 192.168.122.140: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 192.168.122.81/0 md5
    - host replication replicator 192.168.122.77/0 md5
    - host all all 0.0.0.0/0 md5
    users:
        admin:
            password: admin
            options:
                - createrole
                - createdb
postgresql:
    listen: 192.168.122.81:5432
    connect_address: 192.168.122.81:5432
    data_dir: /data/patroni
    pgpass: /tmp/pgpass
    bin_dir: /usr/lib/postgresql/15/bin
    authentication:
        replication:
            username: replicator
            password: '1'
        superuser:
            username: postgres
            password: '1'
    parameters:
        unix_socket_directories: '.'
tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false
İki node için de aslında aynı konfigürasyonu yapacağız, node-1 yerine node-2 ve IP bilgilerini değiştirmemiz yeterlidir.
Yine iki node için de Patroni servisinin dosyasını (/etc/systemd/system/patroni.service) aşağıdaki gibi oluşturabilir veya düzenleyelim.
[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ında servisi sistem açıldığında çalışacak şekide başlatmak için aşağıdaki komutları çalıştıralım:
systemctl daemon-reload
systemctl stop postgresql
systemctl restart patroni
systemctl status patroni
systemctl enable patroni
NOT: Bu etapta patroniniz çalışmayacaktır, etcd gibi diğer kurulumları gerçekleştirdikten sonra düzelmesi beklenir.
Postgresql servisini durdurup Patroni'yi başlatmış olduk.
Mico servisimiz şuanda Patroni ortamına bağlı çalıştığına göre; Patroni'de mico db'si oluşturalım:
// psql -U postgres -h 192.168.122.81 -p 5432
CREATE DATABASE mico;
CREATE USER mico WITH PASSWORD '1';
GRANT ALL PRIVILEGES ON DATABASE mico TO mico;
ALTER DATABASE mico OWNER TO mico;
Aldığımız yedeği de yine Patroni'ye restore edebiliriz:
psql -U mico -h 192.168.122.81 -p 5432 -d mico -f /tmp/mico_backup.sql
HAproxy Kurulum ve Konfigürasyonu
Liman sunucusunda HAproxy kurulumu gerçekleştirelim:
sudo apt install haproxy
sudo nano /etc/haproxy/haproxy.cfg
global
    log /dev/log local0
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon
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
    mode tcp
    default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
    server node-2 192.168.122.81:5432 maxconn 100 check port 8008
    server node-3 192.168.122.77:5432 maxconn 100 check port 8008
frontend http_frontend
    mode http
    bind *:7779 ssl crt  /etc/ssl/private/mico.pem alpn h2,http/1.1  ssl-min-ver TLSv1.2
    option http-server-close
    # set HTTP Strict Transport Security (HTST) header
    http-response add-header Strict-Transport-Security max-age=15768000
    default_backend http_servers
backend http_servers
    mode http
    balance roundrobin
    option ssl-hello-chk
    server backendserver1 192.168.122.81:7779 ssl verify none check
    server backendserver2 192.168.122.77:7779 ssl verify none check
Bu kısımda görmüş olduğunuz frontend http_frontend ve backend http_servers yapılandırmaları mico sunucularımız için haproxy ayarlarıdır.
- Frontend ayarında gördüğümüz /etc/ssl/private/mico.pem sertifikasını Haproxy sunucusunda üretmemiz gerekmektedir:
openssl req -x509 -newkey rsa:4096 -subj "/CN=$(hostname -I | cut -d" " -f1 | xargs)" -addext "subjectAltName=IP:$(hostname -I | cut -d" " -f1 | xargs),IP:127.0.0.1,DNS:$(hostname)" -keyout /etc/ssl/private/mico.pem -nodes -out /etc/ssl/private/mico.pem -sha256 -days 358000
root@sysadmin:/home/sysadmin# haproxy -f /etc/haproxy/haproxy.cfg -c
Configuration file is valid
Komutu ile de yapılandırmamızda sorun olup olmadığının kontrolünü sağlayabiliriz.
Şimdi ise haproxy'imizi restart edip durumunu kontrol edebiliriz:
systemctl restart haproxy
systemctl status haproxy
Etcd Kurulum ve Konfigürasyonu
sudo apt install etcd
- Komutu ile etcd kurulumu gerçekleştirebiliriz.
Sonrasında /etc/default/etcd dosyasını şu şekilde düzenleyelim:
ETCD_LISTEN_PEER_URLS="http://192.168.122.140:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://192.168.122.140:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.122.140:2380"
ETCD_INITIAL_CLUSTER="default=http://192.168.122.140:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.122.140:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
systemctl restart etcd
systemctl status etcd
systemctl enable etcd
Şu komut ile de cluster sağlıklarını gözlemleyebiliriz:
etcdctl cluster-health
Mico Sunucularının .env Ayarları
Mico sunucularında Database bilgilerini /opt/mico/.env içerisine girerek değiştirelim:
DB_HOST=192.168.122.140
DB_PORT=5000
DB_DATABASE=mico
DB_USERNAME=mico
DB_PASSWORD=1
DB_HOST bilgisi HAproxy'imizin adresidir.
DB_PORT bilgisi de HAproxy'de belirttiğimiz port bilgisidir. (bind *:5000)
Diğer database bilgileri ise bizim Patroni'de oluşturduğumuz Mico DB bilgileridir.
Son durumda kurulum ve konfigürasyonlarımızı bitirdik, Patroni ve Mico hizmetlerini yeniden başlatarak durumlarını kontrol edebiliriz:
systemctl restart mico@*
systemctl restart patroni
systemctl status mico@*
systemctl status patroni
root@sysadmin:/home/sysadmin# patronictl -c /etc/patroni.yml list
+ Cluster: development (7407394821390110066) ---+----+-----------+
| Member | Host           | Role    | State     | TL | Lag in MB |
+--------+----------------+---------+-----------+----+-----------+
| node-1 | 192.168.122.81 | Leader  | running   |  2 |           |
| node-2 | 192.168.122.77 | Replica | streaming |  2 |         0 |
+--------+----------------+---------+-----------+----+-----------+
- Komutu ile de node'larımızı ve durumlarını görüntüleyebiliriz.
Test Aşaması
Normalde mico serverlarımız için ajan kurulumu yaparken server IP bilgisi kullanılır. Bizim case'imize bakıldığında HAproxy üzerinden iki Mico servisine de eriştiğimiz için; Ajan kurulumunu yaparken HAproxy adresini kullanmalıyız:
#!/bin/bash
  wget "https://192.168.122.140:7779/client?os=linux&arch=amd64" -O "/tmp/mico-client.deb" --no-check-certificate
  echo mico mico/server_url string "https://192.168.122.140:7779" | sudo debconf-set-selections
  export DEBIAN_FRONTEND=noninteractive
  sudo apt install /tmp/mico-client.deb -y
  rm -rf "/tmp/mico-client.deb"
 

 
                      
 
    
Top comments (0)