IL-0321 GitLab · 2021-01-16databasegcp
GitLab.com 의 Patroni 주 데이터베이스 노드가 멈춰 장애 조치가 일어났고 쓰기 요청에서 5xx 오류가 튀었다
2021-01-16 GitLab 인프라 팀은 production#2648 변경을 진행하면서, 관련 파일시스템 변경에 앞선 안전 조치로 23:36 UTC 에 모든 Patroni 데이터베이스 노드에서 GCP 디스크 스냅샷을 동시에 시작했다. 팀은 스냅샷이 GCP API 로 뒤에서 처리돼 실행 중인 노드에 영향을 주지 않는다고 잘못 알고 있었다.
Postgres 데이터 볼륨의 스냅샷은 IO 지연을 크게 끌어올렸다. 팀은 스냅샷이 네트워크로 연결된 영구 디스크에 쓸 수 있는 네트워크 대역폭을 다 써 버렸기 때문으로 추정했다. 영구 디스크는 VM 인스턴스에 할당된 네트워크 대역폭을 나눠 쓴다. 변경을 계획한 엔지니어는 이 구조를 몰랐고, 그 때문에 하트비트와 헬스 체크를 놓칠 수 있다는 점도 몰랐다. 주 노드의 디스크 접근이 멈췄고, 같은 때 그 노드는 consul 과의 네트워크 연결도 잃었다. 둘 중 하나 또는 둘 다가 장애 조치를 일으켰다. 23:40 에 Patroni 가 patroni-06 의 락을 무효로 하고 장애 조치를 시작했고 23:41 에 patroni-03 이 새 주 노드가 됐다.
23:38 부터 23:42 사이에 데이터베이스 쓰기가 필요한 요청 일부가 5xx 오류를 받았고, 23:42 에 오류율이 내려갔다. 팀은 예상보다 심한 성능 저하를 보고 세 존 가운데 두 존의 스냅샷을 취소했다. 장애 조치가 일어난 것은 나중에 변경 계획의 다음 단계를 진행하면서 알았다. 23:56 에 Slack 에서 장애를 선언했다. 전에도 스냅샷 때문에 Patroni 장애 조치가 난 비슷한 일이 있었다.
- 심각도
- –
- 영향 범위
- Some GitLab.com requests that needed database writes returned 5xx errors for about 4-5 minutes: about 0.133% of Rails requests and about 2.86% of Workhorse requests
- 영향 사용자
- All active users during the incident
- 지역
- –
- 감지까지
- 1m
- 복구까지
- 4m
증상
2021-01-16 23:38 UTC 부터 GitLab.com 의 오류가 급증했고 23:39 에 서비스 중단 알림이 여러 개 들어왔다. 데이터베이스 쓰기가 필요한 요청 일부가 5xx 오류를 받았다.
오류는 약 4~5분 이어졌다. Rails 에서는 23:38:30 과 23:42:00 사이에 약 2,000건의 5xx 오류가 났고, 기록된 요청 1,521,180건에 견주면 약 0.133% 였다. Workhorse 에서는 481,335건 가운데 13,757건으로 약 2.86% 였다. 장애 중에 확인 삼아 새로 고친 페이지는 정상으로 떴다.
23:40 에 Patroni 가 patroni-06 의 락을 무효로 하고 장애 조치를 시작했고, 23:41 에 patroni-03 이 새 주 노드가 됐다. 23:42 에 오류율이 내려갔다.
팀은 마지막으로 한 작업인 스냅샷이 원인이라는 것을 곧바로 알았다. 예상보다 심한 성능 저하를 보고 세 존 가운데 두 존의 스냅샷을 취소했다. 하지만 장애 조치까지 일어났다는 것은 장애 중에 알아채지 못했고, 변경 계획의 다음 단계를 진행하면서 나중에 알았다.
증상 오류율 상승
원인
원인 용량 한계
- 촉발
- production#2648 변경을 진행하던 엔지니어가 23:36 UTC 에 모든 Patroni 노드에서 GCP 디스크 스냅샷을 동시에 시작했다. 이 스냅샷은 관련 파일시스템 변경에 앞선 안전 조치였다. 엔지니어는 스냅샷이 GCP API 로 뒤에서 처리돼 실행 중인 노드에 영향을 주지 않는다고 잘못 알고 있었다.
감지
다운스트림 서비스의 영향을 알리는 알림이 한꺼번에 쏟아지면서 알아챘다. 23:38 UTC 에 오류 급증이 보였고 23:39 에 서비스 중단 알림이 여러 개 들어왔다. 감지까지 1~2분이 걸렸다.
조치
- 23:40 UTC 에 Patroni 가 patroni-06 의 락을 무효로 하고 장애 조치를 시작했고, 23:41 에 patroni-03 이 새 주 노드가 됐다.
- 예상보다 심한 성능 저하를 보고 세 존 가운데 두 존의 스냅샷을 취소했다.
후속 조치
- Patroni 와 Postgres 런북에 GCP 스냅샷의 모범 사례를 분명히 적는다.
- 변경 관리 검토자와 승인자가 쓸 점검 목록을 런북에 넣고 핸드북에서 가리킨다.
- IO 민감도 문제를 더 논의하려고 Google 과 통화 일정을 잡는다.
교훈
실행 중인 PG 리더 노드에서 GCP 스냅샷을 뜨지 않는다. 변경 요청 이슈 본문이 바뀌거나 내용이 더해지면, 기술 검토자는 관리자나 디렉터가 승인하기 전에 그 내용을 하나하나 검토한다. Datastores 팀은 운영 데이터베이스의 백업과 스냅샷이 어떻게 동작하는지 자세히 공유한다. 변경과 관련된 작업은 일정 초대에 잡힌 변경 시작 시각이 된 뒤에 시작한다.
출처
참고 문서
관련 사례
같은 원인 · 공통 데이터베이스, 클라우드 블록 스토리지
같은 원인 · 공통 데이터베이스 장애 조치 관리자, 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0288CDN77 의 ClickHouse 데이터 파이프라인에서 이중화된 인스턴스 세 곳의 ZooKeeperWait 가 수천 초로 치솟아 복제가 한 시간 넘게 느려졌다CDN77 · 2026같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0305Intercom 의 PlanetScale 샤드 하나에서 복제본이 CPU 100% 로 주 데이터베이스를 따라가지 못해 받은편지함에 최대 2.2시간 전의 데이터가 보였다Intercom · 2026같은 원인 · 공통 데이터베이스
IL-0390PostHog US Cloud 의 Persons Postgres 데이터베이스 쓰기가 크게 느려져 이벤트와 persons 수집이 최대 2일 지연됐다PostHog · 2025같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0287Atlas 와 Cloud Manager 의 모니터링을 받치는 내부 데이터베이스 클러스터의 샤드 하나가 과부하되어 지표 수집과 클러스터 작업이 늦어졌다MongoDB · 2025같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0298Wikimedia sessionstore 의 Cassandra 노드가 디스크가 가득 차 잇따라 죽고 쿼럼을 잃어 편집이 실패했다Wikimedia Foundation · 2025같은 원인 · 공통 데이터베이스
IL-0312max_connections 를 올리려고 재시작한 주 PostgreSQL 데이터베이스가 다시 올라오지 않아 Gadget 의 모든 앱 요청이 멈췄다Gadget · 2024같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0110Grafana Agent 파드가 메모리를 많이 쓰던 노드에 Hangfire 파드가 함께 올라가 시스템 OOM 으로 CrashLoopBackOff 를 반복했고, 노드가 응답을 멈추고 NotReady 가 됐다.DFDS · 2024같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0202갑자기 몰린 쿼리와 데이터베이스 쓰기로 Honeycomb 수집 호스트가 메모리 부족으로 죽었고, 쿠버네티스 CrashLoopBackOff 가 용량 회복을 막아 US1 이벤트 수집이 한 시간 넘게 불안정했다Honeycomb · 2023 · sev1같은 원인 · 공통 데이터베이스
IL-0386Google Cloud 로 옮긴 뒤 GKE 노드에서 Postgres 연결 타임아웃과 memcached i/o timeout 이 간헐적으로 튀었다incident.io · 2023같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0206GKE 파드 안의 Consul 에이전트가 메모리 급증으로 거듭 OOM kill 되어 Rails 파드가 데이터베이스 복제본을 찾지 못했고, 모든 쿼리가 primary 로 몰려 GitLab.com 이 느려졌다.GitLab · 2022같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0496전역 복제 Cassandra 클러스터에서 모든 리전의 인스턴스 CPU 가 100% 로 치솟아 쿼리가 타임아웃됐고, 같은 부하가 이틀 저녁 더 찾아왔다Ably · 2020같은 원인 · 공통 데이터베이스
IL-0443Aurora MySQL reader 가 이유 없이 재시작한 뒤 writer 의 insert latency 가 7배쯤 오르고 replication lag 가 하루 넘게 이어졌다Repro · 2019같은 원인 · 공통 데이터베이스
IL-0401Kubernetes 프로젝트의 Prow 빌드 클러스터 노드가 GCP 디스크 IOPS 스로틀링에 걸려 테스트가 이상하게 실패하고 PR 머지가 몇 시간 멈췄다Kubernetes project · 2019같은 원인 · 공통 클라우드 블록 스토리지
IL-0037imagePullPolicy가 Always인 DaemonSet이 크래시 루프를 돌며 이미지를 계속 받아, NAT 세 대를 같이 쓰던 리전 전체가 이미지 레지스트리에서 429로 막혔다Datadog · 2019같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스 장애 조치 관리자
IL-0211Mandrill 의 PostgreSQL 샤드 하나가 트랜잭션 ID 랩어라운드를 막으려고 쓰기를 멈춰 약 40시간 동안 메일 발송이 줄었다Mailchimp · 2019같은 원인 · 공통 데이터베이스
IL-0064CPU 를 많이 쓰는 파드가 Google Cloud 노드 하나에 몰려 노드가 커널 패닉으로 죽었고, 다시 배치된 파드가 다음 노드를 또 죽이며 웹사이트와 API 가 멈췄다.Moonlight · 2019같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0518GKE 위 gitlab.freedesktop.org 의 디스크가 모자라 저장소를 늘리려던 30분 작업이 GitLab 전체의 4시간 장애가 됐다freedesktop.org · 2018같은 원인 · 공통 클라우드 블록 스토리지
같은 원인 · 공통 클라우드 블록 스토리지
IL-0334RDS MySQL 의 bookmarks 테이블이 2TB 파일 크기 한도에 닿아 INSERT 가 실패하고 Instapaper 가 31시간 동안 멈췄다Instapaper · 2017같은 원인 · 공통 데이터베이스
IL-0333사양을 낮춘 RDS PostgreSQL 인스턴스가 피크 부하를 못 버텨 헬스 체크가 실패하고 Buildkite 대시보드가 몇 시간 동안 내려갔다Buildkite · 2016같은 원인 · 공통 데이터베이스
IL-0282US-East 리전의 DynamoDB 스토리지 서버들이 멤버십 정보를 받지 못해 스스로 요청 처리에서 빠지면서 고객 요청의 약 55% 가 실패했다Amazon Web Services · 2015같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 클라우드 블록 스토리지
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0321
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0321/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.