2017-11-15 2 views
0

Ich habe ein PgPool II-Cluster mit 2 PostreSQL 9.5 Backends (4vCores, 8GB RAM) Loadbalancing + Replikation. Mein Anwendungsfall ist eine Website, die nur SSO-Anmeldung/Registrierung bietet, ist eine relativ kleine Datenbank, die Abfragen sind sehr einfach, aber es muss sehr hohe Parallelität (mehrere tausend gleichzeitige Benutzer) unterstützen.Hohe Parallelität auf PgPool + PostgreSQL Cluster

Bevor ich weitere Backends hinzufüge, möchte ich sicherstellen, dass die Konfiguration des aktuellen Clusters optimal ist. Habe einen Test mit pgbench ausgeführt (normale SELECT-Abfragen, die das normale Verhalten der Website simulieren) und konnte den Verbindungspool ohne großen Aufwand überlasten (pgbench -c 64 -j 4 -t 1000 -f queries.sql), auch wenn es dort war war reichlich CPU/RAM in der LB und den Backends verfügbar.

Dies sind die gewünschten Einstellungen vor:

pgpool II

listen_backlog_multiplier = 3 
connection_cache = on 
num_init_children = 62 
max_pool = 4 
child_life_time = 0 
child_max_connections = 0 
connection_life_time = 0 
client_idle_limit = 0 

PostgreSQL

max_connections = 256 
shared_buffers = 2GB 
effective_cache_size = 6GB 
work_mem = 8MB 
maintenance_work_mem = 512MB 
min_wal_size = 1GB 
max_wal_size = 2GB 
checkpoint_completion_target = 0.7 
wal_buffers = 16MB 
default_statistics_target = 100 

Erhöhung der num_init_children/max_pool wird mich zwingen, die max_connections auf die Backends zu erhöhen und das scheint nicht zu empfehlen. Irgendwelche Vorschläge? Vielen Dank!

Antwort

0

Es gibt keine Möglichkeit mehr gleichzeitige Verbindungen über Pgpool-II als den Wert von num_init_children zu erreichen.

num_init_children in Pgpool-II entspricht direkt der maximalen Anzahl gleichzeitiger Clientverbindungen, die Pgpool-II verarbeiten kann. Daher können Sie den num_init_children-Wert nicht niedriger als die maximal zulässige gleichzeitige Verbindung festlegen, die Sie unterstützen möchten.

Um jedoch die max_connections auf PG-Seite zu speichern, können Sie den niedrigeren Wert für max_pool config verwenden. Ein Pgpool-II-Kindprozess öffnet nur dann eine neue Back-End-Verbindung, wenn das angeforderte [Benutzer, Datenbank] -Paar nicht bereits im Cache ist. Wenn die Anwendung nur einen Benutzer für die Verbindung mit nur einer Datenbank verwendet, sagen Sie [user1, db1], dann können Sie max_pool auf 1 setzen und max_connection im PG-Backend gleich (num_init_children +1) haben.

Verwandte Themen