본문으로 건너뛰기
피드

OCI에서 PostgreSQL HA 구성할 때, 페일오버 테스트는 통과하는데 프로덕션에서 깨지는 이유

devops 약 5분
vote
0
댓글
북마크

OCI에서 PostgreSQL HA 클러스터의 VIP가 페일오버 시 자동으로 이동하지 않는 문제를 다룬다. AWS/Azure와 달리 OCI는 VIP가 VNIC에 명시적으로 바인딩되어 있어 OCI API 호출이 필요하며, 이를 해결하는 두 가지 프로덕션 검증된 방법(HAProxy vs OCI API 콜백)을 제시한다.

  • 1

    OCI에서는 VIP가 VNIC에 명시적 바인딩되어 자동 이동 안 됨

  • 2

    OS 레벨 ip addr add만으로는 부족 — OCI 컨트롤 플레인 API 호출 필수

  • 3

    해법 1: HAProxy + Patroni REST API 헬스체크로 VIP 우회

  • 4

    해법 2: Patroni 콜백에서 OCI CLI로 VIP 재할당

  • 5

    클러스터 상태가 정상으로 보여도 앱 연결까지 테스트해야 함

  • 시나리오: Patroni 클러스터가 새 프라이머리를 승격시킴. patronictl list는 정상. 그런데 앱은 여전히 죽은 옛 노드에 트래픽을 보내고 있음. OCI의 VIP(Virtual IP) 문제임

  • AWS에서는 secondary private IP가 서브넷 내 인스턴스 간에 자유롭게 이동함. Azure도 NIC IP 설정만 업데이트하면 됨. 근데 OCI는 다름. VIP(secondary private IP)가 특정 인스턴스의 VNIC에 명시적으로 바인딩되어 있어서, 자동으로 따라오지 않음

왜 이게 무서운가

  • 페일오버 일어나면 새 노드가 OS 레벨에서 ip addr add로 VIP를 올림. 같은 호스트에서 ping하면 됨. 하지만 OCI 네트워킹 패브릭은 여전히 옛 VNIC으로 패킷을 라우팅함. OS에서 IP가 올라와 있다는 건 OCI한테 아무 의미가 없음

  • 옛 노드가 완전히 죽었으면 앱에서 타임아웃이 뜸. 더 나쁜 경우: 옛 노드가 레플리카로 강등되어 살아 있으면, 앱이 정상 연결은 되지만 모든 쓰기에서 에러 발생. 클러스터 상태만 보면 전부 초록불인데 앱 관점에서는 장애임

⚠️주의

> 이 문제가 위험한 이유는 테스트에서 안 잡힌다는 것. patronictl list만 확인하면 정상으로 보이고, 앱 연결까지 확인하는 테스트를 하지 않으면 프로덕션에서야 발견됨.

해법 1: HAProxy + 헬스체크 (VIP를 아예 안 쓰기)

  • HAProxy를 앱과 PostgreSQL 사이에 놓고, Patroni REST API로 헬스체크:
    • GET /primary → 현재 프라이머리에서만 HTTP 200
    • GET /replica → 레플리카에서만 HTTP 200
  • 페일오버 시 HAProxy의 다음 헬스체크 사이클에서 자동 감지. VIP 이동도 OCI API 호출도 필요 없음
  • 읽기/쓰기 분리도 공짜로 얻을 수 있음 (프라이머리/레플리카용 리스너 분리)
  • 주의점: HAProxy 자체가 SPOF가 되므로 Keepalived나 OCI NLB로 이중화 필수. 헬스체크 inter 3s, fall 3 설정이면 약 9초 만에 장애 노드 제거

해법 2: Patroni 콜백 + OCI API (VIP 유지)

  • 앱 커넥션 스트링이 이미 VIP에 하드코딩되어 있거나, 네트워크 보안 모델상 프록시를 못 쓰는 경우
  • Patroni가 새 프라이머리 승격 시 콜백 스크립트를 실행해서:
    1. OCI 컨트롤 플레인: oci network vnic assign-private-ip --unassign-if-already-assigned로 VIP를 새 VNIC에 재할당
    2. OS 레벨: ip addr add로 인터페이스에 IP 추가 + gratuitous ARP 전송
  • 두 단계 모두 해야 함. 하나라도 빠지면 다시 무음 장애
  • 필수 사전 작업: 모든 노드에 OCI CLI 설치, 인스턴스 프린시펄 인증 설정 (동적 그룹 + IAM 정책), 각 노드 VNIC OCID 확보, arping 유틸리티 설치

교훈

  • OS 레벨 IP만으로는 부족함. OCI API 호출 없이 ip addr add만 하면, 같은 호스트에서는 되지만 다른 호스트에서 트래픽이 안 옴
  • OCI API 권한은 첫 페일오버 드릴 전에 반드시 수동 테스트할 것
  • 콜백 스크립트는 타임스탬프, 액션, 롤, VNIC ID, API 응답 전부 로깅할 것 — 새벽 2시에 고마울 것임
  • OCI API가 느리거나 일시 불가할 때를 대비해 지수 백오프 리트라이 로직 추가 권장

AWS/Azure 기반 HA 가이드를 OCI에 그대로 적용하면 조용히 깨지는 지점. 문제를 찾는 게 고치는 것보다 오래 걸린다는 게 핵심.

댓글

댓글

댓글을 불러오는 중...

devops

하이퍼스케일 데이터, 비트코인 채굴장을 최대 30억 달러짜리 AI 데이터센터로 전환

하이퍼스케일 데이터의 자회사 ACS가 캘리포니아 네오클라우드 업체와 미시간 캠퍼스 AI 컴퓨팅 용량 공급 계약을 맺었어. 초기 20메가와트로 시작해 최대 52메가와트까지 늘릴 수 있고, 모든 옵션이 행사되면 계약 규모가 30억 달러를 넘을 수 있다는 내용이야.

devops

KT, 분사했던 KT클라우드 다시 합치나…AIDC 투자 때문에 판 다시 짜는 중

KT가 2022년 분사한 KT클라우드를 다시 합치는 방안을 검토 중인 것으로 알려졌어. 클라우드, 인공지능 데이터센터, 네트워크 인프라를 한 몸처럼 묶어 B2B 경쟁력을 키우려는 흐름으로 읽혀. 다만 KT는 아직 구체적으로 검토한 바 없다는 입장이야.

devops

KT, KT클라우드 다시 합치나…AI 인프라 패키지 전략 시동

KT가 2022년 분사했던 KT클라우드를 다시 흡수하는 방안을 검토 중인 것으로 알려졌다. 인공지능 확산으로 클라우드, 데이터센터, 네트워크를 묶은 기업간거래 인프라 수요가 커지면서 KT 본체의 자금력과 영업력을 활용하려는 전략으로 보인다. 다만 외부 투자자 지분 처리와 통신·클라우드 조직 통합이 실제 관건이다.

devops

Bunny DNS, 쿼리 과금 없애고 500개 도메인까지 무료로 푼다

bunny.net이 Bunny DNS의 DNS 쿼리 과금을 없애고 계정당 최대 500개 도메인까지 무료 DNS 호스팅을 제공하기로 했어. 단순한 무료화가 아니라 CDN, 엣지 보안, 스마트 라우팅을 DNS에서 바로 연결하는 방향으로 플랫폼 진입점을 재정리하는 움직임이야.

devops

가비아, AWS 중소·중견기업 클라우드 역량 인증 받음

가비아가 AWS의 ‘AWS SMB 컴피턴시’를 취득했다. 이 인증은 중소·중견기업의 클라우드 전환과 운영 지원 역량을 검증하는 제도로, 가비아는 운영 프레임워크와 고객 레퍼런스를 인정받았다.