Press "Enter" to skip to content

PostgreSQL 14 HA Yapı Kurulumu, Debian 11

Bu makalede debian 11 üzerinde pgsql 14 sürümünü HA yapı ile kurulum ve konfigürasyonunu yapacağız.

Bu yapıda pgsql, patroni, etcd ve ha proxy servislerini kullanacağız.

Genel olarak kullanacağımız servisler ve sunucular ;

1.server- pgsql için 1.nodemuz

2.server- pgsql için 2.nodemuz

3.server- etcd ve ha proxy için kullacağımız makinamız

Etcd ve ha proxy için ayrı makinalarda kurabilirsiniz, ben test için kurduğum için bu şekilde yaptım.


Öncelikle kafa karışıklığı olmaması adına makinalarıma hostname vereceğim ve hosts dosyalarını güncelleyeceğim. Benim yapım ;

yk-psql-node1     ipadresim1

yk-psql-node2     ipadresim2

yk-etcd-HA        ipadresim3

Bu şekilde /etc/hosts dosyalarımızı güncelliyoruz.


PGSQL SUNUCULARIMIZ İÇİN KURULUM ADIMLARI ;

PostgreSQL Kurulumu;

apt-get update -y && apt-get install -y gnupg2 -y

sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

apt-get update -y

apt-get install postgresql-14 postgresql-server-dev-14 -y

Pgsql kurulumunu yaptıktan sonra bu servisleri patroni devir alacağı için pgsql servislerini disable ediyorum ;

systemctl stop postgresql
systemctl disable postgresql

Patroni kurulumuna geçelim ;

Patroniyi kurduğumuzda, yukarıdaki kurduğumu pgsqlin toollarını kullanması gerekir. Bahsettiğimiz toolar default olarak ” /usr/lib/postgresql/versin/bin ” bu dizin altındadır.

Bunun içinde bir symlik oluşturalım ;

ln -s /usr/lib/postgresql/14/bin/* /usr/sbin/

Farklı bir version vs. kurduysanız path sizde farklı olabilir dikkat etmeniz gerekiyor.

Bu arada patroni dediğimiz şey, pgsql için bir cluster yönetim aracıdır. Dil olarak python kullanır. SQL sunucularınızı master ve replike olarak kullanmanıza olanak sağlar.

Kuralım ;

apt -y install python3 python3-pip

pip install --upgrade setuptools

pip install psycopg2

pip install patroni

pip install python-etcd

Şimdi 2 adet pgsql sunucumuz içinde bu işlemleri yaptık, pgsql ve patroni kurduk. Şimdi patroni için iki sunucu içinde ayrı ayrı bir config yapacağız.

Conf dosyamızı açıyoruz/oluşturuyouz;

nano /etc/patroni.yml

1.node server için ;

yk-psql-node1:
scope: postgres
namespace: /db/
name: yk-psql-node1

restapi:
    listen: node1-ipadresim:8008
    connect_address: node1-ipadresim:8008

etcd:
    host:  etcd-ve-HA-serverIP: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 replicauser 127.0.0.1/32 md5
    - host replication replicauser node1-ipadresim/32 md5
    - host replication replicauser node2-ipadresim/32 md5
    - host all all 0.0.0.0/0 md5

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

postgresql:
    listen: node1-ipadresim:5432
    connect_address: node1-ipadresim:5432
    data_dir: /psql/data
    pgpass: /tmp/pgpass
    authentication:
        replication:
            username: replicauser
            password: q1w2e3r4!!
        superuser:
            username: postgres
            password: r4e3w2q1**
    parameters:
        unix_socket_directories: '.'

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

Değişken olan kısımları zaten farklı renk ile belli ettim. Ben 2 nodelu bir yapı kuracağım. Yukarıdaki örnek conf 1.node um içindi. Aynısını alıp 2. sunucum içerisinde yapacağız. Sunucu ip adresi ve name kısımlarını değiştireceğiz.

Ek değiştirilebilir kısımlar olarak;

Ben datalarımı /psql/data/ dizininde tutmak istediğim için o şekilde belirledim, siz değiştirebilirsiniz. Replica ve postgres user pass kısmını değiştirebilirsiniz. Pg_hba kısımlarında da nodelarınızın ip adresinin olmasa dikkat etmeniz gerekiyor. User o ip adresinden bağlanabilmesi için bu izni vermeniz gerekiyor.

Yukarıda bahsettiğim verileri tutacağım dizini oluşturuyorum ;

mkdir -p /psql/data

ve sahipliğiniz postgres e veriyorum ;

chown postgres:postgres /psql/data

Şimdi patroni için sunucuda bir servis oluşturalım ;

nano /etc/systemd/system/patroni.service

Aşağıdaki parametreleri ekleyelim.

[Unit]
Description=High availability PostgreSQL Cluster
After=syslog.target network.target
[Service]
Type=simple
User=postgres
Group=postgres
ExecStart=/usr/local/bin/patroni /etc/patroni.yml
KillMode=process
TimeoutSec=30
Restart=no

[Install]
WantedBy=multi-user.target

systemctl daemon-reload

systemctl enable patroni

Etcd kurulumuna geçelim ;

Etcd patroni tarafında büyük önem taşır. Etcd servisine bir şey olması demek, HA yapınızında aslında hizmet verememesi anlamına gelir. Etcd bir key-value depolama yazılımıdır. Patroni içerisindeki nodelardan sorumludur ve bir problem olması durumunda hangi node’un ayakta olup hizmet verebilmesine karar verir.

apt install etcd -y

Editör ile açalım ;

nano /etc/default/etcd

Açtığınızda zaten içeride geçerli bir conf olmacaktır, aşağıdaki parametreleri, ip adreslerini kendi sunucu ip adresinize göre düzenleyip ekleyin.

ETCD_LISTEN_PEER_URLS="http://etcd-HA-ServerIPAdresiniz:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://etcd-HA-ServerIPAdresiniz:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://etcd-HA-ServerIPAdresiniz:2380"
ETCD_INITIAL_CLUSTER="default=http://etcd-HA-ServerIPAdresiniz:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://etcd-HA-ServerIPAdresiniz:2379"
ETCD_INITIAL_CLUSTER_TOKEN="yk-etcd-ha"
ETCD_INITIAL_CLUSTER_STATE="new"

systemctl restart etcd

Sona yaklaşıyoruz,

Pgsql sunucularında patroniyi startlayalım ;

systemctl start patroni

Durumunu kontrol edelim ;

systemctl status patroni

Bir problem yok ise ha proxy kurulumuna geçelim hemen.


HA Proxy Kurulumu ;

Ha proxy nedir ; aslında birden fazla amaç için kullanılır. HA , load balancer , proxy vb. amaçlar için kullanılır.

apt-get install haproxy -y

Kuralım ve editör ile açalım ;

nano /etc/haproxy/haproxy.cfg

Aşağıdaki config full içerik değildir. Sizin confunuz ile ilgili kısımlardaki parametleri karşılaştırıp, olmayanları ekleyip, eğer mevcutta var ise düzenlemelisiniz.

global
    maxconn 100

defaults
    log global
    mode tcp
    retries 2
    timeout connect 4s
    timeout client  30m
    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 yk-psql-node1 node1ipadresimiz:5432 maxconn 100 check port 8008
    server yk-psql-node2 node2ipadresimiz:5332 maxconn 100 check port 8008

/usr/sbin/haproxy -c -V -f /etc/haproxy/haproxy.cfg komutu ile conf dosyamızı doğruluyoruz.

Ek olarak yukarıdaki configde mode kısmın tcp yaptığımız için config dosyanızın içerisinde ” option httplog ” parametresi var ise onu #’leyebilirsiniz.

Her şey tamam ise restartlayalım > systemctl restart haproxy

Hadi PGSQL HA yapımıza bakalım ;

http://etcd_ha_serveripadresiniz:7000 ile tarayıcı ile bağlanın.

İşlem tamadır, test için node1 sunucumuzda ” systemctl stop patroni ” stop ederek, sayfamızı refresh edip test edebilirsiniz. Node2 kendini master olarak çalıştırmaya başlayacaktır.

Tabi postgresql’e bağlanmak içinde ” haserveripadresiniz:5000 ” portunu kullanmanız gerekiyor. Yapı her taraftan daha da geliştirilebilir tabi bu en basit seviyesi diyebiliriz.

Postgre sunucunuz içinde tuning yapmanızı öneririm, referans olarak ;

https://pgtune.leopard.in.ua/ burayı kullanabilirsiniz, kendi değerlerinizi girerek config alabilirsiniz. Çok yardımı olacaktır.

Saygılar, sevgiler.

0 0 votes
Makale Değerlendirmesi
Subscribe
Notify of
guest
0 Yorum
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x