SaevOps
[PostgreSQL] pgpool 본문
반응형
서론
포스트그레스를 만지다 보면 이중화를 하고, 자동으로 Auto Failover가 되면 얼마나 좋을까란 생각을 했었다.
고객사들은 대부분 무중단 서비스를 원하며, 중단 시간의 대부분은 DB와 관련되어 있다. (아주 조금의 서비스 재시작 시간을 제외하고) 또한, 엔지니어가 직접 Failover를 하는 과정에서 실수할 가능성도 있다.
Auto Failover 뿐만 아니라 Connection pool 관리, 로드밸런싱까지 되는 PGpool는 꼭 알아둬야 될 서비스이다.
PGPOOL 이란?
정의
PostgreSQL 서버와 PostgreSQL 데이터베이스 클라이언트간에 작동하는 무료 오픈소스 미들웨어
기능
- Connection Pool 관리
PostgreSQL 은 하나의 명령을 수행할 때마다 별도로 Connection을 만들어서 사용하지만 Pgpool은 Connection 들을 재사용하여 관리 - Load Balancing
명령을 Clustering 되어있는 DB Server 에 분산하여 전체 Server의 부하 나눔 - Auto Failover & Failback
Master-Slave mode 에서 Master에 문제 발생 시 Slave Server 중 1대가 Master 역할을 수행할 수 있도록, Failover 기능을 제공
(Failback 기능도 제공하나 Failback 은 사용자가 직접 수동으로 수행하는 것을 권장)
구성
- pcp process
pgpool의 관리에만 사용되는 특수한 프로세스 (pgpool 하위 프로세 스 상태 정보 조회) - parent process
pgpool의 메인 프로세스로 pgpool의 모든 하위 프로세스를 fork하고 생성하는 역할 및 backend에 등록된 PostgreSQL Server 상태 확인 - child process
클라이언트로부터 PostgreSQL DB로 연결하는 프로세스 (connection pooling) worker process Streaming Replication 지연을 감지하는 역할을 하는 프로세스
설정 파일
- pcp.conf
- pgpool 상태 또는 pgpool 프로세스를 원격으로 관리하는 작업을 수행하는 사용자의 인증에 사용되는 파일
- 사용자명/암호 정보 있음 - pgpool.conf
- Pgpool의 기본 설정 파일 - pool_hba.conf
- PostgreSQL 용 pg_hba.conf 파일과 마찬가지로 pgpool의 클라이언트 인증에 사용하는 파일 Default는 비활성화 - pool_passwd.conf
- pgpool에서 PostgreSQL connection 시 md5 인증을 위해 사용하는 파일(사용자명/md5 암호)
- pgpool에서는 PostgreSQL의 데이터베이스 사용자 암호를 알 수 없음
- pool_passwd에 사용자 접속 정보가 필요
pgpool.conf 주요 내용
CONNECTIONS
listen_addresses = '*' #모든 hostname 또는 모든 IP 에 대해 접속 허용
port = 9999 #pgpool 접속 port
pgpool Backend connetion settings
backend_hostname0 = ‘Master IP 주소’
backend_port0 = 5432 #PostgreSQL Master Server 접속 Port
backend_weight0 = 1 #backend0 부하 분산 비율 설정(only load balancing mode)
backend_data_directory0 = ;/pgdata/data’ #backend0 의 PGDATA Directory
backend_flag0 = ‘ALLOW_TO_FAILOVER’ #backend0 의 동작제어(장애조치/분리 허용)
backend_hostname1 = ‘Slave IP 주소’
backend_port1 = 5432 #PostgreSQL Master Server 접속 Port
backend_weight0 = 1 #backend1 부하 분산 비율 설정(only load balancing mode)
backend_data_directory1 = ;/pgdata/data’ #backend1 의 PGDATA Directory
backend_flag1 = ‘ALLOW_TO_FAILOVER’ #backend1 의 동작제어(장애조치/분리 허용)
Authentication
Enable_pool_hba = off #클라이언트 인증시 pool_hba.conf 사용 (Default off)
pool_passwd = ‘pool_passwd’ #md5 인증시 사용하는 pool_passwd 파일 이름
POOLS
num_init_children = 32 #pgpool 서버 프로세스 수(클라이언트에서 pgpool 에 대한 동시 연결)
max_pool = 4 #pgpool 하위 프로세스(child)에서 PostgreSQL 에 캐시 된 최대 연결 수
child_life_time = 300 #pgpool 하위 프로세스 유휴 상태인 경우 종료하는 시간(초) 지정
(캐싱 정보만 삭제)
child_max_connections = 0 #클라이언트로부터 연결된 pgpool 하위프로세스(child) 수명 지정 (0 은 off)
connection_life_time = 0 #PostgreSQL 에 대한 캐시 된 연결을 종료하는 시간(초)
client_idle_limit = 0 #pgpool 하위 프로세스 유휴 상태인 경우 강제 연결 종료하는 시간(초) 지정
MASTER/SLAVE MODE
master_slave_mode = on #Master/Slave 모드 활성화
master_slave_sub_mode = ‘stream’ #Master/Slave Replication 모드 지정
*Replicaion mode Streaming 인 경우
sr_check_period = 10 #Streaming replication check 주기 설정(초)
sr_check_user = ‘postgres’ #Streaming replication check user 설정(replication role 이 있는 사용자)
sr_check_password = ‘ ‘ #Streaming replication check user password 설정
(공백이면 pool_passwd 파일 사용)
sr_check_database = ’postgres’ #Streaming replication check database 지정
HEALTH CHECK GLOBAL PARAMTERS
health_check_period = 10 #pgpool backend health check 주기 설정(초)
health_check_timeout = 20 #health check timeout 설정(초)
health_check_user = ‘postgres’ #health check user 설정 (pgpool backend 에 동일한 사용자가 있어야함)
health_check_password = ‘ ‘ #health check user password 설정(공백이면 pool_passwd 파일 사용)
health_check_database = ‘postgres’ #health check database 설정
반응형
'데이터베이스 > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] 데이터베이스 명령어 / 비밀번호 / 백업 복구 (0) | 2022.07.14 |
---|---|
[PostgreSQL] 데이터베이스 인코딩 변경 (0) | 2022.06.13 |
Comments