{"id":"IL-0298","org":"Wikimedia Foundation","date":"2025-03-31","docs":[],"title":{"en":"Wikimedia edits failed for 38 minutes when sessionstore Cassandra nodes in both data centres crashed on full disks","ko":"Wikimedia sessionstore 의 Cassandra 노드가 디스크가 가득 차 잇따라 죽고 쿼럼을 잃어 편집이 실패했다"},"domain":["database"],"impact":{"scope":"Edits failed for the whole outage; all sessions were removed when the storage was wiped","users":"unknown","region":"Both data centres"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"The storage growth before the node failures made their timing predictable, so an alert on high storage utilisation well in advance would have given a chance to act before users were affected, and an alert on Cassandra node failures would have told responders more than an HTTP error rate alert. A cluster seen as heavily over-provisioned can still grow quickly and unsustainably under an unusual workload.","ko":"노드 장애는 디스크 공간이 모자라서 났고, 그 전의 저장 증가 속도로 장애 시점을 내다볼 수 있었다. 노드가 죽기 한참 전에 높은 저장 사용률을 알렸다면 영향이 생기기 전에 막을 기회가 있었다. 5xx 비율로 호출한 것은 맞았다. 다만 Cassandra 노드가 치명적인 수만큼 죽었다는 알림이 따로 있었다면 대응하는 엔지니어에게 상황을 더 잘 알려 줬을 것이다. 지나치게 넉넉하다고 여긴 클러스터도 비정상적인 워크로드가 생기면 감당할 수 없이 빠르게 찰 수 있다. 디스크가 고갈됐을 때 스토리지를 비우는 완화책도 서비스를 흔든다. 그래도 편집이 계속 멈추는 것보다는 영향이 작다. sessionstore 쓰기 비율이 오른 데 워크로드 변화와 SUL3 마이그레이션 같은 요인이 어떻게 얽혔는지는 지금도 파악하기 어렵다."},"related":[],"sources":[{"url":"https://wikitech.wikimedia.org/wiki/Incidents/2025-03-31_sessionstore_unavailability","kind":"runbook","archived":"https://web.archive.org/web/20260520124528/https://wikitech.wikimedia.org/wiki/Incidents/2025-03-31_sessionstore_unavailability"}],"summary":{"en":"Sessionstore runs on Cassandra in both data centres. An increase in session writes filled the storage devices of its Cassandra nodes, and behind it was an unusual workload of session overwrites at a high rate. Cassandra's storage is log-structured, so an overwrite is not done in place and the overwritten value has to be garbage collected during compaction; the overwrites came faster than compaction could clear them before the disks ran out of space. Enough nodes crashed from disk exhaustion that clients could not make quorum, and from 02:58 UTC edits failed. The investigation was still going on, but the rollout of SUL3 correlates strongly, and before the incident the sessionstore cluster had been seen as heavily over-provisioned.\n\nAt 03:32 responders decided to wipe the storage, which removed all sessions. By 03:36 the storage was wiped, Cassandra was restarted and edits began to flow again, back to steady rates by about 03:40. The incident fell in the early hours of a Monday UTC, which delayed the response, and the mitigation of truncating storage is itself disruptive, though less so than a long edit outage.","ko":"2025-03-31 02:58 UTC 무렵 두 데이터센터의 sessionstore 에서 Cassandra 노드 여러 대가 디스크 고갈로 죽었다. 죽은 노드가 많아 클라이언트가 쿼럼을 만들 수 없게 됐고, 서비스가 500 오류를 내며 편집이 실패했다. Cassandra 의 저장 구조는 로그 구조라서 덮어쓰기가 제자리에서 일어나지 않고, 덮어쓴 옛 값은 컴팩션 때 지워진다. 세션을 높은 비율로 덮어쓰는 비정상적인 워크로드가 컴팩션이 치울 수 있는 속도를 넘어서며 공간이 바닥났다. 조사는 이어지고 있지만, 이 워크로드는 SUL3 롤아웃과 시기가 강하게 겹친다. 장애 전까지 팀은 sessionstore 클러스터의 용량이 지나치게 넉넉하다고 여겼다. 03:04 에 호출이 나가 03:09 에 대응이 시작됐다. 03:14 에 Cassandra 를 보려고 다른 엔지니어를 불렀다. 03:18 에 노드 다수가 내려가 쿼럼을 만들 수 없다는 것을 확인했고, 03:22 에 디스크 고갈과 3월 10일 무렵부터 이어진 사용률 상승을 확인했다. 03:32 에 서비스를 되살리려고 스토리지를 지우기로 했다. 03:36 에 스토리지를 지우고 Cassandra 를 재시작하자 편집이 다시 들어왔고, 03:40 무렵 평소 수준으로 돌아왔다. 스토리지를 지우면서 모든 세션이 사라졌다. 장애는 batphone 시간대인 UTC 기준 월요일 이른 시각에 일어나 대응이 늦어졌다."},"trigger":{"en":"A rise in session writes, made up of session overwrites at a high rate, filled the storage of the sessionstore Cassandra nodes. The review says the rollout of SUL3 correlates strongly with it.","ko":"세션 쓰기가 늘어 저장 장치를 채웠다. 쓰기가 늘어난 배경에는 세션을 높은 비율로 덮어쓰는 비정상적인 워크로드가 있었고, 이 워크로드는 SUL3 롤아웃과 시기가 강하게 겹쳤다."},"severity":"unknown","symptoms":["high-error-rate","service-unavailable","node-disk-full","data-loss"],"timeline":{"detected_after":"5m","resolved_after":"38m"},"date_kind":"incident","detection":{"en":"MediaWikiEditFailures (session loss) fired as critical at 03:03 UTC, and SessionStoreErrorRateHigh, a high 5xx rate alert, paged the batphone at 03:04. Users also reported the problem in task T390512.","ko":"03:04 UTC 에 SessionStoreErrorRateHigh 가 높은 5xx 비율로 울려 batphone 으로 호출이 나갔고, 그 1분 앞서 03:03 에 MediaWikiEditFailures 가 critical 로 울렸다. Cassandra 노드의 디스크 사용률이나 증가 속도에는 자동 알림이 없었다. 사용자 신고도 task T390512 로 들어왔다."},"components":["database"],"root_cause":"capacity","remediation":[{"text":{"en":"Wiped the sessionstore storage, removing all sessions, and restarted Cassandra","ko":"03:36 UTC 에 스토리지를 지우고 Cassandra 를 재시작해 편집이 다시 들어오게 했다. 모든 세션이 사라졌고, 편집 비율은 03:40 무렵 평소 수준으로 돌아왔다."}}],"action_items":[{"text":{"en":"Page when the disk utilisation trend becomes unreasonable","ko":"디스크 사용률 추세가 비정상적으로 오르면 호출한다."}},{"text":{"en":"Increase sessionstore storage capacity","ko":"sessionstore 의 저장 용량을 늘린다."}},{"text":{"en":"Add namespacing to sessionstore","ko":"sessionstore 에 네임스페이스 구분을 둔다."}},{"text":{"en":"Add observability of the sessionstore workload","ko":"sessionstore 워크로드의 관측성을 높인다."}},{"text":{"en":"Identify the cause of the high rate of storage growth in sessionstore Cassandra","ko":"sessionstore Cassandra 의 저장 공간이 빠르게 늘어난 원인을 찾는다."}},{"text":{"en":"Consider an alert, without paging, on the Cassandra error rate","ko":"Cassandra 오류율에 호출하지 않는 알림을 둘지 검토한다."}},{"text":{"en":"Consider paging or alerting when Cassandra nodes enter a down state","ko":"Cassandra 노드가 down 상태가 되면 호출이나 알림을 보낼지 검토한다."}}],"contributing":["no-alert-on-limit","assumption-unverified"],"recurrence_of":null,"symptoms_text":{"en":"At 02:58 UTC on 31 March 2025, the sessionstore service in both Wikimedia data centres began returning 500 errors and edits failed. MediaWikiEditFailures (session loss) fired as critical at 03:03, and SessionStoreErrorRateHigh paged at 03:04.\n\nAt 03:18 responders found many Cassandra nodes down, so sessionstore clients could no longer achieve quorum. At 03:22 they identified disk space exhaustion as the cause, with storage use trending upward since about 2025-03-10. The page only said that there were many HTTP errors; no automated alert covered the disk utilisation of the Cassandra nodes or its growth rate.","ko":"2025-03-31 02:58 UTC 에 두 데이터센터의 sessionstore 서비스가 500 오류를 내기 시작했고 편집이 실패했다. 03:03 에 세션 손실을 알리는 MediaWikiEditFailures 가 critical 로 울렸고, 03:04 에 SessionStoreErrorRateHigh 가 호출을 보냈다.\n\nSessionStoreErrorRateHigh 는 높은 5xx 비율을 알렸을 뿐, 그 뒤에서 Cassandra 노드 여러 대가 완전히 멈췄다는 사실은 알림에 드러나지 않았다.\n\n03:18 에 Cassandra 를 쓸 수 없는 상태임을 확인했다. 많은 노드가 내려가 있어 쿼럼을 만들 수 없었다. 03:22 에 디스크 공간 고갈이 원인으로 드러났고, 디스크 사용률은 2025-03-10 무렵부터 꾸준히 오르고 있었다."},"updated_at":"2026-11-14T12:33:55.255678Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0298","org_slug":"wikimedia-foundation"}