IL-0318 Clerk · 2026-03-10databasegcp
Google Cloud SQL 데이터베이스의 디스크 지연이 치솟아 Clerk API 가 429 를 내며 전체 장애가 났다
Clerk 는 2021년부터 고가용성 구성의 Google Cloud SQL Enterprise Plus 를 데이터베이스로 쓴다. Google Cloud SQL 은 데이터베이스 가상 머신을 일상적으로 라이브 마이그레이션한다. 이 작업은 Cloud SQL 문서에는 없지만 Google Compute Engine 의 라이브 마이그레이션과 비슷하다. 정상으로 끝나면 가용성이나 부하에 영향이 없다. Clerk 는 라이브 마이그레이션이 언제 일어나는지 미리 통보받지 않는다. 2025년 9월에는 다른 라이브 마이그레이션이 큰 장애를 일으켰다. 그때 Google 은 티켓을 P0 로 올리고 데이터베이스를 데이터센터에 고정해 추가 라이브 마이그레이션을 막았다. 두 회사는 몇 달 동안 함께 일한 끝에 1월에 고정을 풀었다. 고정을 푼 뒤 첫 라이브 마이그레이션은 문제없이 끝났다.
2026-03-10 에 라이브 마이그레이션이 다시 실패했다. 데이터베이스의 디스크 지연이 크게 늘었고, 이것이 락 경합을 키워 결국 전체 서비스 장애로 이어졌다. 15:57 UTC 에 알림이 API 의 지연과 5xx 증가를 알렸고 내부에서 사고를 선언했다. 쿼리와 트랜잭션이 오래 걸려 컴퓨트가 포화되자 요청이 429 를 받았고, 자동으로 작동한 세션 장애 대비 기능도 대부분 429 를 냈다. 모든 읽기를 replica 로 돌려 봤지만 소용없었다. 16:10 UTC 에 Origin Outage Mode 를 켜자 세션 관리가 다시 돌아갔다. 팀은 읽기의 IO wait 만 오르는 것을 보고 인프라 문제를 의심해 GCP 에 티켓을 열었다. 16:23 UTC 에 마이그레이션이 끝나며 문제가 스스로 풀렸고, 시스템이 안정된 것을 확인한 뒤 Origin Outage Mode 를 껐다. GCP 가 나중에 근본 원인을 알려 주었다.
- 심각도
- –
- 영향 범위
- Clerk's APIs: increased latency, 5xx errors and then 429 responses, and a complete service outage; session management kept working from 16:10 UTC through Origin Outage Mode
- 영향 사용자
- Clerk customers and the users of their applications
- 지역
- –
- 감지까지
- 1m
- 복구까지
- 27m
증상
2026-03-10 15:57 UTC 에 알림 시스템이 Clerk API 전반의 지연 증가와 5xx 오류 증가를 알렸다. 모니터링에는 그보다 1분쯤 앞서 시작된 데이터베이스 락 경합 증가가 보였다.
데이터베이스 CPU 사용률은 정상 범위였고 데이터베이스 자체도 돌아가고 있었다. 그러나 쿼리와 트랜잭션이 훨씬 오래 걸려 컴퓨트 자원이 포화됐고, 컴퓨트가 바닥나자 들어오는 요청이 429 를 받았다.
세션 장애 대비 기능이 origin 에서 자동으로 작동해 세션 토큰 요청을 계속 받았다. 그러나 컴퓨트가 이미 포화돼 처리가 너무 오래 걸렸고, 세션 토큰 요청도 대부분 429 를 받았다. 이 429 는 내부 서비스가 낸 응답이 500 으로 바뀌지 않고 그대로 전달된 것이었다.
조사 중 읽기의 IO wait 가 올랐는데 쓰기는 그만큼 늘지 않은 특이한 모습이 보였다. 팀은 이때 인프라 문제를 의심해 GCP 에 티켓을 열었다.
팀은 원인을 찾아 나섰지만 뚜렷한 단서가 없었다. 완화책으로 모든 읽기를 replica 로 돌려 primary 데이터베이스의 부담을 덜려 했지만 소용없었다.
원인
원인 클라우드 제공자 장애
- 촉발
- Google Cloud SQL 이 Clerk 데이터베이스를 호스팅하는 가상 머신을 일상적으로 라이브 마이그레이션하다 실패했다. Clerk 는 라이브 마이그레이션 시점을 미리 통보받지 않는다.
감지
15:57 UTC 에 알림 시스템이 API 전반의 지연 증가와 5xx 오류 증가를 알렸고, 이때 내부에서 사고를 선언했다.
조치
- 16:10 UTC 에 Origin Outage Mode 를 켜 세션 관리가 계속 돌아가게 했다.
- 읽기의 IO wait 만 오르는 것을 보고 인프라 문제를 의심해 GCP 에 티켓을 열었다.
- 16:23 UTC 에 문제가 스스로 풀리고 시스템이 안정된 것을 확인한 뒤 곧 Origin Outage Mode 를 껐다.
후속 조치
- 추가 라이브 마이그레이션을 막도록 Google 에 데이터베이스를 다시 고정해 달라고 요청했다. 글을 쓸 때까지 요청은 받아들여지지 않았다.
- 앞으로 모든 Postgres 데이터베이스 유지 보수는 기존 방식의 replica 승격으로 한다. Clerk 는 이미 안전하고 빠른 replica 승격 자동화를 갖고 있고, 2026-01-17 Postgres 메이저 버전 업그레이드에 문제없이 썼다.
- Google 이 라이브 마이그레이션을 영구히 끌 방법을 주지 않으면 다른 데이터베이스 제공업체로 옮기거나 Postgres 를 직접 운영한다. 지금 선택지를 조사하고 있다.
- 내부 서비스의 429 가 그대로 전달되지 않고 500 으로 바뀌게 고쳐, 애플리케이션이 오류 코드로 Clerk 시스템의 상태를 정확히 판단하게 한다.
- 엔지니어링 팀 대부분을 안정성 중심 프로젝트로 옮겼고, 당분간 시스템 안정성 회복을 가장 앞에 둔다.
교훈
2025년 9월 장애에서 Clerk 는 라이브 마이그레이션이 실패하면 작업이 끝날 때까지 서비스가 멈추고, 마이그레이션 도중 replica 장애 조치를 하는 것도 안전하지 않다는 것을 배웠다. 몇 달에 걸친 Google 과의 작업 뒤에도 이번 장애로 라이브 마이그레이션이 여전히 안전하지 않다는 것이 드러났다. 라이브 마이그레이션은 잘 되면 무중단이지만 안을 들여다볼 수 없어 Google 의 말을 믿는 수밖에 없다. 그래서 Clerk 는 준비가 더 들더라도 기존 방식의 replica 승격에 기대는 편이 더 안전하다고 보았다.
출처
관련 사례
같은 원인 · 공통 데이터베이스
IL-0368AWS us-east-1 장애 동안 PlanetScale 컨트롤 플레인이 멈추고, 이어 일부 데이터베이스 브랜치가 네트워크 분할로 쿼리에 실패했다PlanetScale · 2025같은 원인 · 공통 데이터베이스
IL-0284Workers KV 의 저장소 인프라가 멈춰 KV 에 기대는 Access, WARP, Gateway, 대시보드 같은 Cloudflare 서비스 여럿이 2시간 28분 동안 전 세계에서 실패했다Cloudflare · 2025같은 원인 · 공통 데이터베이스
IL-0119Cosmos DB 장애 뒤 ChatGPT 웹 서비스 파드가 헬스 체크 실패로 크래시 루프에 빠져 chatgpt.com 과 일부 API 의 오류율이 높아졌다.OpenAI · 2025같은 원인 · 공통 데이터베이스
IL-0145Australia East 의 전압 강하로 냉각기가 멈춰 데이터 홀 장비가 꺼지면서, 영역 중복이 아닌 AKS 작업 큐 데이터베이스가 내려가 두 리전의 AKS 생성, 수정, 삭제 작업이 막혔다Microsoft Azure · 2023같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0172AWS 도쿄 리전 한 AZ 의 냉각 장애로 쿠버네티스 위에서 돌던 CockroachDB 노드 60대 중 6대가 22분 만에 죽었고, AZ 토폴로지 설정이 없어 일부 Range 가 정족수를 잃었다.Devsisters · 2021같은 원인 · 공통 데이터베이스
IL-0193GCP SSD 영구 디스크 장애로 Cassandra 파드가 볼륨을 붙이지 못했고, OrderedReady 정책 때문에 나머지 파드도 다시 뜨지 못한 데다 Metrictank 가 바뀐 Cassandra IP 로 다시 연결하지 못해, Grafana Cloud Graphite 쿼리 일부가 최대 23시간 실패했다.Grafana Labs · 2019같은 원인 · 공통 데이터베이스
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0318
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0318/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.