본문 바로가기
강좌/NDC

쿠키런: 킹덤, 총 56시간의 긴급 점검 회고 - 그때 그 명검은 왜 뽑아야 했는가

by lms0806 2022. 6. 10.
728x90
반응형
 

NDC-NEXON DEVELOPERS CONFERENCE

 

ndc.nexon.com

해당 내용정리는 Nexon에서 진행하는 Nexon Developers Conference에 나온 영상들을 참고하였습니다

 

<순서>

쿠키런:킹덤, 런칭까지의 여정

36시간 점검(1차)

20시간 점검(2차)

전체적인 회고와 마무리

 

<쿠키런:킹덤, 런칭까지의 여정>

데브시스터즈의 가치 : 탁월한 기술, 서비스, 콘텐츠로 전 세계 고객에게 최고의 경험을 선사한다.

데브시스터즈의 DevOps 엔지니어가 중요하게 생각하는 가치 : 기술을 바탕으로 서비스를 안정적으로 고객들이 이용할 수 있게 하는 것

 

분산 SQL 데이터베이스인 CockroachDB를 채택함

 

<36시간 점검(1차)>

작업 중 의도치 않은 Configuration 이슈 발생하여 클러스터에 비일관성이 발생하여 자동적으로 트랜잭션 처리가 중단됨

데이터는 있는데, 클러스터는 데이터를 인식하지 않음

Configuration 이슈의 영향을 받지 않은 노드 중 1대가 하필 이때 AWS Host Status Failure로 내려가 버림

 

요약하자면, 데이터가 있는데 헌 클러스터가 읽기를 거부해, 새 클러스터를 만들어서 데이터를 이사시키면 해결됨

기존 데이터를 새 클러스터로 옮기려면 바이너리 데이터를 CSV로 재작성이 필요해, Shell Script + CRDB커맨드를 조합하면 데이터를 CSV로 포팅이 가능함

바이너리 파일의 전체 규모가 약 7,577기가바이트여서 최소 24시간이 걸리는 상황

이를 개선하기 위해 CockroachDB 바이너리의 커스텀을 개조 시작

 

점검 해제와 동시에 엄청난 사용자 폭증으로 인해 플랫폼 서버 과부하가 일어나서 1분당 약 70만개의 API CALL이 발생

플랫폼 로그인 서버에 DB 데드락이 발생하여 페일 오버를 수행하게 됨

새로운 클러스터가 임계치를 넘어 과부하가 발생함

여러가지 최적화들을 추가로 적용한 다음, 새로운 클러스터를 준비하여 데이터를 이사시키는데 추가로 2시간 정도가 소요됨

 

요약

원인

 - 이용자 폭증으로 인해 안정적인 데이터베이스 운영에 필수적인 작업을 진행하였으나, 의도치 않은 Configuration 이슈가 발생하여 클러스터 동작 중지

해결

 - CockroachDB 소스코드, 기술문서 총동원하여 Storage Layer를 복원에 사용가능한 형태로 분석하는 과정에서 데이터 분석 인프라, 소스 코드 개조 등 작업이 필요함

 - 새 데이터베이스 클러스터를 구축하여 데이터를 복사, 점검 종료

 - 오픈 이후 미증유의 트래픽을 맞아 플랫폼 인프라에도 문제 발생, 새로 구성한 두번째 데이터베이스 클러스터도 트래픽 한계를 맞아 Degradation 발생

 - 세번째 데이터베이스 클러스터를 설정하여 최종적으로 36시간 30분만에 점검 종료

 

<20시간 점검(2차)>

1차점검이 끝난 후 26일째 되던 날

AWS 데이터 센터 냉각 유닉 정전으로 킹덤 데이터베이스 6대가 12분만에 작동 불능 상태가 됨

 

unsafe-remove-dead-replica라는 흑마법을 사용하게 됨(데이터를 복구하는 최후 최후의 수단, 복구된다고 하더라도 그 데이터가 정합성이 맞는 다는 보장이 없음)

흑마법으로 2개 중 1개의 Range를 복구 성공함

나머지 1개도 1차 점검 때 썻던 crdb2csv 커스텀 빌드를 사용하여 복구에 성공함

 

잘 된 일

 - 사용자 데이터를 100% 사수함

 - 오픈 후 이번에도 많은 트래픽이 몰려왔으나 미리 스케일아웃해 두어 플랫폼, 서버, DB 모두 대응됨

잘 안된 일

 - 데이터베이스 자체가 워낙 커서 복구 작업의 모든 단계가 시간이 많이 소요됨

 - CockroachDB Locality 설정. 인지는 하고 있었으나, 이번 유형의 장애는 발생 확률이 매우 낮을것으로 예상하고 적용을 미뤄둠

 

<전체적인 회고와 마무리>

일련의 일들을 통해 얻은 교훈들

1. 고객을 위해 수단과 방법을 가리지 않고 포기하지 않았을 때 그 어떤 장애도 해결할 수 있다.

2. 한 바구니에 절대 계란을 다 담지 말것

3. 사고를 방지하기 위한, 사고를 관리하기 위한 문화와 프로세스의 중요성

4. 장애를 효과적으로 해결하기 위해서는 조직의 구조가 중요하다.

 

728x90
반응형

댓글