Incident Library

IL-0374 DigitalOcean · 2024-08-05database

DigitalOcean 내부 서비스 디스커버리가 전 리전에서 멈춰 생성, 이벤트 처리, 제어판과 API 관리가 실패했다

DigitalOcean 의 내부 서비스 디스커버리는 데이터스토어 하나에 기댄다. 2024년 8월 5일 16:30 UTC 에 새 데이터센터를 더하는 데이터스토어 클러스터 롤아웃이 시작됐고, 정규 유지보수 시간 밖에서 잘못된 복제 설정이 배포됐다. 이 설정은 키가 하나도 없는 새 데이터센터에 모든 키의 소유권 100%를 줬다. 설정은 곧바로 전 세계로 퍼져 모든 리전에서 데이터스토어 노드의 쿼럼을 깨뜨렸다. 서비스 디스커버리의 클라이언트는 데이터스토어를 읽고 쓰지 못했고, 내부 서비스는 의존하는 서비스를 찾지 못했다. 그 결과 전 세계에서 리소스 생성, 이벤트 처리, 여러 제품의 관리가 멈췄다. 기존 고객 리소스의 가용성은 영향을 받지 않았다.

엔지니어들은 16:42 UTC 에 쿼럼과 소유권 문제를 찾았고, 17:00 UTC 에 새 데이터센터를 더한 복제 설정 변경을 근본 원인으로 확인했다. 17:16 UTC 에 그 변경을 되돌려 데이터스토어 소유자가 된 리전에 적용했다. 일부 리전은 새 설정을 받아들이고 회복하기 시작했지만, 늦게 받아들이는 리전도 있었다. 18:25 UTC 부터 엔지니어들은 그런 리전의 노드에 직접 설정을 적용하고 로컬에서 데이터스토어 repair 를 돌려 데이터를 맞춘 뒤 다음 리전으로 넘어갔다. 남은 실패 이벤트를 정리하고 대기 중인 이벤트를 처리하자 19:10 UTC 에 플랫폼이 안정됐다.

심각도
–
영향 범위
Creates, event processing and management through the Cloud Control Panel and the API for Droplets, networking, login and authentication, Block Storage snapshots, Spaces and CDN, Managed Kubernetes and Managed Databases; existing resources stayed available
영향 사용자
–
지역
Global
감지까지
5m
복구까지
2h 40m

증상

2024년 8월 5일 16:30 UTC 부터 DigitalOcean 의 모든 리전에서 이벤트 처리가 실패해 Droplet 이벤트가 실패했고, 리소스 생성과 Cloud Control Panel, API 를 통한 관리가 멈췄다. Droplet 같은 기존 고객 리소스는 계속 온라인이었고 접근할 수 있었다.

내부 서비스들이 자신이 의존하는 다른 서비스를 제대로 찾지 못했다. 처음 보인 영향은 서비스 디스커버리 뒤에 있는 데이터스토어의 I/O 계층이 완전히 멈춘 것이었고, 클라이언트는 데이터스토어를 읽고 쓰지 못했다.

이벤트를 쓰는 Droplet 생성과 업데이트, 네트워크 생성, 로그인과 인증, Block Storage 볼륨 스냅샷 생성, Spaces 와 CDN 생성, Spaces 업데이트, Managed Kubernetes 클러스터 생성, Managed Databases 생성이 영향을 받았다. 이벤트 흐름 밖의 서비스도 서비스 디스커버리로 서로 통신하기 때문에, 고객이 Cloud Control Panel 이나 API 로 여러 서비스를 관리할 때도 영향이 있었을 수 있다.

16:42 UTC 에 엔지니어들은 데이터스토어에 쿼럼이 없고 소유권이 막혀 있다는 문제를 찾았다. 17:16 UTC 에 설정을 되돌리자 일부 이벤트는 더 빨리 실패하기 시작했고, 오류도 분명한 타임아웃 오류에서 엔드포인트를 찾지 못했다는 오류로 바뀌었다. 일부 리전은 되돌린 설정을 늦게 받아들였고, 19:10 UTC 에 남은 실패 이벤트가 풀리며 플랫폼이 안정됐다.

증상 서비스 중단클러스터·노드 생성 정체

원인

촉발
새 데이터센터를 더하는 데이터스토어 클러스터 롤아웃에서 잘못된 복제 설정이 배포됐다. 이 설정은 키가 하나도 없는 새 데이터센터에 데이터스토어의 모든 키 소유권 100%를 줬다.

감지

16:35 UTC 에 서비스 디스커버리를 쓸 수 없다는 첫 보고가 내부에서 올라왔다. 데이터스토어 클러스터 롤아웃이 시작되고 5분 뒤였다.

조치

후속 조치

교훈

–

출처

관련 사례

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

kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이 사례와 같은 상태를 점검합니다. 이 사례의 구성 요소: 코디네이션 키-값 저장소, 서비스 디스커버리, 데이터베이스 복제. 점검 항목의 근거는 이 사례 같은 공개 보고서입니다.

AI 도구와 스크립트용

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