진짜 개발자
본문 바로가기

Infra/서버 운영

서버 운영 - 다중 인스턴스 환경에서의 session (고가용성 환경 session, 세션 클러스터링, 스티키 세션)

728x90
고가용성 session

다중 인스턴스 환경에서의 Session

Web Server가 고가용성을 유지하기 위해서는, 같은 역할을 수행하는 서버가 한대이상이 동시에 동작하고 있어야 합니다.

보통 Load Balancer를 이용해 이들 서버에 적절히 부하를 분산하며, 한쪽 서버가 연결이 안된다면, 다른 정상 서버로 사용자의 요청을 보냅니다.

 

 

문제점

 

Session을 이용해 사용자의 로그인을 다루는 경우, 하나의 instance에서 어플리케이션이 동작한다면, 아무런 문제가 없습니다. 하지만 instance가 두개 이상이라면 문제가 있습니다.

 

사용자가 로그인 요청을 보내었으며, Load Balancer의해 1 instance에 요청이 전달되었고, 해당 인스턴스에서 session을 생성했습니다. 이 후 사용자가 다른 페이지를 보기위해 요청을 재전송했고, 이 요청은 Load Balancer에 의해 2 instance에게 전달이 되었습니다.

 

하지만 2 instance에는 사용자의 session 정보가 존재하지 않으며, 다시 로그인을 하라고 합니다.

 

 

 

해결방법 1 (Sticky Session)

Load Balancer에서 사용자의 요청을 분석하여, 쿠키를 생성해준 곳으로(Session을 생성했던 instance)로 요청이 전달되도록 할 수 있습니다. Amazon LoadBalancer의 sticky session이 이 방법을 구현한 서비스 입니다.

 

 

 

해결방법 2 (세션 클러스터링)

두번째 방법으로는 Redis와 같은 공유 저장소를 통해, 인스턴스들이 세션을 공유할 수 있도록 하는 방법입니다.