잡동사니

Pgpool이 죽는현상 해결 본문

IT/Database

Pgpool이 죽는현상 해결

yeTi 2020. 12. 24. 15:31

안녕하세요. yeTi입니다.
오늘은 Pgpool을 활용하여 PostgreSQL을 사용하는 중에 지속적으로 pgpool이 죽는 현상을 해결한 부분을 공유하고자 합니다.

작업 환경

  • Pgpool : 4.1.1
  • PostgreSQL : PostgreSQL 11.7 on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit

구성

서버 구성은 pgpoolpostgresql이 1:1로 설정되어 있습니다.
PgSQL구성

현상

pgpool pod이 지속적으로 재시작하는 현상이 있었지만 pod로그나 이벤트로그상으로는 특이점을 찾을 수 없는 상황이었습니다.

pgsql 커넥션 모니터링

원인 분석

pgpoolsession을 확인하는 도중 클라이언트 커넥션이 다 차면서 pgpool이 재시작하는 것을 확인하여 클라이언트 커넥션이 부족하다는 것을 인지했습니다.

pgpool process수 확인

조치

pgpool의 설정에서 num_init_children을 변경하여 클라이언트의 커넥션 수를 조정하여 해결하였고

쉘 스크립트를 활용하여 지속적으로 모니터링한 결과 클라이언트의 커넥션에 여유가 생긴것을 확인하였습니다.

while true; do echo $(date '+%Y-%m-%d %H:%M:%S') $(($(psql -h localhost -p 5432 -U postgres -d postgres -c "show pool_processes;" | wc -l)-4)) $(($(psql -h localhost -p 5432 -U postgres -d postgres -c "show pool_processes;" | awk '{print $6}' | grep \| | wc -l)-1)); sleep 1; done
2020-12-24 05:19:09 64 28 
2020-12-24 05:19:10 64 28 
2020-12-24 05:19:11 64 28 
...  

참고

백엔드 프로세스 수

num_init_children * max_pool
Comments