{"id":"IL-0325","org":"DigitalOcean","date":"2017-04-05","docs":[],"title":{"en":"DigitalOcean's control panel and API were down for 4 hours 56 minutes after the production primary database was deleted","ko":"주 데이터베이스가 지워져 DigitalOcean 제어판과 API 가 4시간 56분 동안 멈췄다"},"domain":["database"],"impact":{"scope":"Control panel and API unavailable; running Droplets continued to function but no Droplets or other resources could be created or managed","users":"unknown","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":null,"related":[],"sources":[{"url":"https://www.digitalocean.com/company/blog/update-on-the-april-5th-2017-outage/","kind":"blog","archived":"https://web.archive.org/web/20170419092741/https://www.digitalocean.com/company/blog/update-on-the-april-5th-2017-outage/"}],"summary":{"en":"DigitalOcean named the root cause as a configuration error made by an engineer: a process performing automated testing had been set up with production credentials, and the primary database was deleted. Three minutes after the first alerts the team confirmed the deletion, and four minutes later it started recovering from one of its time-delayed database replicas. The data was backed up from that replica, copied to the primary and restored, and then copied to the secondary replicas; the primary was fully restored at 3:20 PM EDT with no data lost. The length of the outage came mainly from the speed of the network between database servers while the data was reloaded.","ko":"2017-04-05 10:24 EDT 에 DigitalOcean 은 공개 서비스가 동작하지 않는다는 알림을 받았고, 3분 안에 주 데이터베이스가 지워진 것을 알았다. 원인은 엔지니어의 설정 오류였다. 자동 테스트를 돌리는 프로세스가 운영 환경 자격 증명을 쓰도록 잘못 설정돼 있었다. 제어판과 API 는 4시간 56분 동안 쓸 수 없었다. 그동안 돌고 있던 Droplet 은 계속 동작했지만 새 Droplet 이나 다른 자원을 만들거나 관리할 수 없었다.\n\n10:34 에 시간 지연 데이터베이스 레플리카 하나에서 복구를 시작했다. 11:53 에 그 레플리카의 백업이 끝났다. 12:34 에 백업을 마스터로 복사해 복원을 시작했고, 13:31 에 마스터 복구를 마쳤다. 레플리카로 백업을 복사하는 일은 그 뒤에도 이어졌고 15:20 에 모든 시스템이 복원됐다. 잃은 데이터는 없었다. 장애가 길어진 것은 레플리카 사이에 데이터를 복사해 활성 서버에 복원하는 데 걸린 시간 때문이었다. 그 시간은 주로 네트워크 속도가 좌우했다."},"trigger":{"en":"A process performing automated testing had been misconfigured with production credentials, and the production primary database was deleted.","ko":"자동 테스트를 돌리는 프로세스가 운영 환경 자격 증명을 쓰도록 잘못 설정돼 있었고, 그 결과 주 데이터베이스가 지워졌다."},"severity":"unknown","symptoms":["service-unavailable"],"timeline":{"detected_after":null,"resolved_after":"4h 56m"},"date_kind":"incident","detection":{"en":"Alerts at 10:24 AM EDT that public services were not functioning; within three minutes the team found that the primary database had been deleted.","ko":"10:24 EDT 에 공개 서비스가 동작하지 않는다는 알림이 들어왔고, 3분 뒤 마스터의 운영 데이터베이스가 지워진 것을 확인했다."},"components":["database","database-replication","database-backup"],"root_cause":"config-change","remediation":[{"text":{"en":"Began recovery from a time-delayed database replica","ko":"10:34 EDT 에 시간 지연 레플리카에서 복구를 시작했다."}},{"text":{"en":"Took a backup of the time-delayed replica","ko":"11:53 에 시간 지연 레플리카의 백업을 마쳤다."}},{"text":{"en":"Copied the backup to the primary and recovered it","ko":"12:34 에 백업을 마스터로 복사하고 복원을 시작했다."}},{"text":{"en":"Copied the backups to the replicas until all systems were restored","ko":"13:31 에 마스터 복구를 마쳤고 레플리카로 백업을 복사하는 일을 이어 갔다. 15:20 에 모든 시스템이 복원됐다."}}],"action_items":[{"text":{"en":"Drastically reduce access to the primary system for certain actions","ko":"같은 일이 다시 없도록 특정 작업에서 주 시스템에 접근할 수 있는 권한을 크게 줄인다."}},{"text":{"en":"Upgrade network connectivity between database servers","ko":"데이터베이스 서버 사이의 네트워크 연결을 업그레이드한다."}},{"text":{"en":"Update hardware to speed up recovery","ko":"복구 속도를 높이도록 하드웨어를 바꾼다."}},{"text":{"en":"Assess further safeguards against developer error","ko":"개발자 실수를 막는 안전장치를 더 검토한다."}},{"text":{"en":"Improve the processes around data recovery","ko":"데이터 복구 절차를 개선한다."}},{"text":{"en":"Explore ways to provide better real-time information to customers during future customer-impacting events","ko":"고객에게 영향을 주는 장애가 날 때 실시간 정보를 더 잘 전할 방법을 찾는다."}}],"contributing":["no-safeguard-on-destructive-change"],"recurrence_of":null,"symptoms_text":{"en":"At 10:24 AM EDT on April 5th, 2017, DigitalOcean began to receive alerts that its public services were not working, and by 10:27 the team had verified that the production database on the primary had been deleted. The control panel and the API were unavailable for four hours and fifty-six minutes: running Droplets kept working, but no new Droplets or other resources could be created or managed.\n\nRecovery from a time-delayed database replica began at 10:34. A backup of that replica was complete at 11:53, the copy to the primary finished at 12:34, and recovery of the primary was complete at 13:31 while copies to the replicas continued. All systems were restored at 15:20 with no data lost. Most of the time went into copying data between the replicas over the network and restoring it into an active server.","ko":"2017-04-05 10:24 EDT 에 공개 서비스가 동작하지 않는다는 알림이 들어왔다. 제어판과 API 를 쓸 수 없었다. 돌고 있던 Droplet 은 계속 동작했지만, 새 Droplet 이나 다른 자원을 만들거나 관리할 수는 없었다.\n\n첫 알림 3분 뒤인 10:27 에 마스터에서 운영 데이터베이스가 지워진 것을 확인했다.\n\n시간 지연 레플리카에서 데이터를 백업해 마스터와 레플리카로 복사하고 복원하는 데 4시간 넘게 걸렸다. 데이터를 데이터베이스에 다시 싣는 데 걸린 시간은 네트워크 속도가 좌우했다."},"updated_at":"2026-11-14T12:33:57.833518Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0325","org_slug":"digitalocean"}