Tomcat 클 러 스 터 세 션 공유 솔 루 션 Memcached

7315 단어
세 션 이 뭐 예요?
사용자 가 서버 에 접근 하 는 자원 은 주로 두 가지 로 나 뉘 는데 하 나 는 무상 태 접근 이다. 예 를 들 어 그림 한 장 을 요청 하 는 것 이다.다른 하 나 는 상태 방문 이다. 이런 상황 에서 서버 는 사용자 상 태 를 기록 하고 사용자 가 처 한 상태 에 따라 서로 다른 응답 을 해 야 한다. 전형 적 인 예 는 카 트 이다.세 션 의 역할 은 웹 서버 에서 사용자 의 상태 정 보 를 유지 하 는 것 이다.
Tomcat 클 러 스 터 는 왜 세 션 공유 가 필요 합 니까?
클 라 이언 트 가 Tomcat 군집 에 접근 할 때 모든 요청 은 Nginx 에 의 해 차단 되 고 Nginx 가 부하 균형 을 이 룬 후에 배경 에 있 는 실제 Tomcat 에 전 달 됩 니 다.이 절차 에 따라 문제 가 발생 할 수 있 습 니 다. 사용자 가 페이지 를 새로 고치 거나 뛰 어 넘 을 때 요청 할 때마다 다른 Tomcat 에 전송 되 어 세 션 이 동기 화 되 지 않 습 니 다.간단 한 밤 을 들 어 보 자. 예 를 들 어 사용자 가 카 트 에 상품 을 추가 할 때 신 이 나 서 계산 을 준비 했다. 그 가 결제 페이지 로 뛰 어 들 었 을 때 카 트 가 비 워 진 것 을 발견 했다. 이것 이 바로 세 션 이 잃 어 버 린 전형 적 인 밤 이다.따라서 클 러 스 터 환경 을 위 한 세 션 동기 화가 필요 하 다.
세 션 공유 방안 토론
서버 클 러 스 터 환경 에서 세 션 을 공유 하 는 방안 은 주로 4 가지 로 나 뉜 다. 1. 사용자 측 에서 쿠키 를 로 컬 로 저장 하 는 방식 에서 웹 애플 리 케 이 션 은 사용자 상 태 를 쿠키 에 기록 하고 사용자 로 컬 에 저장 합 니 다.단, 사용자 가 사용 하 는 브 라 우 저가 쿠키 를 지원 하지 않 거나 사용 하지 않 으 면 이 방안 은 효력 을 상실 합 니 다.또한 쿠키 가 저장 할 수 있 는 데 이 터 는 크기 제한 이 있 고 데이터 가 사용자 로 컬 브 라 우 저 에 노출 되 어 보안 에 문제 가 있 습 니 다.
2. 데이터베이스 방식 으로 Session 을 로 컬 Cookie 방식 에 비해 저장 하고 사용자 정 보 를 서버 데이터베이스 에 저장 하여 데이터 보안 문 제 를 해결 합 니 다.그러나 이렇게 하 는 것 은 대가 가 있 는 것 이다. 응용 에서 모든 Session 에 대한 방문 은 반드시 데이터 베 이 스 를 거 쳐 데이터 베이스 부담 을 증가 시 켜 시스템 의 전체적인 성능 을 떨 어 뜨 려 야 한다.
3. 프 록 시 서버 가 프 록 시 서버 를 통 해 Session 공 유 를 실현 하 는 사고방식 은 매우 간단 하 다. 바로 Session 데이터 가 어느 Tomcat 에 있 는 지, 그 후의 요청 은 모두 이 Tomcat 에 전달 된다.예 를 들 어 Nginx 는 구체 적 으로 리 트 윗 규칙 을 ip_hash 으로 수정 하면 된다.그러나 이 럴 때 많은 사용자 들 이 특정한 Tomcat 를 방문 하 는 부하 가 많 고 부하 균형 의 의 미 를 잃 을 수 있다.
4. 캐 시 서버 를 구축 하 는 방안 도 가장 보편적 인 방안 이다. 캐 시 서버 를 구축 하고 제3자 도 구 를 사용 하여 Tomcat 이 Session 에 대한 관 리 를 인수 한다.본 고 는 방안 4 를 이용 하여 세 션 관 리 를 하고 캐 시 서버 는 Memcached 이 며 memcached - session - manager 를 사용 하여 세 션 을 관리 합 니 다.memcached - session - manager (이하 msm 로 약칭) 의 사용 방법 은 간단 합 니 다. Tomcat 버 전과 직렬 화 방식 에 따라 해당 하 는 jar 패 키 지 를 다운로드 하고 Tomcat 의 lib 디 렉 터 리 에 복사 한 다음 에 Tomcat 설정 파일 을 수정 하여 Session 관리 모듈 을 교체 하면 됩 니 다.
원형 환경
1.1XX. XX. XX. 181 은 Nginx, Tomcat, Tomcat 12.1XX. XX. XX. 182 를 실행 합 니 다. Memcached 를 실행 합 니 다. 그 중에서 1XX. XX. XX. 181 호스트 는 Tomcat 클 러 스 터 환경 을 구축 하고 1XX. XX. XX. 182 호스트 는 캐 시 서버 를 구축 합 니 다.서버 환경:
# cat /etc/redhat-release 
CentOS release 6.5 (Final)
# uname -a
Linux chenllcentos.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

Memcached 설치
Memcached 는 고성능 분포 식 캐 시 시스템 으로 다운로드 페이지 에 들 어가 최신 안정 버 전 을 다운로드 합 니 다.또는 wget 를 통 해 다운로드 할 수 있 습 니 다.
# wget http://memcached.org/latest

Memcached 를 설치 하기 전에 libevent - devel 의존 도 를 설치 해 야 합 니 다.
# yum -y install libevent-devel

압축 해제 및 설치:
# tar -zxvf memcached-1.x.x.tar.gz
# cd memcached-1.x.x
# ./configure && make && make test && sudo make install

시작 memcached 실행 명령:
# /usr/local/memcached-1.4.21/bin/memcached -d -uroot -m 1024 -P /usr/local/memcached-1.4.21/memcached.pid

여기 -d 매개 변 수 는 데 몬 스 레 드 를 엽 니 다. -u 매개 변 수 는 사용 자 를 지정 하고 -m 매개 변 수 는 memcached 에 분 배 된 메모리 크기 를 지정 합 니 다.더 많은 시작 매개 변 수 는 다음 과 같 습 니 다:
-d            
-m     Memcache       ,   MB,   1024MB,   64MB
-u    Memcache   ,   root
-l        IP  ,       
-p    Memcache     ,   11211,   1024     
-c              ,   1024,     10240,             
-P      Memcache pid    
-h       
-v          
-vv              

포트 상태 보기:
[root@chenllcentos bin]# netstat -ntlp | grep memcached
tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      2222/memcached      
tcp        0      0 :::11211                    :::*                        LISTEN      2222/memcached      

클 러 스 터 환경 에서 Tomcat 은 캐 시 서버 에 방문 하여 세 션 정 보 를 읽 고 업데이트 해 야 하기 때문에 캐 시 서버 는 11211 포트 를 놓 아야 합 니 다.
# vi /etc/sysconfig/iptables

다음 내용 을 추가 합 니 다:
#   Memcached  
-A INPUT -m state --state NEW -m tcp -p tcp --dport 11211 -j ACCEPT

다시 시작 iptables:
# service iptables restart

정지 memcached 통과 kill 명령:
# kill `cat /usr/local/memcached-1.4.21/memcached.pid`

Tomcat 설정 msm
msm 는 Google Code 에 위탁 관리 되 는 오픈 소스 프로젝트 로 프로젝트 에 대한 상세 한 소 개 는 Tomcat high - availability clusters with memcached 를 찾 아 볼 수 있 습 니 다.
복사 jar 가방
msm 를 사용 하기 전에 jars 를 $TOMCAT_HOME/lib 디 렉 터 리 로 복사 해 야 합 니 다: memcached - session - manager - ${version}. jaremcached - session - manager - tc8 - ${version}. jar
이 jar 가방 은 Tomcat 버 전과 일치 해 야 합 니 다.
spymemcached - 2.11.1. jar 여기 서 kryo-serializer 를 직렬 화 전략 으로 선택 하 였 으 므 로 대상 의 직렬 화 를 실현 하 는 jar 패 키 지 를 추가 해 야 합 니 다. msm - kryo - serializerkryo - serializers - 0.11kryominlogreflectasmasm - 3.2 마지막 으로 추가 javolution-serializer 필요 한 jar 패키지: msm - javolution - serializerjavolution - 5.4.4.3.1
Tomcat 프로필 수정$TOMCAT_HOME/conf/context.xml 프로필 을 수정 하고 다음 과 같은 정 보 를 추가 합 니 다.
<Context>
    ...
    <!-- Memcached    session  -->
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
          memcachedNodes="n1:1XX.XX.XX.182:11211"
          sticky="false"
          lockingMode="auto"
          sessionBackupAsync="false"
          sessionBackupTimeout="1000"
          transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"  />
    ...
</Context>

몇 가지 설명: 1. 그 중에서 memcached Nodes 는 memcached 노드 정 보 를 나타 내 고 여러 노드 는 빈 칸 으로 나 뉜 다.2. sticky 는 세 션 공유 모드 를 지정 합 니 다.3. session BackupTimeout 의 단 위 는 분 입 니 다.
호스트 1XX. XX. XX. 181 의 Nginx, Tomcat, Tomcat 1 을 각각 시작 하고 호스트 1XX. XX. XX. 182 의 Memcached 서버 를 시작 합 니 다.
세 션 공유 테스트
Nginx 클 러 스 터 가 session 공 유 를 실현 하 는 지 테스트 하기 위해 index. jsp 에 세 션 정 보 를 인쇄 합 니 다.
SessionID:<%=session.getId()%>

브 라 우 저 접근 을 엽 니 다. 설정 이 올 바 르 면 다음 과 같은 세 션 문자열 을 얻 을 수 있 습 니 다.
SessionID:2F712A985872A8688138D293F59E493A-n1.tomcat 

브 라 우 저 를 새로 고침 하면 세 션 이 변 하지 않 는 다 는 것 을 알 수 있 습 니 다. 이 는 Memcached 를 통 해 세 션 공유 가 유효 하 다 는 것 을 의미 합 니 다.호스트 1XX. XX. XX. 182 의 캐 시 서버 를 닫 으 면?
# kill `cat /usr/local/memcached-1.4.21/memcached.pid`

브 라 우 저 를 새로 고침 해 보 세 요. 다음 과 같은 형식의 Session 문자열 이 나타 납 니 다.
SessionID:E914205336C4FE5A386702F2B6D65063.tomcat 

메모: 새로 고침 후에 도 -n1 로 끝 나 는 세 션 문자열 이 나타 나 면 몇 초 후에 다시 시도 하 십시오.캐 시 서버 를 닫 는 데 시간 이 걸 리 기 때문에 Tomcat 클 러 스 터 를 바로 새로 고침 하면 캐 시 서버 에서 Session 을 가 져 올 수 있 습 니 다.-n1 엔 딩 이 사라 진 것 을 발견 할 수 있 습 니 다. 이 는 세 션 공유 가 실 효 했 고 브 라 우 저 를 반복 적 으로 갱신 하면 서 세 션 의 값 이 계속 변화 하고 있 음 을 의미 합 니 다.
원본 링크: http://runnerfish.github.io//blog/2014/11/19/session-shared-based-on-memcached/

좋은 웹페이지 즐겨찾기