Apache + Tomcat 부하 균형 및 Session 귀속 실현

집단 배경 소개
1.1 용어 정의
 
  서비스 소프트웨어 는 b / s 또는 c / s 구조의 s 부분 으로 b 또는 c 에 서 비 스 를 제공 하 는 서비스 소프트웨어 시스템 입 니 다.
 
  서비스 하 드 체 는 컴퓨터, pc 서버 등 계산 서 비 스 를 제공 하 는 하드웨어 를 말한다.
 
  서비스 실 체 는 서비스 소프트웨어 와 서비스 하 드 를 가리킨다.
 
  클 라 이언 트 는 서비스 실체 서 비 스 를 받 는 소프트웨어 나 하드웨어 를 말한다.
 
1.2 양 대 관건 적 특성
 
클 러 스 터 는 협동 작업 을 하 는 서비스 실체 로 단일 서비스 실체 보다 더욱 확장 되 고 사용 가능 한 서비스 플랫폼 을 제공 합 니 다.클 라 이언 트 가 보기에 하나의 클 라 이언 트 는 하나의 서비스 실체 와 같 지만 사실은 클 라 이언 트 는 하나의 서비스 실체 로 구성 된다.단일 서비스 실체 와 비교 하면 집단 은 다음 과 같은 두 가지 관건 적 인 특성 을 제공한다.
  • 확장 성 - 클 러 스 터 의 성능 은 단일 한 서비스 실체 에 국한 되 지 않 고 새로운 서비스 실 체 는 클 러 스 터 에 동태 적 으로 가입 하여 클 러 스 터 의 성능 을 강화 할 수 있다.
  • 높 은 가용성 - 클 러 스 터 는 서비스 실 체 를 통 해 클 라 이언 트 가 out of service 의 경 고 를 쉽게 만 나 지 않도록 합 니 다.클 러 스 터 에서 같은 서 비 스 는 여러 서비스 실체 에서 제공 할 수 있다.만약 에 하나의 서비스 실체 가 실패 하면 다른 서비스 실 체 는 실패 한 서비스 실 체 를 인수 할 것 이다.클 러 스 터 가 제공 하 는 잘못된 서비스 실체 에서 다른 서비스 실체 로 회복 하 는 기능 은 응용 가용성 을 강화 했다.

  • 1.3 양 대 능력
     
    확장 성과 높 은 가용성 특징 을 가지 기 위해 서 는 다음 과 같은 두 가지 능력 을 가 져 야 한다.
  • 부하 균형 - 부하 균형 은 임 무 를 군집 환경 에서 의 계산 과 네트워크 자원 에 비교적 균형 적 으로 분포 할 수 있다.
  • 오류 회복 - 특정한 원인 으로 인해 특정한 임 무 를 수행 하 는 자원 이 고장 이 나 고 다른 서비스 실체 에서 같은 임 무 를 수행 하 는 자원 이 이어서 임 무 를 완성 합 니 다.이러한 실체 중의 자원 이 일 을 할 수 없 기 때문에 다른 실체 중의 자원 이 투명 하 게 임 무 를 계속 완성 하 는 과정 을 오류 회복 이 라 고 한다.

  • 부하 균형 과 오류 복 구 는 각 서비스 실체 에 같은 임 무 를 수행 하 는 자원 이 존재 하도록 요구 하고 같은 임 무 를 수행 하 는 각 자원 에 있어 임 무 를 수행 하 는 데 필요 한 정보 보기 (정보 문맥) 는 반드시 같 아야 한다.
     
    1.4 양 대 기술
     
    군집 무 를 실현 하려 면 다음 과 같은 두 가지 기술 이 필요 하 다.
  • 클 러 스 터 주소 - 클 러 스 터 는 여러 서비스 실체 로 구성 되 고 클 라 이언 트 는 클 라 이언 트 를 방문 하여 클 라 이언 트 내부 각 서비스 실체의 기능 을 얻 습 니 다.단일 집단 주소 (단일 영상 이 라 고도 함) 를 가 진 것 은 집단의 기본 적 인 특징 이다.클 러 스 터 주 소 를 유지 하 는 설정 을 부하 이퀄 라이저 라 고 합 니 다.부하 이퀄 라이저 내 부 는 각 서비스 실체의 가입 과 탈퇴 를 관리 하고 외부 에 서 는 클 러 스 터 주소 가 내부 서비스 실체 주소 로 전환 하 는 것 을 책임 집 니 다.어떤 부하 균형 기 는 진정한 부하 균형 알고리즘 을 실현 하고, 어떤 것 은 임무 의 전환 만 지원 한다.작업 전환 만 이 루어 지 는 부하 균형 기 는 ACTIVE - STANDBY 를 지원 하 는 클 러 스 터 환경 에 적용 된다. 그곳 에 서 는 클 러 스 터 에 하나의 서비스 실체 만 작업 하고 있 으 며, 작업 중인 서비스 실체 가 고장 이 났 을 때 부하 균형 기 는 이후 의 임 무 를 다른 서비스 실체 로 전환시킨다.
  • 내부 통신 - - 협동 작업 을 하고 부하 균형 과 오류 회복 을 실현 하기 위해 클 러 스 터 각 실체 간 에 항상 통신 해 야 한다. 예 를 들 어 부하 이퀄 라이저 가 서비스 실체 심장 박동 테스트 정보, 서비스 실체 간 임무 에 대해 문맥 정 보 를 수행 하 는 통신 이다.

  • 같은 클 라 이언 트 주 소 를 가지 고 클 라 이언 트 가 클 라 이언 트 가 클 라 이언 트 가 클 라 이언 트 가 제공 하 는 계산 서 비 스 를 방문 할 수 있 게 한다. 한 클 라 이언 트 주소 에 각 서비스 실체의 내부 주 소 를 숨 기 고 고객 이 요구 하 는 계산 서 비 스 를 각 서비스 실체 간 에 분포 할 수 있 게 한다.내부 통신 은 집단 이 정상적으로 돌아 갈 수 있 는 기초 로 집단 이 균형 적 인 부하 와 오 류 를 회복 하 는 능력 을 가지 게 한다.
     
     
     
    클 러 스 터 설정
          위의 그림 에서 알 수 있 듯 이 서비스 실체 1, 서비스 실체 2 와 부하 균형 기 가 하나의 집단 을 구성 했다.서비스 실체 1 과 서비스 실체 2 는 클 라 이언 트 에 대한 서비스 지원 작업 에 참여 하고 균형 부하 기 는 클 라 이언 트 가 클 라 이언 트 에 게 클 라 이언 트 를 유지 하 는 단일 영상 이다.집단 실체 간 에 내부 의 통신망 을 통 해 정 보 를 교류 하 는데 이런 교류 메커니즘 은 일반적으로 그룹 방송 협 의 를 채택 한다.부하 균형 기 는 내부 통신망 을 통 해 각 서비스 실체의 심장 박동 정 보 를 탐지 하고 서비스 실체 간 에 내부 통신망 을 통 해 임무 자원 의 전 파 를 완성 한다.이 를 통 해 알 수 있 듯 이 클 러 스 터 는 주로 서비스 실체 설정 과 부하 이퀄 라이저 설정 두 부분 으로 구성 된다.본 고 는 tomcat 5.5.5.20, apache 2.2.11 을 사용 하여 클 러 스 터 환경 을 설정 합 니 다.
     
    2.1 준비 소프트웨어
  • tomcat 는 오픈 소스 서버 이 고 다운로드 장소 http://tomcat.apache.org/download-55.cgi 입 니 다.(본 고 에서 사용 한 apache - tomcat - 5.5.20. zip)
  • apache 는 오픈 소스 의 ww 서버 이 고 다운로드 장소 http://httpd.apache.org/download.cgi 입 니 다.(본 고 에서 사용 한 apache 2.2.11 - win 32 - x86 - no ssl. msi)
  • jk2 모듈, jk 는 modjserv 의 대체 자 는 Tomcat - apache 플러그 인 으로 Tomcat 과 Apache 간 의 통신 을 처리 하고 클 러 스 터 설정 에서 부하 이퀄 라이저 역할 을 합 니 다.JK 2 는 apache 2. x 시리즈 에 맞 는 신제품 으로 다운로드 주소 http://apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.28/ 입 니 다.(본 고 에서 사용 한 mod jk - 1.2.28 - httpd - 2.2.3. so)
  • 2.2 부하 이퀄 라이저 를 apache 에서 부하 이퀄 라이저 를 세 단계 로 설정 합 니 다. httpd. conf 와 workers. properties 를 수정 할 때마다 apache 를 다시 시작 하 는 것 을 잊 지 마 십시오. 
  • 첫 번 째 단 계 는 apache 부하 이퀄 라이저 jk2 모듈 을 설치 하고 디 버 깅 하 는 것 이 apache ww 서비스의 플러그 인 이기 때문에 부하 이퀄 라이저 를 설정 하려 면 먼저 apache 를 설치 해 야 합 니 다.본 고 는 windows 버 전 2.2.11 을 다운로드 하여 msi 를 실행 하고 간단 한 질문 에 대답 하면 apache 의 임 무 를 완성 할 수 있다.주의해 야 할 것 은 apache 를 설치 하고 시작 한 후에 apache 가 http://localhost/ 주소 에 반응 하지 않 으 면 apache 설치 경로 에서 htdocs 디 렉 터 리 의 index. html. xx 파일 을 수정 해 야 합 니 다. 예 를 들 어 index. html. en 을 index. html 로 바 꿔 야 합 니 다. 
  • 두 번 째 단계, jk2 를 설치 하여 다운로드 한 modjk - 1.2.28 - httpd - 2.2.3. so mod 로 개명jk2. so apache 의 modules 디 렉 터 리 에 apache 의 conf 디 렉 터 리 에 있 는 httpd. conf 를 수정 하고 파일 마지막 줄 에 include conf \ mod 를 추가 합 니 다.jk2. conf, conf 디 렉 터 리 에 mod 만 들 기jk2. conf 파일, 내용 은 다음 과 같 습 니 다.
    # Load mod_jk2 module
    LoadModule jk_module modules/mod_jk2.so
    
    
    # Where to find workers.properties
    JkWorkersFile conf/workers.properties
    
    
    # Where to put jk logs
    JkLogFile logs/mod_jk2.log
    
    
    # Set the jk log level [debug/error/info]
    JkLogLevel info
    
    
    # Select the log format
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    
    
    # JkOptions indicate to send SSL KEY SIZE,
    JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
    
    
    # JkRequestLogFormat set the request format
    JkRequestLogFormat "%w %V %T"
    
    # Send JSPs for context / to worker named loadBalancer
    JkMount /*.jsp loadBalancer
    
    
     
  • 세 번 째 단 계 는 jk2jk 2 설정 을 모두 하나의 프로필 에 설정 합 니 다. 파일 이름 은 workers. properties 이 고 apache 의 httpd. conf 와 같은 디 렉 터 리 에 놓 습 니 다.다음은 이 파일 의 내용 입 니 다.
    #
    # workers.properties
    #
    
    # list the workers by name
    
    worker.list=tomcat1, tomcat2, loadBalancer
    
    # ------------------------
    # First tomcat server
    # ------------------------
    worker.tomcat1.port=8009
    worker.tomcat1.host=192.168.0.107
    worker.tomcat1.type=ajp13
    
    # Specify the size of the open connection cache.
    #worker.tomcat1.cachesize
    
    #
    # Specifies the load balance factor when used with
    # a load balancing worker.
    # Note:
    # ----> lbfactor must be > 0
    # ----> Low lbfactor means less work done by the worker.
    worker.tomcat1.lbfactor=100
    
    
    # ------------------------
    # Second tomcat server
    # ------------------------
    worker.tomcat2.port=8009
    worker.tomcat2.host=192.168.0.163
    worker.tomcat2.type=ajp13
    
    # Specify the size of the open connection cache.
    #worker.tomcat2.cachesize
    
    #
    # Specifies the load balance factor when used with
    # a load balancing worker.
    # Note:
    # ----> lbfactor must be > 0
    # ----> Low lbfactor means less work done by the worker.
    worker.tomcat2.lbfactor=100
    
    
    # ------------------------
    # Load Balancer worker
    # ------------------------
    
    #
    # The loadbalancer (type lb) worker performs weighted round-robin
    # load balancing with sticky sessions.
    # Note:
    # ----> If a worker dies, the load balancer will check its state
    # once in a while. Until then all work is redirected to peer
    # worker.
    worker.loadBalancer.type=lb
    worker.loadBalancer.balanced_workers=tomcat1, tomcat2
    
    #
    # END workers.properties
    #
    
     jk2 모듈 의 부하 균형 설정 은 관련 사 이 트 를 참조 할 수 있 습 니 다. 특히 jk2 의 부하 균형 은 가중치 배분 등 우수한 기능 도 지원 합 니 다.

  • 테스트:
    tomcat 1 인 스 턴 스 를 실행 하 는 기계 의 webapps / test Group 테스트 항목 디 렉 터 리 에서 다음 과 같은 내용 의 index. jsp 파일 을 생 성 합 니 다: (session 설정)
    <% 
       System.out.println("===========================");
       System.out.println(session.getAttribute("test"));
       session.setAttribute("test","Session");
    %>
    
    <html>
      <body bgcolor="red">
        <center>
        <h1>Tomcat 1</h1>
      </body>
    </html>
    
    

     
    마찬가지 로 tomcat 2 인 스 턴 스 를 실행 하 는 기계 의 webapps / test Group 테스트 프로젝트 디 렉 터 리 에서 다음 과 같은 내용 의 index. jsp 파일 을 생 성 합 니 다.
    <% 
       System.out.println("===========================");
       System.out.println(session.getAttribute("test"));
    %>
    
    <html>
      <body bgcolor="blue">
        <center>
        <h1>Tomcat 2</h1>
      </body>
    </html>
    
    

     
    Tomcat 1, Tomcat 2, Apache 서비스 시작
    아파 치 서버 ip: 192.168.0.105
    Tomcat 1 서버 ip: 192.168.0.107
    Tomcat 2 서버 ip: 192.168.0.163
    먼저 아파 치 서버 의 정적 페이지 가 정상 인지 확인 하고, 다음 을 방문 합 니 다.http://192.168.0.105/(랜 에 접근 할 수 없 으 면 방화벽 설정 을 확인 하 십시오) tomcat 와 apache 설정 이 부하 균형 을 제공 하 는 지 검증 하고 서로 다른 터미널 로 접근 합 니 다.http://192.168.0.105/testGroup/index.jsp빨간색 페이지 를 보면 tomcat 1 서버 로 돌아 온 것 을 표시 합 니 다.란 색 페이지 를 보면 tomcat 2 서버 로 돌아 온 것 을 표시 합 니 다.
     
    2.3 tomcat 설정 (귀속 세 션)
     
    같은 클 러 스 터 에 속 하 는 두 개의 서비스 실체 로 기능 의 동일성 을 요구 하기 때문에 우 리 는 먼저 첫 번 째 tomcat 를 설치 하고 설정 한 다음 에 복사 하여 두 번 째 tomcat 를 형성 하고 마지막 으로 두 번 째 tomcat 를 설정 할 수 있다.
    2.3.1 tomcat 1, tomcat 2 의 server. xml 수정
    2.3.1.1 < Engine / > 태그 수정
    첫 번 째 tomcat 인 스 턴 스 를 실행 하 는 기계 에 서 는 약 120 줄 (설명 제거) 에서 < Engine name = "Standalone" default Host = "localhost" debug = "0" 으로 교체 합 니 다. < Engine jvmRoute = "tomcat 1" name = "Standalone" default Host = "192.168.0.105" debug = "0" / "두 번 째 tomcat 인 스 턴 스 를 실행 하 는 기계 에서 jvmRoute =" tomcat 2 "로 교체 합 니 다.
    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">
    --> 
    <Engine jvmRoute="tomcat2" name="Standalone" defaultHost="192.168.0.105" debug="0" />
        

     
    어떤 문 서 는 설정 에 < Engine jvmRoute = "tomcat 1" name = "Standalone" default Host = "localhost" debug = "0" > < / Engine > 을 추가 하 는 것 으로 쓰 여 있 습 니 다. 이 는 부하 균형 에 문제 가 없 지만 session 바 인 딩 을 할 수 없습니다. 즉, 같은 사용자 가 두 서버 에서 뛰 어 다 닌 다 는 것 입 니 다.이것 은 jvmRoute 가 정확 하지 않 아서 생 긴 것 입 니 다. 한 줄 만 가입 하면 아무런 작용 이 없 기 때 문 입 니 다. Engine 은 여전히 원래 의 Engine 이 고 원래 의 Engine 에서 jvmRoute 는 정확 하지 않 기 때문에 반드시 교체 해 야 합 니 다.그리고 이 jvmRoute 는 반드시 workers. properties 의 이름과 완전히 일치 해 야 합 니 다. 그렇지 않 으 면 session 바 인 딩 을 실현 할 수 없습니다.
     
    2.3.1.2 < Cluster / > 태그 수정
    < Cluster / > 탭 설명 을 삭제 합 니 다. 코드 는 다음 과 같 습 니 다.
    <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
                     managerClassName="org.apache.catalina.cluster.session.DeltaManager"
                     expireSessionsOnShutdown="false"
                     useDirtyFlag="true"
                     notifyListenersOnReplication="true">
    
                <Membership 
                    className="org.apache.catalina.cluster.mcast.McastService"
                    mcastAddr="228.0.0.4"
                    mcastPort="45564"
                    mcastFrequency="500"
                    mcastDropTime="3000"/>
    
                <Receiver 
                    className="org.apache.catalina.cluster.tcp.ReplicationListener"
                    tcpListenAddress="auto"
                    tcpListenPort="4001"
                    tcpSelectorTimeout="100"
                    tcpThreadCount="6"/>
    
                <Sender
                    className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
                    replicationMode="pooled"
                    ackTimeout="15000"
                    waitForAck="true"/>
    
                <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
                       filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
                       
                <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
                          tempDir="/tmp/war-temp/"
                          deployDir="/tmp/war-deploy/"
                          watchDir="/tmp/war-listen/"
                          watchEnabled="false"/>
                          
                <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
            </Cluster>

     
     2.3.2 testGroup 테스트 항목 의 웹. xml 수정
    웹. xml 에 < distributable / > 추가 ... 하면 된다
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
       version="2.5"> 
    
    	<display-name>TomcatDemo</display-name>
    	<distributable/>
    	
    </web-app>

     
     apache, tomcat 1, tomcat 2 다시 시작
    다른 터미널 로 접근:http://192.168.0.105/testGroup/index.jsp
    Tomcat 단말 기 는 null 을 인쇄 하지 않 고 한쪽 은 session 을 설정 하여 쌍방 이 session 을 인쇄 하여 session 공 유 를 실현 하 는 것 을 볼 수 있 습 니 다.
     
    주: 본 고 는 본 컴퓨터 + 2 대의 가상 컴퓨터 를 사용 하여 모두 3 대의 컴퓨터 로 클 러 스 터 설정 을 완성 하고 한 대의 컴퓨터 만 클 러 스 터 설정 을 완성 하면 여러 개의 Tomcat 에서 충돌 하 는 포트 번 호 를 변경 하면 완성 할 수 있 습 니 다.
     
    End...

    좋은 웹페이지 즐겨찾기