IL-0328 CircleCI · 2021-11-08database
배포 뒤 CircleCI 의 모든 executor 에서 작업이 "not running" 상태로 멈췄다
CircleCI 의 실행 플랫폼으로 들어오는 모든 작업은 분배 서비스를 거쳐 알맞은 큐로 간다. 이 서비스는 PostgreSQL 데이터베이스와 스키마 검증으로 데이터를 관리한다. 분배 서비스는 처리할 작업을 찾다가 잘못된 데이터를 만나면 멈추고 처음부터 다시 시도한다.
CircleCI 는 2021-11-08 18:50 UTC 에 분배 데이터베이스의 필드 타입을 바꾸는 배포를 내보냈다. 새로 들어온 작업은 새 타입의 데이터를 받았지만 배포 전부터 있던 작업은 분배에 실패했다. 팀은 곧바로 오류와 알림을 보고 변경을 롤백했다. 그러자 이번에는 두 배포 사이에 쓰인 데이터를 읽을 수 없어 분배가 계속 실패했다. 18:50 부터 19:43 까지 모든 executor 의 고객 작업이 "not running" 상태로 막혔다.
팀은 분배 시스템이 그 필드를 무시하게 하는 수정을 빠르게 만들어 직접 배포했다. 그동안 몰려들 작업인 thundering herd 에 대비해 주 컴퓨트 클러스터를 직접 늘렸다. 늘린 새 노드가 예상보다 늦게 합류해 상당수가 unhealthy 로 표시되고 종료되면서 복구가 늦어졌다. Mac 을 포함한 machine executor 도 제공자의 속도 제한으로 늦게 프로비저닝됐다. Docker executor 가 먼저 회복했고, machine executor 의 긴 대기 시간은 20:19 UTC 까지 이어졌다. 큐가 줄어 정상 처리가 확인된 뒤 장애를 해결로 처리했다.
- 심각도
- –
- 영향 범위
- Customer jobs on all executors were blocked in a "not running" state from about 18:50 to 19:43 UTC, and queue times stayed longer than usual, particularly for machine executors, until 20:19 UTC
- 영향 사용자
- CircleCI customers
- 지역
- –
- 감지까지
- –
- 복구까지
- 1h 29m
증상
2021-11-08 18:50 UTC 배포 직후 오류와 알림이 바로 들어왔고, 모든 executor 에서 고객 작업이 "not running" 상태로 막혔다.
오류 수 그래프에는 롤백 전후로 실패 상황이 뒤바뀐 모습이 보였다. 먼저 오류가 치솟고, 다른 작업에 의존하는 작업이 큐에 들어가지 못하면서 들어오는 작업이 줄었다. 롤백한 시점에 오류의 모양은 바뀌었지만 사라지지 않았고, 들어오는 작업은 천천히 계속 줄었다.
롤백으로 해결하려 했지만, 두 배포 사이에 쓰인 데이터를 되돌린 코드가 읽지 못해 분배가 계속 실패했다.
작업이 다시 흐르기 시작한 뒤에도 큐 대기 시간이 평소보다 오래 높았다. 주 컴퓨트 노드를 늘렸는데 새 노드가 예상보다 늦게 합류해 상당수가 unhealthy 로 표시되고 종료됐다. Mac 을 포함한 machine executor 는 제공자의 속도 제한으로 늦게 프로비저닝됐다. Docker executor 가 먼저 회복했고, machine executor 의 긴 대기 시간은 20:19 UTC 까지 이어졌다.
원인
- 촉발
- 18:50 UTC 에 분배 서비스의 PostgreSQL 데이터베이스에서 필드 타입을 바꾸는 배포를 내보냈다. 이 스키마 변경은 하위 호환되지 않았다.
감지
18:50 UTC 배포 직후 분배 실패와 관련된 오류와 알림이 바로 보였다.
조치
- 오류와 알림을 보고 곧바로 변경을 롤백했다. 롤백 뒤에는 두 배포 사이에 쓰인 데이터를 읽지 못해 분배가 계속 실패했다.
- 분배 시스템이 그 필드를 무시하게 하는 수정을 빠르게 만들고 빌드해 직접 배포했다.
- 몰려들 작업에 대비해 주 컴퓨트 클러스터를 직접 늘렸다. 이 수동 확장은 CircleCI 장애 대응 절차의 표준 단계다.
- 작업 큐가 줄어 정상 처리가 이어지는 것을 잠시 지켜본 뒤 장애를 해결로 처리했다.
후속 조치
- 같은 장애가 다시 나지 않도록 테스트 전략의 빈틈을 찾아 고친다.
- 비슷한 배포가 시스템의 모든 작업에 영향을 주지 않도록, 분배 서비스가 예상하지 못한 데이터를 만났을 때의 동작을 바꾼다.
- 예상하지 못한 장애가 났을 때 더 빨리 복구할 수 있게 한다.
교훈
–
출처
- https://discuss.circleci.com/t/incident-report-november-8-2021-jobs-stuck-in-a-not-running-state/41890 · blog · 보관본
참고 문서
관련 사례
같은 원인 · 공통 데이터베이스
IL-0136Sweden Central 리전에서 내부 서비스 배포가 캐시를 비워 메타데이터 백엔드에 평소 20배의 트래픽이 몰렸고, 데이터베이스 연결에 기대는 헬스 체크가 인스턴스를 계속 재시작시켜 Azure OpenAI 요청이 6시간 가까이 실패했다Microsoft Azure · 2026같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0237us-southcarolina 리전에서 Lucidworks AI 의 호스팅 LLM 이 약 1시간 반 동안 500 과 429 오류를 내며 멈췄다Lucidworks · 2026 · sev1같은 원인 · 공통 노드 풀
같은 원인 · 공통 노드 풀
IL-0510MIT Learn 운영 RDS PostgreSQL 의 저장 공간이 임시 파일로 가득 차 learn.mit.edu 가 세 시간 동안 503 과 504 를 냈다MIT Open Learning · 2026같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0547Buildkite 의 Agent API, REST API, GraphQL 이 annotations 테이블 쿼리 타임아웃으로 4시간 가까이 저하됐다Buildkite · 2025같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 노드 풀
IL-0324External Storage 데이터베이스 클러스터에 과부하가 걸려 mw-api-int, mw-parsoid, mw-jobrunner 의 지연과 데이터베이스 오류가 늘었다Wikimedia Foundation · 2025같은 원인 · 공통 데이터베이스
IL-0307Supabase us-east-1 에서 Supavisor 2.0 업그레이드 뒤 Postgres 연결 풀러가 테넌트 약 80% 의 연결을 끊었다Supabase · 2025같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0523TANF-app 의 운영 배포가 PostgreSQL 마이그레이션 실패로 두 달 동안 막힘U.S. Department of Health and Human Services · 2023같은 원인 · 공통 데이터베이스
IL-0567쿠키런: 오븐브레이크의 패키지 매출 랭킹 기능을 배포한 뒤 Aurora MySQL CPU가 100%에 이르러 유저가 게임에 접속하지 못했다Devsisters · 2023같은 원인 · 공통 데이터베이스
IL-0163자동 테스트가 잡지 못한 API 변경이 배포돼 LKE 클러스터 크기를 바꿀 때 노드가 잘못된 수만큼 만들어졌고, 고객 계정에 과금되는 노드가 늘었다Linode · 2023같은 원인 · 공통 노드 풀
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0524인덱스를 다시 만드는 마이그레이션이 운영에서 Transactions 테이블을 잠가 Open Collective 서비스가 느려짐Open Collective · 2023같은 원인 · 공통 데이터베이스
같은 원인 · 공통 노드 풀
같은 원인 · 공통 데이터베이스
IL-01492019-09-28 07:20 UTC 이전에 만든 VMSS 기반 AKS 클러스터의 업그레이드가 PlatformImageNotFound 오류로 실패했다.Microsoft Azure · 2019같은 원인 · 공통 노드 풀
IL-0467Prow 빌드 클러스터의 노드 업그레이드 중 Boskos 파드가 크래시 루프에 빠져 GCP 프로젝트가 필요한 테스트 작업이 9시간 넘게 모두 실패했다Kubernetes project · 2019같은 원인 · 공통 노드 풀
같은 원인 · 공통 데이터베이스
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0328
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0328/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.