CNPG 복제본 조인 계단식 실패
이 페이지는 2026년 2월 8일 infra-db 통합 및 확장 실패에 대한 사고 회고입니다. 이 사건이 중요한 이유는 3개의 개별 CNPG 차단제가 차례로 나타났고, 올바른 순서로 제거되어야만 복구가 작동했기 때문입니다.
실패한 것
의도된 변경은 여러 개의 소규모 인프라 데이터베이스를 infra-db로 통합하고 클러스터를 하나의 인스턴스에서 두 개로 확장하는 것이었습니다. 첫 번째 복제본은 성공적으로 조인되지 않았으며 오류가 연속적으로 발생했습니다.
pg_basebackup가 복제 슬롯을 할당할 수 없습니다.- 실패한 조인 작업은 뒤에 남아 운영자가 다음 단계로 진행하는 것을 차단했습니다.
- 실패한 조인 시도로 인한 오래된 PVC로 인해 기본 복제본이 다시 정상이 된 후에도 다음 복제본 부트스트랩이 차단되었습니다.
확인된 원인
max_replication_slots는 여전히 이전 단일 인스턴스 형태에 맞게 조정되었습니다.- 실패한 조인 작업은 그대로 유지되었으며 CNPG는 해당 아티팩트가 제거될 때까지 다음 조정 단계로 진행되지 않았습니다.
- 실패한 조인으로 인해 PVC가 초기화 상태에 남겨졌고 CNPG는 계속해서 이를 재사 용하려고 시도했습니다.
따라서 복구 순서는 엄격했습니다.
- 복제 슬롯 한도 상향 조정
- 실패한 조인 작업 제거
- 오래된 PVC를 제거합니다.
복구
사고 기록의 효과적인 복구 순서는 다음과 같습니다.
kubectl delete job infra-db-2-join -n infra-db
kubectl delete pvc infra-db-2 -n infra-db
이러한 수동 삭제는 조인 흐름에 충분한 복제 슬롯을 허용하도록 클러스터 정의가 이미 수정된 후에만 작동했습니다.
현재 저장소가 여전히 증명하는 것
현재 체크인된 매니페스트는 더 이상 정확한 인시던트 토폴로지를 반영하지 않지만 지속적인 매개변수 수정은 유지합니다.
spec:
instances: 1
postgresql:
parameters:
max_replication_slots: "8"
출처: lumie-infra/storage/infra-db/manifests/cluster.yaml
이해해야 할 중요한 드리프트는 다음과 같습니다.
instances: 1에서instances: 2로 이동하던 중에 사건이 발생했습니다.- 현재 저장소는
instances: 1로 돌아갑니다. - 실패의 교훈과 일치하는 더 높은 복제 슬롯 값이 유지되었습니다.
이번 사건이 예상보다 오래 지속된 이유
첫 번째 오류 메시지는 문제를 단일 PostgreSQL 매개변수 실수처럼 보이게 만들었습니다. 그렇지 않았습니다. 조인이 실패하면 운영자 정리와 저장소 정리가 별도의 방해 요소가 되었습니다. 매개변수만 수정하면 클러스터가 새로운 방식으로 정체됩니다.
이것이 지속 가능한 운영 교훈입니다. CNPG에서 복제본 조인 실패로 인해 조정을 계속하기 전에 모두 지워야 하는 제어 플레인 아티팩트와 스토리지 아티팩트가 남을 수 있습니다.
지속적인 교훈
instances및 복제 매개변수를 함께 검토합니다. 둘이 아닌 하나의 변화입니다.- 광범위한 장애 조치 또는 다시 시작 작업을 강제하기 전에 실패한 조인 작업을 확인하세요.
- 로컬 경로 스타일 스토리지를 사용할 때 오래된 PVC를 최고 수준의 차단기로 취급합니다.
- 조치를 취하기 전에 복구 명령을 적어 두십시오. 이번 사건은 명령에 민감한 사건이었습니다.
확인
cd Lumie
sed -n '1,80p' lumie-infra/storage/infra-db/manifests/cluster.yaml
kubectl get clusters.postgresql.cnpg.io -n infra-db infra-db
kubectl get jobs -n infra-db
kubectl get pvc -n infra-db
성공은 저장소에 여전히 제기된 복제 슬롯 설정이 표시되고 라이브 클러스터가 남은 조인 작업을 전달하지 않거나 실패한 확장 시도에서 PVC를 초기화하지 않음을 의미합니다.