서버가 다운된건 7/27 오후 5시 2분이었고, 이 시점을 기준으로 Amazon RDS(MySQL)에 엄청난 양의 connection(평소의 100배)이 생기기 시작했습니다.
마지막으로 웹 사이트 배포를 실행한건 7/27 새벽이었기 때문에, 웹 서버에는 아무런 변화가 없었습니다.
마침 UCPC 2019 예선이 대회가 진행 중이어서 이용자가 몰려서 그런것이라는 생각도 들 수 있지만, 보통 대회의 시작 시점에 가장 많은 트래픽이 몰리고, 대회 종료 시점이 가까워질수록 트래픽은 줄어드는 것이 일반적입니다. UCPC 대회도 이와 같은 트래픽 그래프를 보여줬습니다.
원인을 파악하기 위해 이것저것 시도를 해봤습니다. 서버에서 뭔가 하나를 수정하면 반영되는데는 30분 정도의 시간이 걸려서 매우 오래 걸렸습니다.
BOJ의 DB 서버 재부팅, DB 서버 인스턴스 변경, 웹 서버 인스턴스 변경, MySQL, PHP 파라미터 변경등의 모든 방법을 했으나 실패했습니다.
MySQL에 접속해서 연결된 양을 보고 싶었는데, 이미 연결이 너무 많아 timeout이 발생해 그것도 볼 수가 없었습니다.
모든 서버를 끄고 DB 서버를 켠 다음 Security Group을 하나씩 추가하던 중에 놀라운 사실을 발견했습니다.
contest.kakaocode.com에서 엄청난 연결을 요청하고 있는 것이었습니다. 아시다시피 BOJ는 2018년에 카카오코드페스티벌의 플랫폼을 제공한 적이 있고, 서버를 끄지않고 계속 켜놓고 있었습니다. 그런데, 저 사이트도 역시 오후 5시 2분까지는 정상적으로 접속이 가능했었습니다.
contest.kakaocode.com의 배포는 약 2달 전으로, BOJ에서 플랫폼을 제공하는 다른 대회를 배포하면서 동시에 진행했습니다. (배포 스크립트가 only boj, all 둘 밖에 없습니다)
마지막 배포를 2달 전에 한 사이트가 5시 2분을 기준으로 똑같은 문제를 일으켰다면 이건 제가 수정 및 추가한 소스의 문제가 아닙니다.
다른 실험을 이것저것 해본 결과 새로운 사실을 하나 알았습니다.
현재 BOJ는 Elastic Beanstalk을 이용해서 배포하고 있고, 베타 서버와 개발은 모두 EC2를 사용하고 있습니다. 다른 모든 서버를 끄고 베타 서버만 켠 상태로 접속을 하면 위에서 말한 connection 에러가 발생하지 않았습니다. 툴을 이용해서 동시 접속도 테스트해봤는데, 역시 예전처럼 매우 잘 돌아갔습니다.
베타 서버와 실 서버 모두 같은 EC2를 사용하고 있고, 같은 RDS에 접속하는 등 모두 같은데, 문제가 생긴다면 Beanstalk이 문제라 생각합니다.
현재는 베타 서버로 사이트를 운영하고 있는 상태로, 사용하는데는 별 문제가 없습니다. 서버비가 많이 나온다는 단점이 있지만, 이것은 저에게만 문제입니다.
AWS의 Beanstalk이 문제를 일으킨 것이 맞는 것 같고, 어제 5시 2분에 Beanstalk에 무슨 일이 있었는지 확인하고 말겠습니다.
startlink 4년 전 13
안녕하세요.
2019년 7월 27일 오후 5시 2분부터 7월 28일 오전 8시까지 서버가 다운된 사고가 발생했습니다.
이용에 불편을 드려서 죄송합니다.
최백준 드림