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
구성
서버 구성은 pgpool
과 postgresql
이 1:1로 설정되어 있습니다.
현상
pgpool
pod이 지속적으로 재시작하는 현상이 있었지만 pod로그나 이벤트로그상으로는 특이점을 찾을 수 없는 상황이었습니다.
원인 분석
pgpool
의 session
을 확인하는 도중 클라이언트 커넥션이 다 차면서 pgpool
이 재시작하는 것을 확인하여 클라이언트 커넥션이 부족하다는 것을 인지했습니다.
조치
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