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 환경을 유지하시길 바랍니다! 😊