해당 내용정리는 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. 장애를 효과적으로 해결하기 위해서는 조직의 구조가 중요하다.
'강좌 > NDC' 카테고리의 다른 글
Node.js를 내장형으로 만들어서 게임 플랫폼 SDK 만들기 (0) | 2022.06.10 |
---|---|
테스트자동화 도구 개발 생존전략 (0) | 2022.06.09 |
"달빛조각사"에서 서버 테스트 코드를 작성하는 방법 (0) | 2022.06.09 |
프로젝트 MOD CI2021 (0) | 2022.06.08 |
블록체인과 가상세계의 진화 (0) | 2022.06.08 |
댓글