PostgreSQL 18 üzerinde PgBouncer aktifleştirme

Merhabalar arkadaşlar bu yazımda sizlere PostgreSql 18 üzerinde PgBouncer‘ın kurulumu ve yapılandırmasını yaparken yararlı olacak bilgiler vereceğim.

PgBouncer Nedir?

PostgreSql sistemlerinizde kullanabileceğiniz, OS bazında çok fazla yükü olmayan ve Database‘lerinize bağlantı sırasında bir havuz oluşturarak (Connection Pool), Optimize etmenizi, Performansı artırmanızı, Kaynak kullanımını azaltmanızı ve Yönetmenizi sağlayan bir araçtır diyebiliriz.

Önemli Not : PSQL18 tarafında kurulumlarınızın ve ayarlamalarınızın yapılmış olmasına dikkat etmelisiniz. Erişim izinleri gibi konularda da aynı şekilde ayarlamaları yapmalısınız. Önceki yazılarımdan bunlarıda bulabilirsiniz.

Kurulumunu nasıl yapıyoruz?

sudo apt update
sudo apt install pgbouncer -y
systemctl enable pgbouncer
systemctl status pgbouncer

Bu satırlar Kurulum için yeterli olacaktır.

PgBouncer configuration’ın da ise aşağıdaki gibi ilerliyorum.

nano /etc/pgbouncer/pgbouncer.ini
[databases]
* = host=localhost port=5432
[users]
;user1 = pool_size=5 reserve_pool_size=2 pool_mode=transaction max_user_connections=10 max_user_client_connections=20
;; Configuration section
[pgbouncer]
pidfile = /var/log/postgresql/pgbouncer.log
logfile = /var/run/postgresql/pgbouncer.pid
listen_addr = 0.0.0.0
listen_port = 6432
;; any, trust, plain, md5, cert, hba, pam
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
admin_users = postgres
stats_users = stats, root, postgres
pool_mode = transaction
server_reset_query = DISCARD ALL
ignore_startup_parameters = extra_float_digits
server_check_delay = 30
max_client_conn = 400
default_pool_size = 30
min_pool_size = 5
reserve_pool_size = 5
reserve_pool_timeout = 5
max_db_connections = 50
max_user_connections = 50
log_connections = 1
log_disconnections = 1
log_pooler_errors = 1
server_idle_timeout = 300

Açıklamalar :

[database] altındaki ayarlar ile localhost‘ta bulunan psqldeki tüm DB’lere bağlantı sağlayabilirsiniz. Buradaki örnekler çoğaltılabilir.

* = host=psql1 port=5432 psql1 dbsine yönlendirilir ve orada tüm db’ye bağlanır. * yerine db adı yazarsanız ise sadece o db için bağlantı yapacaktır.

[users] bu alanda herhangi bir ayar yapmadım ama kullanıcı bazlı olarak özel ayarların yapılacağı alandır.

[pgbouncer] altındaki ayarlamaları anlatmam gerekirse :

– logfile pgbouncer‘ın tüm loglarının yazıldığı dosyayı ve pidfile Process ID‘lerin tutulduğu dosyaların alanlarını belirledim.

– listen_addr ve listen_port ayarlamaları ile pgbouncer‘ın dinleyeceği ipleri belirledim. 0.0.0.0 ile tüm ipleri dinle anlamına gelmektedir. Port bilgiside bu bağlantılarda kullanılır.

– auth_type ile md5 hash ile şifre doğrulama, auth_file ile de kullanıcı ve password bilgilerinin bulunacağı dosyayı belirledim.

– admin_users kısmında ise belirlediğiniz kullanıcılara Show pools; , show users; , RELOAD; gibi yönetici komutlarına yetkileri olur.

– stats_users alanına girilen kullanıcılarda istatistik komutlarını çalıştırabilirler.

– pool_mode bu alanda da transaction modunu seçtim, çünkü Transaction bitince bağlantı havuza geri döndürülür. Session da ise oturum kapatılana kadar devam eder. her sql komutunu ayrı ayrı çalıştıran ise statement‘tır. her komudu ayrı bağlantılarda, tek tek sırayla çalıştırır.

– server_reset_query bu ayarıda DISCARD ALL yaparak bağlantı bittikten sonra tamemen temizlenmesini sağladık.

– ignore_startup_parameters = extra_float_digits Client bağlantısında bu parametre gelmesi durumunda yok sayılır. Bu parametre psql12+ dan sonra otomatik olarak gönderilir ve PgBouncer bunu kabul etmediği bağlantı sağlamaz. Bu ayarı yaparsak ise böyle bir sorun olmayacaktır.

– server_check_delay ayarı ile PSQL‘ye sağlık kontrolü yapar.

– max_client_conn ile istemci bağlantı sayısı belirleriz. Bu sayı ile kişi başı bağlantı sayısı aşıldıktan sonra diğer bağlantıları Queue da yani sırada bekleyecektir.

– default_pool_size her bağlantı için maksimum açılacak havuz sayısını belirleriz.

– min_pool_size boşta bile olsa bekletilecek olan havuz sayısıdır.

– reserve_pool_size acil durumlarda kopmaların olmasını engellemek için yedekte bekletilen pool‘lardır.

– reserve_pool_timeout girilen değer kadar client bağlantının boşaltılmasını bekler

– max_db_connections her db için açılacak max bağlantı sayısıdır.

– max_user_connections kullanıcı başı sahip olunabilecek bağlantı sayısıdır.

– log_connections clientların bağlantısı log‘a işlenir.

– log_disconnections aynı şekilde kapandığında yazılır.

– log_pooler_errors havuz ile ilgili tüm hatalar da aynı şekilde log’a yazılır.

– server_idle_timeout

PSQL tarafında kullanıcı oluşturma : Kullanıcı ayarlamaların da ise aşağıdaki gibi ilerliyorum. PSQL18 kullandığım için postgres kullanıcımıza şifre veriyorum ve artı olarak bir kullanıcı daha oluşturuyorum.

- ALTER USER postgres WITH PASSWORD 'sistemdostu';
- CREATE USER monitor WITH PASSWORD 'sistemdostu' INHERIT;
GRANT pg_monitor TO monitor;

PGBouncer Kullanıcıları listesi : Daha sonra tabi ki bu kullanıcıları pgbouncer içerisinde kullanabilmek için userlist.txt dosyasına eklememiz gerekiyor. Aşağıdaki komudu kullanarak bu kullanıcıları ekletiyorum. Bu sayede eklenen kullanıcıların password bilgileri de SHA-256 SCRAM ile hash’lenmiş olarak eklenecektir. Kullanıcıların ekleneceği dosya ise nano /etc/pgbouncer/userlist.txt ’dir.

psql -Atq -h localhost -p 5432 -U postgres -d postgres -c "SELECT concat('\"', usename, '\" \"', passwd, '\"') FROM pg_shadow" >> /etc/pgbouncer/userlist.txt

Bu eklediğiniz şekilde çalışmaz ise aşağıdaki gibi direk olarak kullanıcı adı ve şifre ile dosyaya ekleyin.

“postgres” “sistemdostu”

bu ayarlamaları yaptıktan sonra pgbouncer programımıza restart atmamız gerekiyor. Bunuda aşağıdaki komutlarla yapabilirsiniz.

systemctl enable pgbouncer
systemctl restart pgbouncer
systemctl status pgbouncer

Kurulum ve yapılandırmamız tamamlanmıştır. Şimdi ise DBVeawer ya da benzeri yöntemler ile port numarası 6432 olacak şekilde database’inize bağlanmayı deneyebilirsiniz.

Kolaylıklar dilerim.

Bir yanıt yazın

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