- 부하 방지를 위한 *L4를 이용한 웹서버 로드밸런싱, 그리고 나머지는 WAS 로드밸런싱을 사용 시세션 정보를세션정보를 동기화 해야하는 이슈가 있습니다.
- 이중화는 클러스터링과 연관이 있습니다.
- 아파치 모듈 중 mod_jk, mod_proxy를 이용해서 이중화 할 수 있다.
- 아파치와 톰캣이 연동하기 위해선 *AJP를 통해 서로 통신을 하여야 합니다.
- L4란, OSI 7계층 중 레이어 4의 L4 ip, session, port 정보를 기반으로 로드밸런싱을 수행한다.
레이어 4에서 패킷을 확인하고 세션을 관리하며, 로드밸런싱을 제공하는 스위치입니다. - AJP란, 아파치가 웹서버와 외부 서비스(톰캣)를 연동하기 위해 정한 규약(프로토콜)입니다.
- AJP(Apache Jserv Protocol)를 통한 로드밸런싱은 Tomcat의 부하 증가나 있습니다.
- AJP(Apache Jserv Protocol)를 통한 로드밸런싱은 Tomcat의 부하 증가나 있습니다.
- L4를 이용한 로드밸런싱은 HAProxy 같은소프트웨어 혹은 L4 하드웨어 등으로 이중화가 가능하다.
- 한 session time 동안 한 WAS에 지속적으로 접속하게 하고 싶으면 S 아파치(웹서버) sticky세션을 된다.
- 그러나 sticky세션은 한 서버가장애 시 다른 서버로접속을 하게 되면 세션 정보가 없어 문제가 발생한다.
- Tomcat의 기능 중
- 1) 세션 복제(세션 클러스터) 기능을 켜두면 이중화된 톰캣 간에 multicast 방식으로 공유하고 싶은 정보의 전파가 가능하게 됩니다.
- 하지만 이 기능이 서로 다른 톰캣에 반영할때 생각보다 시간이 오래 걸립니다.
- 사용법
<!-- server.xml -->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
설치 후 기본으로 포함되어 있는 server.xml 파일에서 위 라인의 주석만 제거해주면 설정 끝.
그 다음에 WEB-INF/web.xml 파일에 아래와 같이 한 줄 넣어주면 됩니다.
<!-- web.xml --><distributable/>
- multicast 방식으로 동작하며 ex) address는 ‘228.0.0.4’, port는 ‘45564’를 사용하고 서버 IP는 java.net.InetAddress.getLocalHost(). getHostAddress()로얻어진 IP 값으로 송출됩니다.
- 먼저 구동되는 서버부터 4000 ~ 4100 사이의 TCP port를 통해 reqplication message를 listening합니다.
- Listener는 ClusterSessionListener, interceptor는 TcpFailureDetector와 MessageDispatchInterceptor가 설정됩니다.
- 아파치 톰켓
- 동적인 데이터를 처리하는
- 대표적인 WAS가 아파치톰캣(톰캣이라고도 부름)입니다.
- Jetty
- 서블릿과 JSP를 지원하는 자바 기반의 WAS이다. Jetty는 다른 was에 비해가볍고 빠르다, 설정도 쉽다.
- ant나 maven빌드 툴과 연동이 쉽고 was를 코드에 임베딩 시켜 동작시킬 수 있다.
- Jetty was에서도 세션 공유가 가능하다.
- Jetty는 공유 데이터베이스에 세션을 유지하여 세션 클러스터링을 지원할 수 있습니다.
- 각 Jetty 인스턴스는 요청을받은 세션을 로컬로 캐시하여 요청이 서버를 종료 할 때 데이터베이스를 통해 세션에 대한 변경 사항을 기록합니다.
- 서블릿과 JSP를 지원하는 자바 기반의 WAS이다. Jetty는 다른 was에 비해가볍고 빠르다, 설정도 쉽다.
- 세션은 직렬화 계약을 준수해야하며 서블릿은 변경 사항이 지속되도록 Session.setAttribute () 메서드를 호출해야합니다.
- 이러한 유형의 솔루션에서 데이터베이스는 병목 현상과 단일 실패 지점이 될 수 있습니다.
- 이러한 유형의 솔루션에서 데이터베이스는 병목 현상과 단일 실패 지점이 될 수 있습니다.
- 세션 ID 관리자는 Jetty 인스턴스에서 호스팅되는 모든 웹앱에서 세션 ID가 고유하도록 보장하므로 Jetty 인스턴스 당 하나의 세션 ID 관리자 만있을 수 있습니다.
- 세션 관리자는 웹 애플리케이션을 대신하여 세션 라이프 사이클 (생성 / 업데이트 / 무효화 / 만료)을 처리하므로 웹 애플리케이션 인스턴스 당 하나의 세션 관리자가 있습니다.
- WAS 단에서 세션 클러스터링 2가지 방법에 대해 알아보았습니다.
'used-market-server Project' 카테고리의 다른 글
Junit을 이용한 테스트 코드 작성하기 (0) | 2020.09.09 |
---|---|
로그인 상태 정보인 세션 객체를 분산 서버환경에서 트러블 슈팅 (0) | 2020.09.02 |
Nodejs, Redis 가 단일 쓰레드인 이유는? (0) | 2020.08.11 |
서블릿 컨테이너 톰캣의 session 저장 방식 (0) | 2020.07.24 |
spring boot 환경에서 session 저장하기 (0) | 2020.07.24 |