요약
2024년 10월 29일부터 11월 1일 사이, 4개 사이트의 엔터프라이즈 NVMe 드라이브 41개가 특정 전원 가동 시간 수에 도달했을 때 명령 수신을 중단했습니다. 이는 한 제조 배치의 펌웨어 결함이었습니다. 미러링은 이 중 39개의 장애를 고객 영향 없이 흡수했습니다. 바르샤바의 한 노드에서는 미러의 양쪽 절반이 40분 안에 모두 손실되었는데, 두 드라이브가 같은 배치에서 왔고 같은 날 랙에 장착되었기 때문입니다. 해당 노드의 인스턴스 2개가 데이터를 잃었습니다. 이 두 번째 부분은 벤더가 아닌 우리의 잘못입니다.
타임라인
모든 시간은 UTC입니다.
| 시간 | 이벤트 |
|---|---|
| 10월 29일 03:11 | 바르샤바 노드에서 드라이브가 버스에서 이탈. 미러가 저하되고 핫스페어가 재구축 시작. 일상적인 상황, 페이지 호출 없음. |
| 10월 29일 03:49 | 같은 미러의 두 번째 드라이브 이탈. 노드가 루트 풀을 잃고 중지. |
| 10월 29일 03:52 | 페이지 호출. 온콜 엔지니어 03:55에 대응 시작. |
| 10월 29일 04:20 | 노드가 현장 복구 불가 판정. 핫스페어로 재구축 불가능; 스페어는 더 이상 응답하지 않는 소스로부터 재구축 중이었음. |
| 10월 29일 05:40 | 드라이브 로그를 검토하던 엔지니어가 두 장애가 18개월이 아니라 18시간 간격임을 발견. 운이 나쁜 것이 아니라 집단적 결함으로 의심 전환. |
| 10월 29일 06:15 | 배치 식별자와 전원 가동 시간 기준 전체 플릿 조회. 영향받은 배치의 드라이브 206개 확인. 31개는 이미 해당 수를 넘겨 장애 발생; 나머지는 40시간에서 900시간 사이로 해당 수에 도달 예정. |
| 10월 29일 07:30 | 벤더에 연락. 4시간 내에 결함 확인: 웨어 레벨링 원격 측정 카운터가 1,536 전원 가동 시간에서 오버플로되어 컨트롤러가 멈춤. 이를 수정하는 펌웨어 개정판이 6주 전에 조용히 출시된 상태였음. |
| 10월 29일 09:00 | 잔여 시간 우선 순위로 펌웨어 업데이트 시작. |
| 10월 30일 22:40 | 배치 내 마지막 드라이브 업데이트 또는 교체 완료. |
| 11월 1일 14:00 | 영향받은 고객 인스턴스 복원 또는 환불 완료. |
근본 원인
두 가지 원인이 있으며, 그중 하나만 드라이브 제조사의 책임입니다.
제조사 책임: 특정 전원 가동 시간 수에서 원격 측정 카운터가 오버플로되어 컨트롤러가 중단되었습니다. 드라이브는 전원 사이클 후 다시 살아나지만 몇 분 내에 다시 멈춥니다. 플래터의 데이터는 온전하지만 접근 불가능한 상태로, 새벽 4시에 진단하려는 사람에게 최악의 조합입니다.
우리 책임: 같은 납품으로 도착한 드라이브로 미러를 구성했습니다. 미러는 두 개의 독립적인 장애 도메인이어야 하는데, 같은 배치에서 같은 오후에 랙에 장착되고 같은 시간에 전원이 켜진 두 드라이브는 의미 있는 어떤 측면에서도 독립적이지 않습니다. 플릿 전체에 걸쳐 11개의 미러가 이런 식으로 구성되었습니다. 10개는 운이 좋아 핫스페어 재구축이 먼저 완료되었습니다. 하나는 그렇지 못했습니다.
우리는 이 원칙을 수년 전부터 알고 있었습니다. 그러나 아무도 이를 빌드 절차에 명시하지 않았고, 사람들은 납품 기한에 쫓기는 새벽 2시에 빌드 절차를 따릅니다.
영향
- 미러가 흡수한 39건의 장애로 고객에게 보이는 영향 없음.
- 한 노드가 9시간 18분간 오프라인.
- 해당 노드의 인스턴스 14개가 오프노드 백업에서 복원되어 최대 11분의 쓰기만 손실.
- 백업이 전혀 없는 인스턴스 2개. 두 인스턴스 모두 노드의 모든 데이터를 잃음.
변경 사항
- 구매 배치 분할. 같은 배치의 두 드라이브가 미러를 구성할 수 없으며, 쌍을 보호하는 핫스페어는 세 번째 배치에서 나옵니다. 문서가 아닌 빌드 도구로 강제합니다. 11월 4일 완료.
- 전원 가동 시간 코호트 알림. 배치 식별자를 공유하는 드라이브 4개 이상이 서로 100시간 이내에 있고 어떤 정수 시간에 근접할 때 알림을 보냅니다. 조잡한 휴리스틱이며 이번 사고를 19일 일찍 발견했을 것입니다.
- 프로덕션 전 펌웨어 소킹. 새 드라이브 제품군은 고객 데이터를 보관하기 전에 테스트 랙에서 2,000시간의 전원 가동 시간을 실행합니다. 이 결함은 1,536에서 드러났을 것입니다.
- 벤더 펌웨어 릴리스 노트 정기 확인. 수정 사항은 필요하기 6주 전에 존재했습니다. 아무도 확인하도록 지정되지 않았고, 그래서 아무도 확인하지 않았습니다.
변경하지 않은 사항과 이유
드라이브 제품군이나 벤더를 변경하지 않았습니다. 결함은 실재했고 공개도 부실했지만, 우리의 손실은 상관된 배치에서 비롯된 것으로 어떤 제조사에서도 재현되었을 것입니다. 변경은 결정적으로 보였을지 모르나 아무것도 고치지 못했을 것입니다.
오프노드 백업은 500GB당 9유로의 애드온으로 유지합니다. 이를 모든 고객에게 필수화하면 대부분이 스스로 복제하는 서비스에 대해 비용을 청구하게 되며, 우리는 안전의 외관에 대해 청구하지 않을 것입니다. 변경된 것은 주문 양식으로, 이제 인스턴스 스토리지가 미러링되고 미러링은 백업이 아님을 명확히 명시하며, 확인 단계에서 이 문장을 조용히 건너뛸 수 없게 되었습니다.
트리플 미러링으로 전환하지 않았습니다. 기가바이트당 1/3의 비용이 추가되고, 여기서 실제 메커니즘이었던 상관 장애를 해결하지 못합니다. 두 개의 독립적인 도메인이 세 개의 의존적인 도메인보다 낫습니다.
두 고객
두 고객 모두 영향 기간에 대해 지불한 자산으로 전액 환불받았으며, 어떤 정당성도 요구받지 않았습니다. 한 명은 떠났습니다. 다른 한 명은 남아 이제 백업 애드온을 구매하며, 주문 양식에서 원래부터 더 약한 형태로 존재했던 것과 같은 문장을 읽었습니다.
이 두 결과 모두 우리가 좌우할 수 있는 것이 아니었습니다. 우리가 좌우할 수 있었던 유일한 것은 미러를 제대로 구성하는 것이었고, 우리는 그러지 못했습니다.