Anasayfa » PostgreSQL Patroni Cluster Kurulumu-HAProxy-PGBouncer- Part3

PostgreSQL Patroni Cluster Kurulumu-HAProxy-PGBouncer- Part3

PostgreSQL Patroni Cluster Kurulumu

Bu yazımızda PostgreSQL Patroni Cluster Kurulumu yazı serimizin 3. bölümü yani HAProxy ve PGBouncer kurulum ve yapılandırmasını adım adım anlatacağım. Öncelikle yazı serimizin başında paylaştığım mimariyi hatırlayalım.

Daha önceki Part1 ve Part 2 yazılarımızda database ve patroni kurulumlarını tamamlamıştık. Aşağıdaki linklerden erişebilirsiniz.

PostgreSQL Patroni Cluster Kurulumu-Part1

PostgreSQL Patroni Cluster Kurulumu-ETCD-PATRONI-Part2

Bu yazımızda haprxypb sunucumuzdaki kurulum ve yapılandırmalarını yapacağım. Benim ortamımda kaynak sıkıntısı olduğu ve isterleri karşıladığı için HAProxy ve PgBouncer servislerini tek makinede yapılandırmayı tercih ettim. Kaynak probleminiz yoksa bu servisleri ayrı sunucularda konumlandırmanız daha doğru olacaktır. Evet şimdi HAProxy kurulumu le başlayalım.

HAProxy Nedir?

HAProxy (High Availability Proxy), yüksek trafikli sistemlerde yük dengeleme (load balancing) ve yüksek erişilebilirlik (high availability) sağlayan açık kaynaklı bir çözümdür. Özellikle veri tabanı sistemlerinde trafiği birden fazla sunucuya dağıtmak için sıklıkla tercih edilir.

  • HAProxy Kurulumu

Öncelikle HAProxy servisini kuruyoruz.

sudo yum install haproxy -y
  • HAProxy.conf Dosyasının Düzenlenmesi

HAProxy kurulumundan sonra default olarak conf dosyası /etc/haproxy/haproxy.cfg olarak gelmektedir. Şimdi bu dosyayı değiştirmeden önce yedeğini alıp değişiklikleri yapmanız daha iyi olacaktır. Daha sonra aşağıdaki gibi değişiklik yapıp kaydediyoruz.

sudo vi /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     1000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats

defaults
    mode                    tcp
    log                     global
    option                  tcplog
    retries                 3
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout check           10s
    maxconn                 900

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

listen postgres
    bind 192.168.26.104:5432
    option httpchk
    http-check expect status 200
    balance roundrobin
    default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
    server postgres1 192.168.26.101:5432 maxconn 1000 check port 8008
    server postgres2 192.168.26.102:5432 maxconn 1000 check port 8008
    server postgres3 192.168.26.103:5432 maxconn 1000 check port 8008

Yapılandırma Açıklamaları:

global ve defaults blokları genel ayarları içerir.

listen stats: 7000 portundan erişilebilen bir web arayüzü sağlar.

listen postgres: HAProxy üzerinden PostgreSQL’e gelen TCP bağlantılarını dengeler.

httpchk ve check port 8008: PostgreSQL node’larının sağlık durumunu kontrol etmek için kullanılır.

  • HAProxy Servisini Başlatma ve Etkinleştirme

Değişiklikleri kaydettikten sonra HAProxy servisini başlatın ve sistem açılışında otomatik başlatılması için enable edin:

sudo systemctl enable haproxy
sudo systemctl start haproxy
sudo systemctl status haproxy
  • HAProxy İstatistik Arayüzüne Erişim

Web tarayıcımızdan aşağıdaki adrese giderek istatistik arayüzüne ulaşabilirsiniz. Burada hangi sunucumun leader olduğu ve diğer istatistikleri görebiliriz:

http://192.168.26.104:7000/

Evet Buraya kadar HAProxy ile yük dengeleme adımlarının nasıl yapılacağı ve kurulum adımlarını tamamlamış olduk. PGBouncer kurulumları ile devam edelim.

PGBouncer Nedir?

Yüksek trafikli PostgreSQL sistemlerinde bağlantı sayısı arttıkça veritabanı sunucusu zorlanmaya başlar. Bu gibi durumlarda bağlantı havuzu (connection pooler) kullanmak, hem sistem kaynaklarını korur hem de performansı artırır. PgBouncer, PostgreSQL için geliştirilmiş, hafif, hızlı ve popüler bir bağlantı havuzlayıcısıdır.

PgBouncer, veritabanına yapılan istemci bağlantılarını ön yüzünde karşılayarak bir bağlantı havuzu oluşturur. Böylece:

  • PostgreSQL sunucusunun bağlantı yükü azalır.
  • Bağlantı yönetimi hızlanır.
  • Uygulamalardaki “too many connections” hatalarının önüne geçilir.

  • PgBouncer Kurulumu

PgBouncer repomuzda var ise doğrudan yum install ile kurulum yapacağız.

sudo yum install pgbouncer.x86_64
  • PgBouncer Yapılandırması

Yapılandırma dosyaları genellikle aşağıdaki dizindedir:

  • Genel Conf Dosyası: /etc/pgbouncer/pgbouncer.ini
  • Kullanıcı kimlik bilgileri: /etc/pgbouncer/userlist.txt

Conf dosyasını düzenleyelim: pgbouncer.ini dosyasını yedekleyip aşağıdaki gibi yeni bir dosya oluşturup işlem yapabilirsiniz.

vi /etc/pgbouncer/pgbouncer.ini
[databases]
postgres = host=192.168.26.104 port=5432 dbname=postgres user=postgres
		
[pgbouncer]
		
logfile = /var/log/pgbouncer/pgbouncer.log
pidfile = /var/run/pgbouncer/pgbouncer.pid
listen_addr = *
listen_port = 6432
auth_type = scram-sha-256
auth_file = /etc/pgbouncer/userlist.txt
admin_users = postgres
stats_users = stats, postgres
ignore_startup_parameters = extra_float_digits
max_client_conn = 100
default_pool_size = 100
reserve_pool_size = 50
  • Kullanıcı Bilgilerini Tanımlama

PgBouncer, bağlantı kurulacak veri tabanı kullanıcılarının şifrelerini userlist.txt dosyasından okur. Bu dosyaya kullanıcı ve şifresini yazmamız gerekiyor. Buradaki şifre direkt olarak yazılabileceği gibi scram-sha-256 formatta da yazılabilmektedir. Biz scram-sha-256 formatta yazacağız. Bu işlem için database e bağlanıp aşağıdaki gibi pg_shadow ile şifrenin scram-sha-256 formatı oluşturulmalıdır.

select '"'||usename||'" "'||passwd||'"' from pg_catalog.pg_shadow where usename='postgres';

Aşağıdaki gibi bir çıktı verecektir bu çıktıyı userslist.txt dosyasına ekliyoruz.

"postgres" "SCRAM-SHA-256$4096:ZMVbQi+ddHm9xP+4fdldkflkdh+l444/nRLxDTKB1X1D9c0dV2aEJX7tuEl35I=:="
sudo vi /etc/pgbouncer/userlist.txt
"postgres" "SCRAM-SHA-256$4096:ZMVbQi+ddHm9xP+4fdldkflkdh+l444/nRLxDTKB1X1D9c0dV2aEJX7tuEl35I=:="
  • PgBouncer Servisini Başlatma

Yapılandırma tamamlandıktan sonra servisi etkinleştirip başlatabiliriz:

sudo systemctl enable pgbouncer
sudo systemctl start pgbouncer

Kurulum ve ayarlamalarımız tamam şimdi PGBouncer ile bağlantı testi yapalım.PgBouncer arayüzüne bağlanmak için port olarak 6432 kullanılmalıdır:

psql -h 192.168.26.104 -p 6432 -U pgbouncer
pgbouncer=#\x
		
# Pool yönetim izleyelim.
show pools;

# İstatistik bilgiler incele.
show stats;
		
# Daha fazlası için.
show help;
  • Aşağıda PGBouncer için bazı önemli parametrelerin açıklaması verilmiştir. Bizim ortmamızda bu parametrelerin bazıları set edilmiş olup sizin kuracağınız ortamda ihtiyaç halinde kullanabilirsiniz.

1.Genel Parametreler:

listen_addr: Bağlantıların dinleneceği IP adresi. 0.0.0.0 tüm IP'leri, 127.0.0.1 yalnızca localhost'u temsil eder.
    Örnek:
    listen_addr = 0.0.0.0

listen_port:pgbouncer'ın dinleyeceği port numarası (varsayılan PostgreSQL portu 5432'dir).
    Örnek:
    listen_port = 6432

auth_type:Kimlik doğrulama türünü belirler.
    Yaygın seçenekler:
    trust: Şifre olmadan kabul eder.
    plain: Şifre düz metin olarak gönderilir.
    md5: MD5 hash tabanlı kimlik doğrulama.
    
    Örnek:
    auth_type = md5

auth_file: Kimlik doğrulama bilgiler içeren dosyanın yolu. Genellikle şifrelerin bulunduğu pg_hba.conf yerine kullanılan bir dosyadır.
    Örnek:
    auth_file = /etc/pgbouncer/userlist.txt

2.Performans Parametreleri:

pool_mode:pgbouncer bağlantılarının nasıl yönetileceğini belirler:
    session: Bir oturum süresince bağlantıyı tutar (default).
    transaction: Her işlem için yeni bir bağlantı kullanır.
    statement: Her SQL komutunda bağlantı açar ve kapar.    
   Örnek:
    pool_mode = transaction

max_client_conn:Aynı anda kaç istemcinin bağlanabileceğini belirler.
    Örnek:
    max_client_conn = 100

default_pool_size: Her hedef veri tabanı için açılacak maksimum bağlantı sayısı.
    Örnek:
    default_pool_size = 20

min_pool_size:Bağlantı havuzunun asgari boyutu. Belirtilmezse bağlantılar talep üzerine oluşturulur.
    Örnek:
    min_pool_size = 5

reserve_pool_size:Bağlantılar tükendiğinde acil durum için ayrılmış bağlantı sayısı.
    Örnek:
    reserve_pool_size = 5

reserve_pool_timeout:Bekleme kuyruğunda ne kadar süreliğine bir istemcinin acil durum bağlantısını alabileceğini belirtir (saniye).
    Örnek:
    reserve_pool_timeout = 5.0

3.Gecikme ve Zaman Aşımı Ayarları:

idle_transaction_timeout:Bir işlem bağlantısı boşta kaldığında ne kadar süre sonra bağlantının kapatılacağını belirler.
    Örnek:
    idle_transaction_timeout = 60

query_timeout:Bir sorgunun tamamlanması gereken maksimum süre (saniye).
    Örnek:
    query_timeout = 300

client_idle_timeout:Bir istemci bağlantısının boşta bekleyebileceği maksimum süre (saniye).
    Örnek:
    client_idle_timeout = 300

server_idle_timeout:Sunucu bağlantısının kullanılmadığı zaman kapatılacağı süre.
    Örnek:
    server_idle_timeout = 600

connect_timeout:Sunucu bağlantısının kurulması için beklenen maksimum süre.
    Örnek:
    connect_timeout = 15

4.Loglama ve İzleme Parametreleri

log_connections:İstemci bağlantı girişler kaydetmek için:0 veya 1 ile kapalı/açık olarak ayarlanır.
    Örnek:
    log_connections = 1

log_disconnections:İstemci bağlantılarının kapanmasını kaydeder.
    Örnek:
    log_disconnections = 1

log_pooler_errors:Havuzlama hatalarını günlüğe kaydetmek için: 0 veya 1 ile kapalı/açık.
    Örnek:
    log_pooler_errors = 1

log_stats:İstatistiklerin belirli aralıklarla günlüğe kaydedilmesi.
    Örnek:
    log_stats = 60

PostgreSQL Patroni Cluster Kurulumu-HAProxy-PGBouncer- Part3 yazımızda HAProxy ve PgBouncer kurulumunu ve 3 sunuculu bir PostgreSQL kümesi için TCP tabanlı yük dengeleme ve pooling yapılandırmasını adım adım gerçekleştirdik. HAProxy sayesinde veri tabanı sisteminiz artık daha dengeli ve yüksek erişilebilir hale geldi. Aynı zamanda PgBouncer sayesinde de, PostgreSQL sistemlerinin ölçeklenebilirliğini artırır ve bağlantı sayısının yönetimini kolaylaştırır.

PostgreSQL Patroni Cluster Kurulumu-Part1

PostgreSQL Patroni Cluster Kurulumu-ETCD-PATRONI-Part2

Resmi dökümantasyon için tıklayınız.

More Reading

Post navigation

Leave a Comment

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir