주제: 텍스트큐브 메인 사이트 이상 및 복구 안내
2009년 3월 30일부터 2009년 4월 1일까지 텍스트큐브 메인 사이트 및 notice, howto와 포럼 접속이 원활하지 않은 문제가 있었습니다. 원인을 분석하여 문제를 해결 하였습니다. 아래는 문제가 발생한 원인의 설명입니다.
사이트에 누가 접속했는지 관리하는 기능을 세션기능이라고 합니다. 텍스트큐브는 세션을 데이터베이스(mysql)를 사용하여 관리합니다. 그런데 텍스트큐브 메인 사이트의 세션 관리를 파일 기반 DB로 감당하는 것에는 한계가 있습니다. 그렇기 때문에 텍스트큐브 메인 서버는 텍스트큐브 1.8 베타의 메모리 DB 사용 기능(memcached 사용기능) 을 이용하여 세션을 메모리에서 처리합니다. 기존 메인 서버가 위치했던 TNF1이 2008년 10월 1일의 문제( http://notice.textcube.org/ko/147 ) 이후 daybreaker님 의 개인 서버로 이전하여 운영 중입니다. 이후 이전한 서버 환경에 따라 memcached를 사용하지 않고 mysql MEMORY type 테이블을 사용하여 세션을 관리하고 있습니다.
그런데 메모리 타입 테이블의 메모리 총량은 mysql의 heap 메모리 크기에 의존하게 됩니다. 그런데 서버 이전 이후 새 서버의 메모리 DB 크기를 재설정하지 않아, 1시간내 접속자 수가 3천명이 넘는 경우 세션 테이블이 넘치게 됩니다. 세션을 만들 수 없게 되면 텍스트큐브는 같은 세션 아이디가 있기 때문이라고 판단하고 새로운 세션을 만드려고 시도하는데, 이 과정에서 100번을 시도합니다. 결과적으로 서버의 mysql 동작이 급격하게 느려지고, 접속이 불가능하게 됩니다.
문제를 알아낸 후 heap 메모리의 크기를 조정하고, 세션 유지 시간을 15분으로 줄였습니다. 또한 텍스트큐브 소스의 세션 설정 재시도 횟수를 최대 3회까지 수정하여 trunk (2.0), 1.8 베타 및 1.7.8 에 반영하였습니다. 그러나 지속적으로 늘어나는 접속 유입을 감당하기 위하여 4월 중 메인 서버를 daybreaker님의 개인 서버에서 복구가 완료된 TNF1으로 다시 이전할 예정입니다.
원인을 알아내기 위하여 하드웨어 테스트를 포함한 다양한 테스트를 하느라 실제 원인을 알아내는 시간이 오래 걸렸습니다. 관련하여 개발 진행 및 다운로드, 포럼 접속에 불편을 겪으신 분들께 죄송합니다. T_T
--------------
진짜 캐삽질이었습니다. T_T
-Ian Malcomm, from Michael Crichton's 'The Jurassic Park'