Incident Library

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 까지 이어졌다.

증상 서비스 중단지연 시간 증가노드 증설 실패클라우드 API 호출 한도 소진

원인

촉발
18:50 UTC 에 분배 서비스의 PostgreSQL 데이터베이스에서 필드 타입을 바꾸는 배포를 내보냈다. 이 스키마 변경은 하위 호환되지 않았다.

감지

18:50 UTC 배포 직후 분배 실패와 관련된 오류와 알림이 바로 보였다.

조치

후속 조치

교훈

–

출처

참고 문서

관련 사례

내 클러스터에도 있는지 확인하기

kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이 사례와 같은 상태를 점검합니다. 이 사례의 구성 요소: 데이터베이스, 노드 풀. 점검 항목의 근거는 이 사례 같은 공개 보고서입니다.

AI 도구와 스크립트용

API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.