Connection Pooling: pgbouncer für PostgreSQL im Web Stack

PostgreSQL kann bei Web-Anwendungen unter hoher Last schnell an seine Grenzen stoßen, da jeder Client eine eigene Verbindung benötigt, die Ressourcen bindet. Connection Pooling reduziert die Anzahl gleichzeitig offener Verbindungen, verbessert die Performance und Stabilität. PgBouncer ist ein schlanker, effizienter Connection Pooler für PostgreSQL, der sich nahtlos in Web-Stacks integrieren lässt. In diesem Leitfaden erfahren Einsteiger, IT-Studierende und Junior Network Engineers, wie PgBouncer installiert, konfiguriert und optimiert wird.

Voraussetzungen

  • Linux-Server (Ubuntu/Debian oder CentOS/RHEL)
  • PostgreSQL installiert und lauffähig
  • Sudo- oder Root-Zugriff
  • Grundkenntnisse in Terminal und Texteditoren

PgBouncer Installation

PgBouncer kann über die Paketmanager installiert werden.

# Ubuntu/Debian
sudo apt update
sudo apt install pgbouncer

# CentOS/RHEL
sudo yum install pgbouncer

# Dienst starten und aktivieren
sudo systemctl start pgbouncer
sudo systemctl enable pgbouncer
sudo systemctl status pgbouncer

PgBouncer-Konfiguration

Die Hauptkonfigurationsdatei befindet sich unter /etc/pgbouncer/pgbouncer.ini. Dort werden Datenbankverbindungen, Pooling-Methoden und Authentifizierung definiert.

Beispielkonfiguration

[databases]
webapp_db = host=127.0.0.1 port=5432 dbname=webapp_db

[pgbouncer]
listen_addr = 0.0.0.0
listen_port = 6432
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
max_client_conn = 500
default_pool_size = 50
reserve_pool_size = 20
reserve_pool_timeout = 5
logfile = /var/log/pgbouncer/pgbouncer.log
pidfile = /var/run/pgbouncer/pgbouncer.pid

Benutzer und Authentifizierung

PgBouncer benötigt eine Authentifizierungsdatei, die Benutzer und Passwörter enthält.

sudo nano /etc/pgbouncer/userlist.txt

"webapp" "md5d41d8cd98f00b204e9800998ecf8427e"
"admin"  "md5e99a18c428cb38d5f260853678922e03"

Die MD5-Hashes entsprechen den PostgreSQL-Passwörtern.

Start und Test

Nach der Konfiguration wird PgBouncer gestartet und getestet.

sudo systemctl restart pgbouncer
sudo systemctl status pgbouncer

# Testverbindung
psql -h 127.0.0.1 -p 6432 -U webapp webapp_db

Pool-Strategien

PgBouncer unterstützt verschiedene Pool-Modi:

  • Session: Eine Verbindung pro Client-Session, langlebig
  • Transaction: Verbindung pro Transaktion, effizient für Web-Anwendungen
  • Statement: Verbindung pro SQL-Statement, maximale Isolation, weniger verbreitet

Monitoring und Statistik

PgBouncer bietet administrative Befehle über die Konsole:

psql -h 127.0.0.1 -p 6432 -U webapp pgbouncer

# Abfragen
SHOW POOLS;
SHOW CLIENTS;
SHOW SERVERS;
SHOW STATS;

Optimierung

  • Maximale Client-Verbindungen an Serverkapazität anpassen (max_client_conn)
  • Default Poolgröße für normale Last setzen (default_pool_size)
  • Reserve Pool für Spitzenlast definieren (reserve_pool_size)
  • Transaction Poolmodus für Web-Applikationen bevorzugen
  • Logging aktivieren und prüfen

Netzwerk und Subnetzplanung

In Multi-Server-Umgebungen sollte das Netzwerk sauber geplant sein, um schnelle und sichere Pool-Verbindungen zu gewährleisten.

IPv4 Subnetz

<math>
PgBouncer-IP = 192.168.280.10/24
Subnetzadresse = 192.168.280.10 & 255.255.255.0 = 192.168.280.0
Broadcastadresse = 192.168.280.0 | ~255.255.255.0 = 192.168.280.255
</math>

IPv6 Subnetz

<math>
PgBouncer-IP = 2001:db8:abcd:280::10/64
Subnetzadresse = 2001:db8:abcd:280:: & ffff:ffff:ffff:ffff:: = 2001:db8:abcd:280::0
Broadcastadresse = 2001:db8:abcd:280:ffff:ffff:ffff:ffff
</math>

Best Practices

  • Separate Benutzer für Anwendungen nutzen
  • Transaction Poolmodus für Web-Stack bevorzugen
  • Max Client Connections an PostgreSQL-Serverkapazität anpassen
  • Reserve Pool für Spitzenlast konfigurieren
  • Logs überwachen und Fehler frühzeitig erkennen
  • Monitoring über SHOW POOLS und SHOW STATS durchführen
  • TLS/SSL zwischen PgBouncer und PostgreSQL in sensiblen Umgebungen nutzen
  • Backups der PgBouncer-Konfiguration und Benutzerdateien
  • Netzwerk-Subnetze sauber planen, insbesondere bei Remote-Servern
  • Regelmäßige Updates für PgBouncer und PostgreSQL durchführen

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles