본문 바로가기
Helm

[Helm]PostgresSQL HA 구성

by aws-evan 2025. 1. 5.
반응형

 

 

PostgresSQL HA GITHUB

 

https://github.com/bitnami/charts/tree/main/bitnami/postgresql-ha

 

charts/bitnami/postgresql-ha at main · bitnami/charts

Bitnami Helm Charts. Contribute to bitnami/charts development by creating an account on GitHub.

github.com

 

PostgresSQL HA Helm

https://artifacthub.io/packages/helm/bitnami/postgresql-ha?modal=install

 

postgresql-ha 15.1.4 · bitnami/bitnami

This PostgreSQL cluster solution includes the PostgreSQL replication manager, an open-source tool for managing replication and failover on PostgreSQL clusters.

artifacthub.io

 

 

 

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 상태) 의결권 문제로 보임
    • 해당 부분은 추가 테스트 필요할 듯

 

 

5) helm 배포

  • 조건 : Default Storageclass NFS 구성

https://monta010.tistory.com/190

 

NFS Storageclass 구성

Kubernets NFS Storageclass 구성하기조건 : 각 노드에 nfs client 설치필수pv 생성할때 NFS 서버랑 통신으로 인함우분투apt-get -y install nfs-common cifs-utilsCentosyum -y install nfs-utils  nfs provisioner11) nfs provisioner 다

monta010.tistory.com

 

  • 배포한 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
반응형

'Helm' 카테고리의 다른 글

Helm  (0) 2024.04.23

댓글