2017-11-15 2 views
0

로드 밸런싱 + 복제를 수행하는 2 개의 PostreSQL 9.5 백엔드 (4vCores, 8GB RAM)가있는 PgPool II 클러스터가 있습니다. 나의 유스 케이스는 단지 SSO- 로그인/등록을 제공하는 웹 사이트이며 상대적으로 작은 데이터베이스이며 쿼리는 매우 간단하지만 매우 높은 동시성 (수천 명의 동시 사용자)을 지원해야합니다.PgPool + PostgreSQL 클러스터에서 높은 동시성

백엔드를 추가하기 전에 현재 클러스터의 구성이 최적인지 확인하고 싶습니다. Pgbench (웹 사이트의 정상적인 동작을 시뮬레이트하는 일반적인 SELECT 쿼리)를 사용하여 일부 테스트를 실행하고 너무 많은 노력 (pgbench -c 64 -j 4 -t 1000 -f queries.sql)없이 연결 풀을 오버로드 할 수있었습니다. LB 및 백엔드에서 사용할 수있는 CPU/RAM이 많았습니다.

이 관련 설정과 같습니다 num_init_children 증가 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 

pgPool/max_pool은 백엔드에서 MAX_CONNECTIONS을 높이기 위해 저를 강제로 , 그리고 그것은 추천하지 않는 것 같습니다. 어떤 제안? 감사!

답변

0

Pgpool-II를 통해 더 많은 동시 연결을 수행 할 수있는 방법은 num_init_children 값보다 큽니다.

Pgpool-II의 num_init_children은 Pgpool-II가 처리 할 수있는 최대 동시 클라이언트 연결 수와 직접적으로 일치하므로 지원할 최대 동시 연결 수보다 num_init_children 값을 낮게 설정할 수 없습니다.

그러나 PG 측에 max_connections를 저장하려면 max_pool 구성에 대해 더 낮은 값을 사용할 수 있습니다. 요청 된 [user, database] 쌍이 캐시에없는 경우에만 Pgpool-II 하위 프로세스가 새 백엔드 연결을 엽니 다. 그리고 응용 프로그램이 단 하나의 사용자 만 사용하여 하나의 데이터베이스에 연결하는 경우 [user1, db1]이라고 말하면 max_pool을 1로 설정할 수 있으며 PG 백엔드에서 max_connection을 (num_init_children +1)과 동일하게 설정할 수 있습니다.

관련 문제