PgBouncer Kurulumu ve Yapılandırılması
Pgbouncer Postgresql üzerinde en iyi performans gösteren bağlantı yönetim sistemidir. Postgresql her bir connection için sunucu üzerinden belli oranda memory kaynak ayırır. Bu connectionlar ne kadar çok olursa performans da bir o kadar etkileyecektir. Pgbouncer bu connection bağlantılarını yönetir ve ayrıca istatistik gibi bilgileri bizim için toplar.
Bu yazıda Ubuntu 22.04 LTS üzerine Pgbouncer kurulumu ve yapılandırılmasını ele alacağız. Pgbouncer postgresql reposu ile otomatik olarak geldiği ekstra bir paket eklenmesine gerek yoktur. Pgbouncer varsayılan olarak 6432 portunu kullanır. Pgbouncer aktif kullanabilmek için uygulama servislerinizin DB bağlantı portunu değiştirmeniz gerekmektedir.
PgBouncer Kurulumu
# Pgbouncer kurulumunu yapıyoruz.
apt install pgbouncer -y
# Pgbouncer yapılandırması için ini dosyasını düzenliyoruz.
nano /etc/pgbouncer/pgbouncer.ini
PgBouncer Yapılandırması
Pgbouncer için oldukça detaylı olarak yapılandırma seçenekleri mevcut. Aşağıdaki linkten bunların detaylarını inceleyebilirsiniz. Biz burada sadece başlıca ayarlamaların üzerinden geçeceğiz. Ayrıca kullanıcıların md5 formatında “userlist.txt” dosyasının çıktısını alacağız.
pool_mode: Pool yönetiminin nasıl yapılandırılacağını belirler.
session: Bu modda her istemci bağlantısı birbirinden bağımsızdır ve ayrı bir oturum olarak işlenir. (Varsayılan)
transaction: Bu modda her istemci bağlantısı bir PostgreSQL işlemi olarak işlenir.
statement: Bu modda her istemci bağlantısı bir SQL ifadesi olarak işlenir.
default_pool_size: PgBouncer da kullanılacak varsayılan bağlantı havuzu boyutunu belirler. Bağlantı havuzu boyutu PgBouncer’in aynı anda kaç tane PostgreSQL bağlantısını kabul edebileceğini belirler.
reserve_pool_size: Yedek bağlantı havuzu boyutunu belirleyen bir yapılandırma seçeneğidir ve beklenmedik yük artışlarına karşı koruma sağlayarak daha iyi performans ve yüksek kullanılabilirlik sağlar.
max_client_con: Bir poolun maximum kaç clientı karşılayacağını belirtir.
# nano /etc/pgbouncer/pgbouncer.ini
[databases]
* = port=5432
[pgbouncer]
pool_mode = session
listen_addr = *
default_pool_size = 100
reserve_pool_size = 20
max_client_con = 500
admin_users = user2, someadmin, otheradmin, pgbouncer, postgres
ignore_startup_parameters = extra_float_digits
# Kayıt edip çıkış yapıyoruz.
# Aşağıdaki kod ile kullanıcılar userlist.txt dosyasına kullanıcıları aktarıyoruz.
psql -Atq -h localhost -p 5432 -U postgres -d postgres -c "SELECT concat('\"', usename, '\" \"', passwd, '\"') FROM pg_shadow" >> /etc/pgbouncer/userlist.txt
# Ayarların geçerli olması için reload yapıp. Servisi restartlıyoruz.
systemctl reload pgbouncer
systemctl restart pgbouncer
# Statüsünü kontrol ediyoruz
systemctl status pgbouncer
Bağlantı Kontrol ve İzleme
Pgbouncer ile sisteme bağlantı sağlayıp pool yönetimini izleyelim.
# psql ile pgbouncer portu üzerinden bağlantı sağlayalım.
# Burada Veritabanına normal şekilde bağlanıyor.
# Artık DB işlerinizi bu port üzerinden gerçekleştirebilirsiniz.
psql -p 6432
# psql ile pgbouncer manager bağlantı sağlayalım.
psql -p 6432 pgbouncer
# psql listelem formatını değiştirelim.
\x
# Pool yönetimini izleyelim.
show pools;
# İstatistik bilgilerini incele.
show stats;
# Daha fazlası için.
show help;
Sistemde çok fazla bağlantınız olmasını bekliyorsanız. Pgbouncer tarafında “ERROR accept() failed: Too many open files
” şeklinde hata alabilirsiniz. Bu hatanın nedeni kullanıcının limitinden kaynaklanmaktadır. Pgbouncer servis file aşağıdaki komutlarını ekleyin. Kendine göre değerleri değiştirebilirsiniz.
nano /lib/systemd/system/pgbouncer.service
[Service]
LimitNOFILE=64000
LimitNOFILESoft=64000