반응형
PostgresSQL HA GITHUB
https://github.com/bitnami/charts/tree/main/bitnami/postgresql-ha
PostgresSQL HA Helm
https://artifacthub.io/packages/helm/bitnami/postgresql-ha?modal=install
PostgreSQL-HA와 PostgreSQL Helm 차트의 차이점
- 모두 기본/복제본 토폴로지로 클러스터를 구성
- 기본 노드는 쓰기 권한이 있는 반면 복제는 읽기 전용 권한이 있는 복제본 노드
- 기본적으로 pgpool용 1개, 기본용 1개, PostgreSQL용 복제본 1개로 구성된 3개 노드가 있는 클러스터를 배포
Helm PostgresSQL HA 배포
1) Helm Repo 등록 및 다운로드
helm repo add bitnami https://charts.bitnami.com/bitnami
helm pull bitnami/postgresql-ha
2) bitnami repo 찾기
- bitnami repo에는 다양한 레포가 존재하여 검색하여 사용
- 검색 방법 : helm search repo bitnami
helm search repo bitnami
3) postgres-ha 다운로드
##1. 압축 해제
tar -xvf postgresql-ha-15.1.4.tgz
##2. 폴더 이동
postgresql-ha/
##3. 기존 helm 파일 복사
cp values.yaml ha.yaml
4) yaml 파일 수정
- helm hub 가서 파라미터스 정보 확인하여 상황에 맞도록 "커스텀"
- 커스텀 범위 : Replica 개수, Servic
- Replicas개수는 홀수도 해야 되는 거 같음
- 짝수로 해보니, pgpool role : primary이나, pg_rool은 standby 상태) 의결권 문제로 보임
- 해당 부분은 추가 테스트 필요할 듯
- Replicas개수는 홀수도 해야 되는 거 같음
5) helm 배포
- 조건 : Default Storageclass NFS 구성
https://monta010.tistory.com/190
- 배포한 storageclass를 정의하거나, nfs storageclass defaults 설정하면 정의할 필요 없음
helm install postgres-ha bitnami/postgresql-ha -f postgresql-ha.yaml
6) PostgreSQL Query를 통한 상태 확인
- Database -> repmgr 테이블을 통한 Primary, Standby 상태 확인
2. Helm PostgresSQL HA 재배포
- 재배포할때는 비밀번호를 통한 배포 필요
# PostgreSQL 비밀번호
export PASSWORD=$(kubectl get secret --namespace "default" postgres-ha-postgresql-ha-postgresql -o jsonpath="{.data.password}" | base64 -d)
# Replication Manager 비밀번호
export REPMGR_PASSWORD=$(kubectl get secret --namespace "default" postgres-ha-postgresql-ha-postgresql -o jsonpath="{.data.repmgr-password}" | base64 -d)
# Pgpool Admin 비밀번호
export ADMIN_PASSWORD=$(kubectl get secret --namespace "default" postgres-ha-postgresql-ha-pgpool -o jsonpath="{.data.admin-password}" | base64 -d)
helm upgrade postgres-ha bitnami/postgresql-ha \
--set postgresql.password=$PASSWORD \
--set postgresql.repmgrPassword=$REPMGR_PASSWORD \
--set pgpool.adminPassword=$ADMIN_PASSWORD \
-f ha.yaml
3. Failover 테스트
- 17시 12분 30초 Primary - postgressql-0 Pod 삭제
- 17시 13분 00초 Standby - postgressql-1 -> Primary 승격
4. 배포 시에 Conf 검토 사항
1) Pgpool 설정
- max_connections: Pgpool이 데이터베이스 서버에 연결할 수 있는 최대 클라이언트 수
- 이 값은 pgpool의 설정인 num_init_children과 max_pool의 곱과 일치해야 함
- num_init_children: 초기 자식 프로세스 수. 동시에 처리할 수 있는 클라이언트 수
- 예: num_init_children = 200이면, 200명의 사용자가 동시에 접속할 수 있음
- max_pool: 풀당 최대 연결 수. 각 DB에 대해 유지할 수 있는 "재사용 가능한 연결 수"
- 예: max_pool = 2이면, 각 DB당 2개의 연결을 재사용
- 전체 최대 연결 수 계산:
- 총 최대 연결 수 = num_init_children * max_pool
- 예: 200 * 2 = 400개의 연결 가능
- 연결 수 설정 관계:
- PostgreSQL max_connections ≥ Pgpool (num_init_children × max_pool)
- 예: 500 ≥ (200 × 2 = 400)이면, PostgreSQL의 max_connections가 Pgpool의 연결 수 요구 사항을 충족함
2) PostgreSQL 설정
- max_connections: PostgreSQL에서 처리할 수 있는 최대 연결 수. Pgpool 설정에서 계산된 값을 충족해야 함
- shared_buffers: 데이터베이스 서버가 파일 시스템 캐시와 별도로 블록을 캐시할 수 있는 메모리 사이즈
- 성능에 큰 영향을 미치며, 총 메모리의 25%에서 40% 사이가 권장됨
- 예: 총 메모리 4GB 시스템에서 shared_buffers는 1GB ~ 1.6GB (25% ~ 40%)
3) 실제 설정 예시 (4GB 시스템)
- PostgreSQL:
max_connections: 500
shared_buffers: "1.2GB" # 30% 설정
- Pgpool
num_init_children: 200
max_pool: 2
# 총 연결 = 400
반응형
댓글