IL-0282 Amazon Web Services · 2015-09-20databaseaws
US-East 리전의 DynamoDB 스토리지 서버들이 멤버십 정보를 받지 못해 스스로 요청 처리에서 빠지면서 고객 요청의 약 55% 가 실패했다
DynamoDB 테이블은 파티션으로 나뉘어 여러 스토리지 서버에 흩어져 있다. 어떤 파티션들을 어느 서버가 맡는지 정한 배정을 멤버십이라 하고, 내부 메타데이터 서비스가 이를 관리한다. 스토리지 서버는 주기적으로, 그리고 네트워크 장애 뒤나 시작할 때 메타데이터 서비스에 자기 멤버십을 묻고, 정해진 시간 안에 받지 못하면 재시도하면서 잠시 요청 처리에서 빠진다. 지난 몇 달 동안 고객들은 Global Secondary Indexes, 줄여서 GSI 를 빠르게 도입했다. GSI 는 테이블 데이터를 다른 키로 찾게 해 주는 기능이고, GSI 마다 파티션을 따로 가진다. 그래서 큰 테이블을 가진 고객들이 GSI 를 만들자 일부 서버의 멤버십 목록이 크게 늘었고, 메타데이터 서비스의 처리 시간이 서버가 기다리는 한도에 가까워졌다. AWS 에는 멤버십 크기를 볼 만큼 자세한 모니터링이 없었고, 메타데이터 서비스에 이 무거운 요청을 감당할 용량도 마련해 두지 않았다.
2015년 9월 20일 일요일 2:19am PDT 에 짧은 네트워크 장애가 스토리지 서버 일부에 영향을 줬다. 이 서버들이 한꺼번에 멤버십을 요청하자 큰 멤버십 요청의 처리가 더 느려져 한도를 넘었다. 서버들은 갱신에 실패해 요청 처리에서 빠진 채 재시도를 이어 갔다. 부하가 걸린 메타데이터 서비스는 장애와 관계없는 서버들의 정기 갱신에도 늦게 답했고, 이 서버들도 다수가 빠졌다. 2:37am PDT 에는 고객 요청 오류율이 지난 3년 동안 없던 수준을 훨씬 넘었고, 약 55% 에서 머물렀다. SQS, EC2 Auto Scaling, CloudWatch, AWS Console 로그인처럼 DynamoDB 내부 테이블에 기대는 서비스들도 오류와 지연을 겪었다.
처음에는 메타데이터 서비스의 부하가 너무 높아 관리 요청이 통하지 않았고, 그래서 용량을 늘릴 수 없었다. 여러 번 실패한 뒤 5:06am PDT 에 메타데이터 서비스로 가는 요청을 멈춰 재시도를 줄였고, 관리 요청이 다시 통하자 용량을 크게 늘렸다. 그 뒤 요청을 다시 열고 스토리지 서버를 고객 요청 경로에 되돌렸다. 7:10am PDT 에는 대부분의 고객과 AWS 서비스가 정상 운영을 이어 갈 만큼 오류율이 내려갔다. Auto Scaling 은 쌓인 작업을 10:52am PDT 까지 처리했고 CloudWatch 는 7:29am PDT 에 완전히 회복했다. 남은 0.15%~0.25% 의 오류는 받아야 할 트래픽을 받지 못하던 메타데이터 파티션 하나 때문이었고, 팀은 월요일에 이 파티션을 전체 트래픽으로 되돌려 마무리했다.
- 심각도
- –
- 영향 범위
- The error rate of DynamoDB customer requests in US-East rose far beyond normal by 2:37am PDT and settled at about 55% until error rates came down at 7:10am PDT; Amazon SQS, EC2 Auto Scaling, CloudWatch and AWS Console login were also affected, and some customers saw high error rates and stuck tables into Monday
- 영향 사용자
- DynamoDB customers in US-East and customers of AWS services that depend on DynamoDB
- 지역
- US-East
- 감지까지
- –
- 복구까지
- 4h 51m
증상
2:19am PDT 에 짧은 네트워크 장애가 있은 뒤 DynamoDB 고객 요청의 오류율이 치솟았다. 2:37am PDT 에는 오류율이 지난 3년 동안 겪은 어떤 수준보다 훨씬 높아졌고, 약 55% 에서 머물렀다.
스토리지 서버들이 정해진 시간 안에 메타데이터 서비스에서 멤버십 정보를 받지 못해 요청을 받지 않는 상태로 빠졌다. 멤버십은 어떤 파티션들을 어느 서버가 맡는지 정한 배정이다. 빠진 서버들은 멤버십 요청을 계속 재시도했고, 메타데이터 서비스는 높은 부하에서 벗어나지 못했다.
부하가 걸린 메타데이터 서비스는 처음 네트워크 장애와 관계없던 스토리지 서버들의 정기 확인에도 느리게 응답했다. 이 서버들도 다수가 요청 처리에서 빠졌고, 멤버십 갱신에 한 번 성공한 정상 서버도 다음 갱신에 실패해 다시 사용 불가 상태로 돌아갔다.
DynamoDB 에 기대는 다른 서비스도 오류를 냈다. Amazon SQS 는 처음에 오류와 지연이 조금 늘었다가 5:45am PDT 에 DynamoDB 가 트래픽을 막은 뒤 큐 정보 캐시를 갱신하지 못해 오류율이 크게 올랐다. EC2 Auto Scaling 은 2:15am 부터 7:10am PDT 까지 API 오류가 크게 늘었고, 그 뒤 10:52am PDT 까지 새 인스턴스를 넣거나 비정상 인스턴스를 종료하는 일이 크게 늦어졌다.
CloudWatch 는 2:35am PDT 부터 EC2 지표가 늦거나 빠졌고, 5:51am 무렵부터 7:10am PDT 까지 PutMetricData 호출의 오류율이 크게 올라 모든 AWS 서비스 지표와 사용자 지정 지표에 영향을 줬다. AWS Console 은 5:45am 부터 7:10am PDT 까지 로그인이 수십 초씩 걸렸다.
주 문제를 해결한 뒤에도 오류율이 0.15%~0.25% 사이에 남았다. 월요일에 테이블이 updating 이나 deleting 단계에 멈췄다거나 오류율이 평소보다 높다는 고객 지원 케이스가 늘었다. 전체 오류율은 낮았지만 일부 고객은 유독 높은 오류율을 겪고 있었다.
원인
- 촉발
- 2:19am PDT 의 짧은 네트워크 장애가 DynamoDB 스토리지 서버 일부에 영향을 줬고, 이 서버들이 한꺼번에 메타데이터 서비스에 멤버십 정보를 요청했다.
감지
주 문제를 해결한 뒤 남은 낮은 오류율은 월요일에 고객들이 테이블이 updating 이나 deleting 단계에 멈췄다거나 오류율이 높다는 지원 케이스를 열면서 드러났다.
조치
- 용량 추가가 여러 번 실패한 뒤 5:06am PDT 에 메타데이터 서비스로 가는 요청을 멈췄다. 재시도가 줄어 메타데이터 서비스의 부하가 크게 덜어졌다.
- 메타데이터 서비스가 관리 요청에 다시 응답하자 용량을 크게 늘렸다.
- 메타데이터 서비스로 가는 요청을 다시 열고 스토리지 서버를 고객 요청 경로에 되돌렸다. 7:10am PDT 에 대부분의 고객과 AWS 서비스가 정상 운영을 이어 갈 만큼 오류율이 내려갔다.
- 받아야 할 만큼 트래픽을 받지 못하던 메타데이터 파티션 하나를 전체 트래픽으로 되돌려 남은 오류를 월요일에 정리했다.
후속 조치
- 메타데이터 서비스의 용량을 이미 크게 늘렸다.
- 멤버십 크기 같은 성능 지표를 더 엄격하게 모니터링해 상태를 파악하고 알맞은 용량을 미리 계획한다.
- 스토리지 노드가 멤버십 정보를 요청하는 빈도를 줄인다.
- 메타데이터 서비스가 요청을 처리하는 데 쓸 수 있는 시간을 늘린다.
- DynamoDB 서비스를 나눠 메타데이터 서비스 인스턴스를 여럿 두고, 각 인스턴스가 스토리지 서버의 일부만 맡게 한다.
- SQS 의 메타데이터 캐싱을 고쳐 메타데이터 테이블에 오래 접근하지 못해도 메시지 보내기와 받기가 계속되게 한다.
- Auto Scaling 서버들에 작업을 나누는 방식을 바꿔 쌓인 스케일링 작업을 더 병렬로 처리한다.
- 더 새로운 작업으로 대체된 오래된 스케일링 작업을 걸러 내는 장치를 넣는다.
- 스케일링 작업을 처리하는 용량을 늘린다.
- CloudWatch 가 DynamoDB 의 그룹 멤버십 데이터를 캐싱하는 방식을 바꿔, 갱신이 필요한 지표를 가능한 한 적게 줄인다.
- write-through 캐싱으로 지표를 더 빨리 전달하는 기능을 개발한다. 이 캐시는 지표를 저장하기 전에 바로 보여 준다.
- 타임아웃을 줄인 콘솔 로그인 코드를 며칠 안에 배포한다. 이 코드는 이미 테스트 과정에 들어가 있다.
교훈
AWS 는 멤버십 크기처럼 성능에 영향을 주는 값을 자세히 보지 않아 메타데이터 서비스에 필요한 용량을 미리 잡지 못했다. 전체 오류율이 낮아도 일부 고객에게는 오류가 몰릴 수 있다. AWS 는 이를 늦게 알아채 월요일에 상태 대시보드 게시가 늦었다. 콘솔 로그인은 성공하지 않아도 되는 API 호출에 아주 긴 타임아웃이 걸려 수십 초씩 막혔다. 이런 호출은 빨리 실패하고 로그인을 이어 가게 했어야 했다.
출처
- https://aws.amazon.com/message/5467D2/ · official-status · 보관본
관련 사례
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
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-0037imagePullPolicy가 Always인 DaemonSet이 크래시 루프를 돌며 이미지를 계속 받아, NAT 세 대를 같이 쓰던 리전 전체가 이미지 레지스트리에서 429로 막혔다Datadog · 2019같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0211Mandrill 의 PostgreSQL 샤드 하나가 트랜잭션 ID 랩어라운드를 막으려고 쓰기를 멈춰 약 40시간 동안 메일 발송이 줄었다Mailchimp · 2019같은 원인 · 공통 데이터베이스
IL-0064CPU 를 많이 쓰는 파드가 Google Cloud 노드 하나에 몰려 노드가 커널 패닉으로 죽었고, 다시 배치된 파드가 다음 노드를 또 죽이며 웹사이트와 API 가 멈췄다.Moonlight · 2019같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0334RDS MySQL 의 bookmarks 테이블이 2TB 파일 크기 한도에 닿아 INSERT 가 실패하고 Instapaper 가 31시간 동안 멈췄다Instapaper · 2017같은 원인 · 공통 데이터베이스
IL-0333사양을 낮춘 RDS PostgreSQL 인스턴스가 피크 부하를 못 버텨 헬스 체크가 실패하고 Buildkite 대시보드가 몇 시간 동안 내려갔다Buildkite · 2016같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0282
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0282/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.