pgbouncer — Bağlantı Havuzu
pgbouncer, Postgres Pro için bir bağlantı havuzudur. Herhangi bir uygulama, pgbouncer'a sanki doğrudan Postgres Pro sunucusuna bağlanıyormuş gibi bağlanabilir ve pgbouncer gerçek sunucuya bir bağlantı oluşturur veya daha önce kurulmuş bir bağlantıyı kullanır.
pgbouncer'ın amacı, Postgres Pro'ya yeni bağlantılar kurmanın maliyetlerini en aza indirmektir.
Açıklama
İşlem semantiğini bağlantı değiştirirken bozmamak için, pgbouncer birkaç havuz türünü destekler:
Oturum Havuzu
En doğru yöntem. Bir istemci bağlandığında, istemci bağlı kaldığı sürece ona bir sunucu bağlantısı atanır. İstemci bağlantısı kesildiğinde, bu sunucu bağlantısı havuza geri döner. Bu yöntem varsayılan olarak çalışır.
İşlem Havuzu
Sunucu bağlantısı, istemciye yalnızca bir işlem süresi boyunca atanır. pgbouncer işlemin tamamlandığını fark ettiğinde, bu bağlantı havuza geri döner.
Sorgu Havuzu
En agresif yöntem. Sunucu bağlantısı, her sorgu tamamlandıktan hemen sonra havuza geri döner. Bu modda birden fazla sorgu içeren işlemler yasaktır, çünkü çalışmayacaktır.
Yönetim Arayüzü
pgbouncer'ın yönetim arayüzü, özel bir "sanal" veritabanı olan pgbouncer'a bağlanırken kullanılabilen birkaç yeni SHOW komutundan oluşur.
Hızlı Başlangıç
pgbouncer, Postgres Pro Standard ile birlikte ayrı bir pgbouncer paketi olarak gelir. Temel yapılandırma ve kullanım aşağıda gösterilmektedir.
- pgbouncer.ini dosyasını oluşturun. Detaylı açıklama için yapılandırma bölümüne bakın.
- Kimlik doğrulama dosyasını oluşturun (auth_file parametresi).
- pgbouncer'ı başlatın:
pgbouncer pgbouncer.ini - Uygulamanızı pgbouncer'a bağlayın (varsayılan port 6432).
Yapılandırma
pgbouncer, pgbouncer.ini dosyası aracılığıyla yapılandırılır. Bu dosya, veritabanı bağlantı bilgilerini, havuz ayarlarını, kimlik doğrulama ayarlarını ve diğer parametreleri içerir.
Yapılandırma Bölümleri
pgbouncer.ini dosyası aşağıdaki bölümleri içerebilir:
[databases]— Veritabanı bağlantı bilgileri[pgbouncer]— pgbouncer ayarları[peers]— Eş düğümler (so_reuseport için)
Önemli Parametreler
| Parametre | Açıklama |
|---|---|
pool_mode |
Havuz modu: session, transaction, statement |
listen_port |
Dinleme portu (varsayılan: 6432) |
listen_addr |
Dinleme adresi |
auth_type |
Kimlik doğrulama türü: md5, scram-sha-256, hba, trust |
auth_file |
Kimlik doğrulama dosyası yolu |
auth_query |
Kimlik doğrulama için sorgu |
max_client_conn |
Maksimum istemci bağlantı sayısı |
default_pool_size |
Varsayılan havuz boyutu |
admin_users |
Yönetici kullanıcılar (virgülle ayrılmış) |
stats_users |
İstatistik kullanıcıları (virgülle ayrılmış) |
Kimlik Doğrulama
pgbouncer, çeşitli kimlik doğrulama yöntemlerini destekler. Kimlik doğrulama türü auth_type parametresi ile belirlenir.
Kimlik Doğrulama Dosyası
Kimlik doğrulama dosyası, auth_file parametresi ile belirtilir. Bu dosya, kullanıcı adlarını ve parolaları içerir. Parolalar düz metin veya MD5 hash formatında olabilir.
SCRAM formatındaki parolalar, yalnızca istemci SCRAM protokolü ile kimlik doğrulaması yapıyorsa, pgbouncer'daki veritabanı tanımında kullanıcı adı belirtilmemişse ve Postgres Pro sunucusundaki ve pgbouncer'daki SCRAM şifreleri aynıysa (yalnızca parola değil, aynı zamanda tuz ve yineleme sayısı da) kullanılabilir. Bu koşullar, SCRAM mekanizmasının doğasında bulunan bir özellikten kaynaklanır: SCRAM şifresinden kimlik doğrulama için gerekli veriler çıkarılamaz.
Kimlik doğrulama dosyası manuel olarak oluşturulabilir, ancak ayrıca başka bir kullanıcı ve parola listesinden de oluşturulabilir. pg_shadow tablosundan kimlik doğrulama dosyası oluşturan bir betik örneği olarak ./etc/mkauth.py yararlı olabilir.
Ayrıca, auth_file yerine auth_query kullanabilir ve böylece ayrı bir kimlik doğrulama dosyasından kaçınabilirsiniz.
auth_query Kullanımı
auth_query parametresi, kimlik doğrulama için bir sorgu belirtmenize olanak tanır. Bu, ayrı bir kimlik doğrulama dosyası kullanmadan kimlik doğrulama yapmanıza olanak tanır.
HBA Dosya Formatı
HBA dosyasının konumu auth_hba_file parametresi ile belirlenir. Bu dosya yalnızca auth_type 'hba' olarak ayarlandığında kullanılır.
Postgres Pro pg_hba.conf formatına karşılık gelir, Bölüm 19.1'de açıklanmıştır.
Desteklenen Özellikler
- Desteklenen kayıt türleri: local, host, hostssl, hostnossl
- Veritabanı alanında desteklenenler: all, sameuser, @dosya, birden fazla ad. Desteklenmeyenler: replication, samerole, samegroup
- Kullanıcı adı alanında desteklenenler: all, @dosya, birden fazla ad. Desteklenmeyenler: +groupname
- Adres alanında desteklenenler: IPv4, IPv6. Desteklenmeyenler: DNS adları, alan adı önekleri
- Kimlik doğrulama yöntemi alanında yalnızca pgbouncer'ın auth_type'da desteklediği yöntemler desteklenir, ayrıca peer ve reject, ancak yalnızca global olarak çalışan any ve pam hariç. Kullanıcı adı eşlemeleri (map=) desteklenmez.
Örnekler
Basit Yapılandırma Örneği
[databases]
template1 = host=localhost dbname=template1 auth_user=someuser
[pgbouncer]
pool_mode = session
listen_port = 6432
listen_addr = localhost
auth_type = md5
auth_file = users.txt
logfile = pgbouncer.log
pidfile = pgbouncer.pid
admin_users = someuser
stats_users = stat_collector
Veritabanı Örnekleri
[databases]
; Unix socket üzerinden foodb'ye bağlan
foodb =
; bardb'yi localhost'taki bazdb veritabanına yönlendir
bardb = host=localhost dbname=bazdb
; Hedef veritabanına tek bir kullanıcı erişecek
forcedb = host=localhost port=300 user=baz password=foo client_encoding=UNICODE datestyle=ISO
auth_query için Güvenli Fonksiyon Örneği
CREATE OR REPLACE FUNCTION pgbouncer.user_lookup(in i_username text, out uname text, out phash text)
RETURNS record AS $$
BEGIN
SELECT usename, passwd FROM pg_catalog.pg_shadow
WHERE usename = i_username INTO uname, phash;
RETURN;
END;$$ LANGUAGE plpgsql SECURITY DEFINER;
REVOKE ALL ON FUNCTION pgbouncer.user_lookup(text) FROM public, pgbouncer;
GRANT EXECUTE ON FUNCTION pgbouncer.user_lookup(text) TO pgbouncer;
Not: Bu örnekte CREATE OR REPLACE FUNCTION, plpgsql, SECURITY DEFINER, REVOKE ve GRANT komutları kullanılmıştır. Ayrıca pg_shadow tablosu kullanılmıştır.
so_reuseport için İki Eş Düğüm Yapılandırması
so_reuseport kullanarak çok çekirdekli bir pgbouncer yapısı oluşturmak için iki eş düğüm için yapılandırma örnekleri:
<strong>İlk süreç için yapılandırma:</strong>
[databases]
postgres = host=localhost dbname=postgres
[peers]
1 = host=/tmp/pgbouncer1
2 = host=/tmp/pgbouncer2
[pgbouncer]
listen_addr=127.0.0.1
auth_file=auth_file.conf
so_reuseport=1
unix_socket_dir=/tmp/pgbouncer1
peer_id=1
<strong>İkinci süreç için yapılandırma:</strong>
[databases]
postgres = host=localhost dbname=postgres
[peers]
1 = host=/tmp/pgbouncer1
2 = host=/tmp/pgbouncer2
[pgbouncer]
listen_addr=127.0.0.1
auth_file=auth_file.conf
so_reuseport=1
; Sadece unix_socket_dir ve peer_id farklı
unix_socket_dir=/tmp/pgbouncer2
peer_id=2