본문 바로가기

DB

Postgresql pgpool을 활용한 클러스터링

pgpool을 이용한 Postgresql 클러스터링을 구현해 보겠습니다.

docker기반으로 테스트 했습니다.

 

1.connection pooling : DB서버와의 연결을 유지하고 동일한 속성(user,db,protocol) 을 가진 새로운 연결 요청이 오면 이를 재사용함
2.load balancing : replication 을 사용하는 서비스에서 DB서버의 편중된 load를 줄이기 위해 SELECT 쿼리를 처리 가능한 서버 간 배포하는 기능
3.automated failover : DB 서버 중 하나가 down되면 이를 차단하고 나머지 DB에서 서비스를 지속함, master down 될 시엔 다른 standby 서버를 승격시킴
4.Replication : 복제 기능을 활성화하여 하나가 장애가 발생해도 중단없이 서비스를 할 수 있음
5.Limiting Exceeding Connections : 최대 세션에 이르면 신규 접속을 제한 함으로써 성능을 최대화 함. 대신 큐에 쌓아두고 세션을 대기 시킴

 

 

1. Connection Pooling

DB서버와의 연결을 유지하고 동일한 속성(user,db,protocol) 을 가진 새로운 연결 요청이 오면 이를 재사용 한다. Pgpool을 사용 하여 Connection Pooling기능을 사용 할 수 있으며, Default 값은 on으로 되어 있다.

docker-compose 환경변수

  • PGPOOL_MAX_POOL: 캐시된 커넥션 수를 지정 할 수 있다. 동일한 속성(user,db,parameter)을 연결이 오면 재사용 한다. 기본값은 15
  • PGPOOL_CONNECTION_LIFE_TIME: 서버의 캐시된 커넥션 종료 시간이다. 기본값은 0으로 종료되지 않게 되어 있다

 

2. Load balancing

DB서버간 Replication 을 사용하는 서비스에서 DB서버의 편중된 load를 줄이기 위해 SELECT 쿼리를 처리 가능한 서버 할당하는 기능이다. Pgpool을 사용 하여 load balancing 기능을 사용 할 수 있다.

docker-compose 환경변수

  • PGPOOL_ENABLE_LOAD_BALANCING: Load-Balancing mode 사용여부. 기본값은 yes

 

 

3. auto-failover

primary DB 서버가 down되면 standby 서버를 primary로 변경한다. 이전 primary서버는 standby서버 역할을 하게 된다.  Pgpool을 사용 하여 auto-failover 기능을 사용 할 수 있다.

 

docker-compose 환경변수

  • PGPOOL_HEALTH_CHECK_MAX_RETRIES: db서버가 살아 있는지 체크 시도 하는 횟수. 기본값은 5

 

4. Replication

DB간의 복제 기능을 활성화하여 하나가 장애가 발생해도 중단없이 서비스를 할 수 있음. primary DB 서버를 통해서 write하고 standby DB서버로 replication된다. PostgreSqlreplication기능을 사용 한다.

docker-compose 환경변수

  • REPMGR_USERNAME : 복제를 위한 사용자. 기본값은 repmgr
  • REPMGR_PASSWORD : 복제를 위한 패스워드. 기본값 없음
  • REPMGR_PRIMARY_HOST : primary 서버의 hostname
  • REPMGR_PARTNER_NODES : 복제 서버 리스트
  • REPMGR_NODE_NAME : 서버 명
  • REPMGR_NODE_NETWORK_NAME : 서버 hostname

 

5. Limiting Exceeding Connections

PostgreSQL과의 동시 접속의 최대 세션에 제한이 있어 최대 세션에 이르면 신규 접속은 거부되며, 커넥션 풀에 의한 접속 오류를 반환하는 대신 큐에 쌓아두고 세션을 대기시킨다. Pgpool을 사용 하여 Limiting Exceeding Connections 기능을 사용 할 수 있다.

docker-compose 환경변수

  • PGPOOL_NUM_INIT_CHILDREN : 동시 접속자 수를 제한 한다. 기본값은 32

 

6. auto-failback

문제가 발생한 DB서버를 다시 살리게 되면 auto-failback 기능에 의해서 standby서버 역할을 하게 된다.  Pgpool을 사용 하여 auto-failback 기능을 사용 할 수 있다.

docker-compose 환경변수

  • POSTGRESQL_CLUSTER_APP_NAME : DB서버 application명. 기본값은 walreceiver
  • PGPOOL_AUTO_FAILBACK : auto-failback기능 사용유무. 기본값은 no
  • PGPOOL_BACKEND_APPLICATION_NAMES : POSTGRESQL_CLUSTER_APP_NAME에 이름으로 준 DB서버 리스트