{"id":"IL-0536","org":"Amazon Web Services","date":"2014-06-13","docs":[],"title":{"en":"Amazon SimpleDB in US East returned HTTP 500 to nearly all API calls for two hours after its nodes left the cluster","ko":"US East 의 Amazon SimpleDB 가 두 시간 동안 거의 모든 API 호출에 실패했다"},"domain":["aws","database"],"impact":{"scope":"All SimpleDB API calls except a fraction of eventually consistent reads for two hours, then elevated errors for CreateDomain and DeleteDomain for a little over two more hours","users":"SimpleDB customers","region":"US East"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"The short handshake timeout had been chosen to detect replica failures quickly, and AWS concluded it was too low. Nodes removing themselves from the cluster right after several handshake timeouts widened the event and caused the API errors; the nodes should have waited and retried with a longer timeout.","ko":"핸드셰이크 타임아웃 값을 낮게 잡은 것은 복제본 실패를 빨리 알아채기 위해서였지만, 지나고 보니 너무 낮았다. 핸드셰이크 타임아웃을 여러 번 겪은 노드가 곧바로 클러스터에서 빠지는 동작이 장애의 범위를 넓혔고 API 오류로 이어졌다. 노드는 기다렸다가 더 긴 타임아웃으로 핸드셰이크를 다시 시도했어야 했다."},"related":[],"sources":[{"url":"https://aws.amazon.com/message/65649/","kind":"official-status","archived":"https://web.archive.org/web/20261023055507/https://aws.amazon.com/message/65649/"}],"summary":{"en":"SimpleDB is a distributed datastore that replicates customer data across multiple data centers. Storage nodes hold user data, with each customer Domain replicated across a group of storage nodes, and metadata nodes record which storage nodes hold each Domain. An internal lock service, itself replicated across data centers, decides which nodes are responsible for a Domain, and every node handshakes with it periodically to confirm that it still owns its data or metadata. When power loss took down several storage nodes in one data center at once, the lock service had to de-register them from their replication groups quickly, and this sudden load raised the handshake latency for the healthy nodes. The healthy storage and metadata nodes could not finish their handshakes within the configured handshake timeout, and after several retries and timeouts the nodes removed themselves from the production cluster, so API requests failed with HTTP 500.\n\nA storage node can only rejoin the cluster after a metadata node authorizes it, which keeps nodes with stale data out, but the metadata nodes had removed themselves for the same reason and could not authorize anyone. Engineers raised the handshake timeout values by hand and restarted a subset of metadata nodes, which then authorized the storage nodes to rejoin. At 11:16 PM PDT all APIs except CreateDomain and DeleteDomain worked normally. Those two calls are served by the metadata nodes, so the two calls were throttled until 1:30 AM to let the rest of the metadata nodes recover safely.","ko":"SimpleDB 는 고객 데이터를 여러 데이터센터에 복제하는 분산 데이터 저장소다. 스토리지 노드는 사용자 데이터를 저장한다. 고객의 Domain 은 하나마다 스토리지 노드 묶음에 복제된다. 메타데이터 노드는 각 Domain 이 어느 스토리지 노드에 있는지 같은 메타데이터를 저장한다. SimpleDB 는 어떤 Domain 을 어느 노드 묶음이 맡을지 내부 락 서비스로 정한다. 이 락 서비스도 여러 데이터센터에 복제돼 있다. 각 노드는 주기적으로 락 서비스와 핸드셰이크해 자기가 맡은 데이터나 메타데이터를 여전히 맡고 있는지 확인한다.\n\n6월 13일 한 데이터센터에서 서버에 전원이 끊겨 스토리지 노드 여러 대가 한꺼번에 내려갔다. SimpleDB 는 여러 노드가 동시에 실패해도 버티도록 만들어졌지만, 이번 실패 방식에서는 락 서비스가 실패한 스토리지 노드를 복제 그룹에서 빠르게 등록 해제하느라 락 서비스의 부하가 갑자기 크게 늘었다. 그 때문에 정상 노드와 락 서비스 사이의 핸드셰이크가 느려졌고, 노드들은 정해진 핸드셰이크 타임아웃 안에 핸드셰이크를 끝내지 못했다. 재시도와 타임아웃이 몇 번 되풀이되자 스토리지 노드와 메타데이터 노드가 스스로 운영 클러스터에서 빠졌고, API 요청이 500 오류를 받았다. 스토리지 노드는 메타데이터 노드의 승인을 받아야 클러스터에 다시 들어갈 수 있다. 오래된 데이터를 가진 노드가 실수로 들어오지 않게 하려는 규칙이다. 그런데 메타데이터 노드도 같은 핸드셰이크 타임아웃 때문에 내려가 있어서 승인을 해 줄 수 없었다.\n\n문제를 찾은 뒤 엔지니어들은 핸드셰이크 타임아웃 값을 손으로 늘리고 메타데이터 노드 일부를 재시작해 스토리지 노드를 승인하게 했다. 스토리지 노드가 클러스터에 다시 들어가면서 PDT 오후 11:16 에 CreateDomain 과 DeleteDomain 을 뺀 모든 API 가 정상으로 돌아왔다. 나머지 메타데이터 노드가 안전하게 회복하도록 메타데이터 노드가 처리하는 CreateDomain 과 DeleteDomain 호출은 오전 1:30 까지 스로틀링했다."},"trigger":{"en":"Power was lost to the servers that hosted several SimpleDB storage nodes in a single data center, and those storage nodes became unavailable at the same time.","ko":"한 데이터센터에서 서버에 전원이 끊겨 SimpleDB 스토리지 노드 여러 대가 한꺼번에 내려갔다."},"severity":"unknown","symptoms":["service-unavailable","high-error-rate"],"timeline":{"detected_after":null,"resolved_after":"4h 14m"},"date_kind":"incident","detection":null,"components":["database","coordination-store","datacenter-facility"],"root_cause":"software-bug","remediation":[{"text":{"en":"Raised the lock service handshake timeout values by hand","ko":"핸드셰이크 타임아웃 값을 손으로 늘렸다."}},{"text":{"en":"Restarted a subset of metadata nodes, which could then authorize the storage nodes to rejoin the cluster","ko":"메타데이터 노드 일부를 재시작해 스토리지 노드를 승인하게 했다. 스토리지 노드는 클러스터에 다시 들어가 고객 데이터 요청을 처리했다."}},{"text":{"en":"Throttled CreateDomain and DeleteDomain calls until 1:30 AM while the remaining metadata nodes recovered","ko":"나머지 메타데이터 노드가 안전하게 회복하도록 메타데이터 노드가 처리하는 CreateDomain 과 DeleteDomain API 호출을 PDT 오전 1:30 까지 스로틀링했다."}}],"action_items":[{"text":{"en":"Set a longer lock service handshake timeout in all SimpleDB Regions","ko":"락 서비스의 핸드셰이크 타임아웃을 더 길게 잡는다. 이 수정을 모든 SimpleDB 리전에 배포한다."}},{"text":{"en":"Make nodes wait and retry handshakes later with a longer timeout instead of removing themselves from the cluster after repeated timeouts","ko":"핸드셰이크 타임아웃을 여러 번 겪은 노드가 곧바로 클러스터에서 빠지지 않고, 기다렸다가 더 긴 타임아웃으로 핸드셰이크를 다시 시도하게 한다. 이 수정을 모든 SimpleDB 리전에 배포한다."}}],"contributing":["automation-amplified"],"recurrence_of":null,"symptoms_text":{"en":"From 9:16 PM to 11:16 PM PDT on June 13, Amazon SimpleDB in the US East Region was unavailable to all API calls except a fraction of eventually consistent reads, and SimpleDB API requests returned server-side errors (http response code 500).\n\nAfter 11:16 PM most APIs worked again, but CreateDomain and DeleteDomain calls kept elevated error rates until 1:30 AM, because AWS deliberately throttled them while the remaining metadata nodes recovered.","ko":"US East 리전의 SimpleDB 가 PDT 오후 9:16 부터 11:16 까지 거의 모든 API 호출에 실패했다. 최종 일관성 읽기 호출 일부만 성공했다. API 요청은 서버 쪽 오류인 http response code 500 을 받았다.\n\n오후 11:16 에 다른 API 는 정상으로 돌아왔지만, CreateDomain 과 DeleteDomain API 호출은 오전 1:30 까지 오류율이 높았다.\n\n노드 쪽에서는 정상 SimpleDB 노드와 내부 락 서비스 사이의 핸드셰이크 지연이 늘었다. 노드들은 정해진 \"handshake timeout\" 안에 핸드셰이크를 끝내지 못했다. 재시도와 타임아웃이 몇 번 되풀이된 뒤 스토리지 노드와 메타데이터 노드가 스스로 운영 클러스터에서 빠졌다."},"updated_at":"2026-11-14T12:34:17.900133Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0536","org_slug":"amazon-web-services"}