PostgreSQL-HA 클러스터에서 Primary 노드 확인하는 방법

1–2분

PostgreSQL-HA(High Availability) 환경을 관리하다 보면, 클러스터의 Primary 노드와 Standby 노드 상태를 확인해야 할 일이 자주 생깁니다. 특히 Primary 노드가 정상적으로 작동하지 않을 경우, 빠르게 상황을 파악하고 Primary DB를 정상 상태로 복구하는 것이 중요합니다. 이번 글에서는 Repmgr을 사용해 Primary 노드를 확인하는 간단한 방법을 소개합니다.


왜 Primary 노드 확인이 필요할까?

HA 환경에서는 Primary 노드가 데이터베이스의 중심 역할을 합니다. 만약 Primary가 제대로 작동하지 않으면, 클러스터의 장애 복구(failover)가 원활히 진행되지 않을 수 있습니다. 따라서, Primary 노드가 정상인지 수시로 확인하고 문제가 생기면 빠르게 복구하는 것이 매우 중요합니다.


Primary 노드 확인하기

  • PostgreSQL Pod에 접속

먼저, Kubernetes에서 PostgreSQL Pod의 쉘에 접속합니다. 최신 명령어 형식을 사용하세요:

kubectl exec -it postgresql-ha-postgresql-0 -- /bin/bash

여기서 postgresql-ha-postgresql-0은 접속할 Pod 이름입니다. 다른 Pod에 접속하고 싶다면 이름을 바꿔 실행하면 됩니다.

  • Repmgr로 클러스터 상태 확인

Pod 안에서 아래 명령어를 실행합니다:

/opt/bitnami/scripts/postgresql-repmgr/entrypoint.sh repmgr -f /opt/bitnami/repmgr/conf/repmgr.conf cluster show

이 명령어를 통해 클러스터의 현재 상태를 확인할 수 있습니다. Primary 노드와 Standby 노드의 역할, 상태, 연결 상태 등을 상세히 보여줍니다.


확인 결과 예시

아래는 repmgr cluster show 명령어 실행 결과 예시입니다:

 ID   | Name                       | Role    | Status    | Upstream                   | Location | Priority | Timeline | Connection string
------+----------------------------+---------+-----------+----------------------------+----------+----------+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------
 1000 | postgresql-ha-postgresql-0 | standby |   running | postgresql-ha-postgresql-1 | default  | 100      | 5        | user=mrx password=mrx host=postgresql-ha-postgresql-0.postgresql-ha-postgresql-headless.runway.svc.cluster.local dbname=mrx port=5432 connect_timeout=5
 1001 | postgresql-ha-postgresql-1 | primary | * running |                            | default  | 100      | 5        | user=mrx password=mrx host=postgresql-ha-postgresql-1.postgresql-ha-postgresql-headless.runway.svc.cluster.local dbname=mrx port=5432 connect_timeout=5
 1002 | postgresql-ha-postgresql-2 | standby | - failed  | ?                          | default  | 100      |          | user=mrx password=mrx host=postgresql-ha-postgresql-2.postgresql-ha-postgresql-headless.runway.svc.cluster.local dbname=mrx port=5432 connect_timeout=5

이 결과에서 중요한 점은 다음과 같습니다:

  • postgresql-ha-postgresql-1은 Primary 노드입니다(Role: primary, Status: running).
  • postgresql-ha-postgresql-0은 정상적으로 작동하는 Standby 노드입니다.
  • postgresql-ha-postgresql-2는 실패 상태(failed)로 표시되며, 연결 문제가 있는 것으로 보입니다.

실패한 노드 처리 방법

출력 결과에서 특정 노드가 실패 상태라면, 다음 단계를 통해 문제를 해결할 수 있습니다:

  • Pod 상태 확인

모든 PostgreSQL Pod의 상태를 확인합니다:

kubectl get pods | grep postgresql-ha

  • 로그 확인

실패한 Pod의 로그를 확인해 문제 원인을 파악합니다:

kubectl logs postgresql-ha-postgresql-2

  • 구성 확인

Repmgr 설정이나 네트워크 연결 상태를 점검해 문제가 없는지 확인하세요.


마무리

PostgreSQL-HA 클러스터에서 Primary 노드를 확인하는 작업은 클러스터의 안정성을 유지하는 핵심입니다. Primary가 제대로 작동하지 않을 경우, 장애 복구가 어려워질 수 있으니 항상 상태를 점검하고 문제 발생 시 빠르게 대처하세요. 이번에 소개한 방법으로 손쉽게 클러스터 상태를 확인하고 안정적인 DB 환경을 유지하시길 바랍니다! 😊