PostgreSQL, güçlü bir açık kaynaklı ilişkisel veri tabanı yönetim sistemi olarak geniş bir kullanım alanına sahiptir. Özellikle bulut tabanlı veya çok kullanıcılı sistemlerde, ağ ve bağlantı yönetimi, veri tabanı performansı, güvenliği ve erişilebilirliği açısından kritik bir rol oynar. Bu makalede, PostgreSQL instance’larının ağ yapılandırması ve bağlantı yönetimi için temel prensipler ve en iyi uygulamalar ele alınacaktır.
PostgreSQL Instance Nedir?
PostgreSQL instance, PostgreSQL veri tabanı sunucusunun bir çalıştırma örneğidir. Bu, sunucunun bellekte çalışan süreçlerini ve bir veya daha fazla veri tabanını kapsar. Bir instance, aynı zamanda kullanıcıların veri tabanına erişimini sağlamak için kullanılan ağ ve bağlantı yapılandırmalarını içerir.
Ağ Yönetimi (Network Management)
PostgreSQL’in birden çok istemci tarafından erişilebilir olması için ağ yapılandırmasının doğru şekilde yapılması gerekir. İşte temel adımlar:
1. Postgresql.conf Dosyasının Yapılandırılması
postgresql.conf dosyası, PostgreSQL’in ağ davranışlarını kontrol eder. Bu dosyada şu parametreler üzerinde durulmalıdır:
• listen_addresses:
PostgreSQL’in hangi IP adreslerinde dinleyeceğini belirler.
• Varsayılan değer: localhost (sadece yerel bağlantılar).
• Tüm IP adreslerinde dinlemek için:
listen_addresses = ‘*’
• Yalnızca belirli IP adreslerinde dinlemek için:
listen_addresses = ‘192.168.1.100, 127.0.0.1’
• port:
PostgreSQL’in dinlediği bağlantı noktasıdır. Varsayılan olarak 5432 kullanılır, ancak birden fazla instance çalıştırıyorsanız her biri için farklı port seçilmelidir.
port = 5433
2. Güvenlik Duvarı (Firewall) Ayarları
PostgreSQL’in doğru çalışması için sunucunun dinlediği portun (varsayılan: 5432) güvenlik duvarında açık olması gerekir. Ancak yalnızca gerekli IP adreslerine izin vererek erişimi sınırlandırmak önemlidir. Örnek:
Linux iptables ile:
iptables -A INPUT -p tcp –dport 5432 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp –dport 5432 -j DROP
3. DNS ve Ağ Katmanları
Büyük sistemlerde, PostgreSQL sunucusunun bir alan adı veya sabit bir IP adresiyle çalışması önerilir. Bu, istemci bağlantılarının doğru şekilde yönlendirilmesini sağlar. Örneğin:
• Sunucu adı: db.example.com
• DNS yapılandırması ile sabit IP ataması yapılabilir.
Bağlantı Yönetimi (Connection Management)
PostgreSQL, birden çok istemcinin aynı anda bağlanmasına olanak tanır. Ancak, bağlantı yönetimi performans, güvenlik ve ölçeklenebilirlik açısından optimize edilmelidir. İşte önemli hususlar:
1. pg_hba.conf Dosyası ile Erişim Kontrolü
PostgreSQL’de istemcilerin erişimini kontrol etmek için pg_hba.conf dosyası kullanılır. Bu dosyada, istemcilerin hangi IP’lerden, hangi kimlik doğrulama yöntemleriyle bağlanabileceği tanımlanır. Örnek:
# Yerel bağlantılar için
host all all 127.0.0.1/32 md5
# Belirli bir IP aralığına izin verme
host all all 192.168.1.0/24 md5
# Tüm IP’lere izin verme (risklidir, dikkatli kullanın)
host all all 0.0.0.0/0 md5
2. Maksimum Bağlantı Sayısı
PostgreSQL’de aynı anda kaç istemcinin bağlanabileceği max_connections parametresi ile kontrol edilir. Varsayılan değer 100’dür, ancak yoğun sistemler için artırılması gerekebilir.
max_connections = 200
3. Bağlantı Havuzu Kullanımı
Yoğun veritabanı bağlantılarını yönetmek için bağlantı havuzu çözümleri kullanabilirsiniz. Popüler araçlar:
• PgBouncer: Hafif ve verimli bir bağlantı havuzlayıcıdır.
• Pgpool-II: Bağlantı havuzlamanın yanı sıra yük dengeleme ve failover özellikleri sunar.
4. SSL/TLS ile Güvenli Bağlantılar
PostgreSQL, veritabanı bağlantılarını şifrelemek için SSL/TLS desteği sağlar. Bu, özellikle veritabanına uzaktan bağlanan istemciler için gereklidir.
postgresql.conf dosyasında SSL etkinleştirme:
ssl = on
ssl_cert_file = ‘/etc/ssl/certs/server.crt’
ssl_key_file = ‘/etc/ssl/private/server.key’
pg_hba.conf dosyasında SSL zorunlu kılma:
hostssl all all 192.168.1.0/24 md5
5. Bağlantı Süresi ve Zaman Aşımı Ayarları
Uzun süreli bağlantılar sunucu kaynaklarını tüketebilir. Bu nedenle, zaman aşımı ayarlarını yapılandırmak faydalıdır:
• idle_in_transaction_session_timeout: Bir işlem bağlantısı boşta kaldığında bağlantıyı kapatır.
idle_in_transaction_session_timeout = 60000 # 60 saniye
• statement_timeout: Herhangi bir SQL sorgusu için maksimum çalışma süresi.
statement_timeout = 30000 # 30 saniye
Performans ve İzleme
• Log İzleme: PostgreSQL’in bağlantı günlüklerini izlemek için log_connections ve log_disconnections seçenekleri etkinleştirilebilir.
log_connections = on
log_disconnections = on
• Pg_stat_activity Görüntüleme: Aktif bağlantıları görmek için kullanılabilir:
SELECT * FROM pg_stat_activity;
• Bağlantı Performansını İzleme: Yavaş bağlantı veya sorgu sorunlarını teşhis etmek için izleme araçları (örneğin, Prometheus ve Grafana entegrasyonu) kullanılabilir.
Sonuç
PostgreSQL instance’larında ağ ve bağlantı yönetimi, doğru yapılandırmalar ve en iyi uygulamalarla performansı artırabilir, güvenliği güçlendirebilir ve kullanıcı deneyimini optimize edebilir. postgresql.conf ve pg_hba.conf dosyalarının doğru yapılandırılması, SSL desteğinin etkinleştirilmesi, bağlantı havuzlamanın kullanılması gibi adımlar, ölçeklenebilir ve güvenilir bir sistem oluşturmanın temel taşlarıdır.
Bağlantılarınızı düzenli olarak izlemek ve gerektiğinde ayarları optimize etmek, PostgreSQL sunucunuzun sorunsuz bir şekilde çalışmasını sağlayacaktır.