이러한 점에 주목, 쉬운의 Nginx + Tomcat의 클러스터링과로드 밸런싱을 구성 할 수

단일 서버 성능 병목 현상, 효과적인 수단이 옆으로 확장 가능한 방식으로 전체 시스템 성능을 향상시킬 때 톰캣 클러스터에 도달한다. Nginx에 높은 성능 HTTP 서버와 리버스 프록시 웹 서버입니다, 톰캣 클러스터로드 밸런싱은 간단한 구성에 의해 달성 될 수있다.

본원에서 사용 톰캣 버전 8.5.35는 Nginx의 버전 1.14.2이다. 다음으로, 프로세스의 구성을 보면 문제는 당신이 마이크로 채널 대중 번호부터 발생할 수있는 "주현절 소스."

1. 개요

웹 응용 프로그램의 경우, 가장 큰 문제는 클러스터 세션 정보 공유, 일반적으로 다음과 같은 솔루션을 가지고있다 :

  • 사용 까다로운 세션 IP 해시로드 밸런싱 정책을 사용하여, 예를 들어, 현재 사용자의 요청은 단일 서버에 집중되어, 실패의 단점 단일 지점, 세션 손실
  • 사용 세션 복제를 단점은 작은 클러스터에 대한 메모리와 대역폭의 비용, Tomcat이 클러스터의 각 노드에 동기화 세션 복제 전략 세션 정보를 제공하여
  • 타사 캐싱 미들웨어를 사용하여 같은 전체 클러스터의 세션 정보, 캐시 레디 스 캐시 응용 프로그램 제어에 의해 세션과 관련된를, 당신은 또한 Tomcat을 적용 할 수 있습니다
  • 물론, 세션 정보는 공유 파일 시스템 또는 데이터베이스에 저장 될 수있다

Nginx의 구성 과정에서 다음과 같은 문제가 발생할 수 있습니다 :

  • 같은 tomcat_ha으로, 업스트림 이름을 구성 할 때 밑줄을 사용할 수 없습니다, 또는 Tomcat은 [_] 도메인 이름 이상에서 유효 결코 문자를 슬로우합니다
  • 창에있는 모든 프로세스를 종료 Nginx.exe,taskkill /fi "imagename eq nginx.exe" /f
  • 창문에 80 개 포트를 점유하는 시스템 프로세스의 PID 4가, 그래서 8000에 의해이 대체 Nginx의 것

구성 프로세스, 관심을 필요로하는 문제에 톰캣 클러스터 :

  • web.xml의 구성을 확인하는 것을 <배포 /> 요소
  • 컨텍스트 관리자를 확인하는 것은 표준 세션 관리자로 대체하지 마십시오
  • Receiver.address가 기본이 127.0.0.1을 준수 할 수 있기 때문에, 자동으로 구성되지; Receiver.port 변경 변경하거나 할 수는 없습니다, 톰캣 사용 가능한 포트 자체는 4000-4100의 범위 감지 자동 충돌
  • 다른 서버에있는 경우에, 당신은 할 필요가 방화벽이나 열려있는 포트를 해제 시간 동기화뿐만 아니라,

2. Nginx의 코어 구성

Nginx에 추가하고 다음과 같이 핵심 구성이 수정의 기본 구성을 사용 :

http {
  ...
  #gzip  on;
  
  #设置负载均衡的服务器列表和权重
  upstream tomcat-ha {
      #ip_hash; 
      server 172.31.1.41:8080 weight=1;
      server 172.31.1.42:8080 weight=1;
  }
  
  server {
      listen       8000;
      server_name  localhost;

      #charset koi8-r;
      #access_log  logs/host.access.log  main;

      location / {
          root   html;
          index  index.html index.htm;
          #转发请求
          proxy_pass http://tomcat-ha;
          proxy_set_header Host $http_host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
      }
      ...
  }
}

3. 톰캣 클러스터 구성

클러스터 구성을 가능하게 <엔진> 요소에서 다음 설정을 추가 :

<!-- channelSendOptions=6 同步复制 -->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">
  <!-- 集群 Session 管理器 -->
  <Manager className="org.apache.catalina.ha.session.BackupManager"
             expireSessionsOnShutdown="false"
             notifyListenersOnReplication="true"
             mapSendOptions="6"/>
  <!--
  <Manager className="org.apache.catalina.ha.session.DeltaManager"
           expireSessionsOnShutdown="false"
           notifyListenersOnReplication="true"/>
  -->
  <!-- 集群内部通信配置 -->
  <Channel className="org.apache.catalina.tribes.group.GroupChannel">
    <Membership className="org.apache.catalina.tribes.membership.McastService"
                address="228.0.0.4"
                port="45564"
                frequency="500"
                dropTime="3000"/>
    <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
              address="192.168.10.2"
              port="5000"
              selectorTimeout="100"
              maxThreads="6"/>
    <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
      <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
    </Sender>
    <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
    <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
    <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
  </Channel>
  <!-- 此 vavle 拦截请求,并将 Session 信息发给内部节点 -->
  <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
         filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
  <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

작동 원리에 대한 간략한 설명 :

  1. Nginx의 로그인 인증을 요청하는 응답이 리턴되기 전에, Tomcat2 세션에 정보를 복사하여, 쿠키를 생성하는 세션을 생성을 Tomcat1에 요청을 전달
  2. 요청이 다시의 nginx는 쿠키 세션 Tomcat2에 요청을 전달 걸릴 때, Tomcat2가 성공적으로 인증 된 내부 세션 세션 개체 관련된 수영장이 발견, 더 이상 요청 된 리소스 인증을 반환

4. 그 부하 분산 및 복제 세션을 확인

4.1 테스트 환경

  1. 이 PC 배포 톰캣 사용하여, 대응은 다음과 같습니다 172.31.1.41 - Tomcat1,172.31.1.42-Tomcat2
  2. 사용을 기반으로 톰캣 배포는 바람둥이 벤치 마크의 웹 응용 프로그램을 작성, SessionExample 프로그램을 제공
  3. 내장 된 톰캣 관리자 응용 프로그램, 응용 프로그램이 세션 풀 내부에 배포 된 볼과 결합

4.2 부하 분산

상황에 PARAM 배치 디스크립터 파일을 수정 톰캣 벤치 마크는 브라우저의 요청이 172.31.1.42:8080에서 볼 수있는 접근이 톰캣 구별을 위해 "나는 바람둥이 1/2 해요", 및 Nginx에 Tomcat을 시작하다 서버 간의 스위칭 :

REQ-균형

4.3 세션 복사

이해를 돕기 위해, 여기 Nginx에 처음으로로드 밸런싱 정책 설정 ip_hash합니다 :

  1. Nginx에 항상 요청이 Tomcat1 찾은 다음 Tomcat1에 세션을 생성, 세션에 몇 가지 속성을 추가하는 것으로 가정
  2. 쿠키를 tomcat2하는 요청을 전달합니다 Nginx에와 세션 전에,이 시간을 Tomcat1 시뮬레이션 오류를 닫은
  3. 이 사본의 성공을 나타내는 경우이든보기 Tomcat2 세션 정보에 쿠키 (JSESSIONID)와 상관 관계가있다

다음과 같이 전체 프로세스는 다음과 같습니다

세션 사본

방금 설명한 반면 상기 무빙 Tomcat2 세션 정보로부터 알 수있는도는 Tomcat1에 복사된다.

5. 요약

마이크로 신호 "주현절 소스,"응답 "톰캣", 및 Nginx에와 톰캣 구성 파일을 여기에 사용 가능한 엔지니어링 테스트를 검색 할 수 있습니다.

추천

출처www.cnblogs.com/wskwbog/p/10934546.html