Apache + Tomcat 부하 균형 및 Session 귀속 실현
1.1 용어 정의
서비스 소프트웨어 는 b / s 또는 c / s 구조의 s 부분 으로 b 또는 c 에 서 비 스 를 제공 하 는 서비스 소프트웨어 시스템 입 니 다.
서비스 하 드 체 는 컴퓨터, pc 서버 등 계산 서 비 스 를 제공 하 는 하드웨어 를 말한다.
서비스 실 체 는 서비스 소프트웨어 와 서비스 하 드 를 가리킨다.
클 라 이언 트 는 서비스 실체 서 비 스 를 받 는 소프트웨어 나 하드웨어 를 말한다.
1.2 양 대 관건 적 특성
클 러 스 터 는 협동 작업 을 하 는 서비스 실체 로 단일 서비스 실체 보다 더욱 확장 되 고 사용 가능 한 서비스 플랫폼 을 제공 합 니 다.클 라 이언 트 가 보기에 하나의 클 라 이언 트 는 하나의 서비스 실체 와 같 지만 사실은 클 라 이언 트 는 하나의 서비스 실체 로 구성 된다.단일 서비스 실체 와 비교 하면 집단 은 다음 과 같은 두 가지 관건 적 인 특성 을 제공한다.
1.3 양 대 능력
확장 성과 높 은 가용성 특징 을 가지 기 위해 서 는 다음 과 같은 두 가지 능력 을 가 져 야 한다.
부하 균형 과 오류 복 구 는 각 서비스 실체 에 같은 임 무 를 수행 하 는 자원 이 존재 하도록 요구 하고 같은 임 무 를 수행 하 는 각 자원 에 있어 임 무 를 수행 하 는 데 필요 한 정보 보기 (정보 문맥) 는 반드시 같 아야 한다.
1.4 양 대 기술
군집 무 를 실현 하려 면 다음 과 같은 두 가지 기술 이 필요 하 다.
같은 클 라 이언 트 주 소 를 가지 고 클 라 이언 트 가 클 라 이언 트 가 클 라 이언 트 가 클 라 이언 트 가 제공 하 는 계산 서 비 스 를 방문 할 수 있 게 한다. 한 클 라 이언 트 주소 에 각 서비스 실체의 내부 주 소 를 숨 기 고 고객 이 요구 하 는 계산 서 비 스 를 각 서비스 실체 간 에 분포 할 수 있 게 한다.내부 통신 은 집단 이 정상적으로 돌아 갈 수 있 는 기초 로 집단 이 균형 적 인 부하 와 오 류 를 회복 하 는 능력 을 가지 게 한다.
클 러 스 터 설정
위의 그림 에서 알 수 있 듯 이 서비스 실체 1, 서비스 실체 2 와 부하 균형 기 가 하나의 집단 을 구성 했다.서비스 실체 1 과 서비스 실체 2 는 클 라 이언 트 에 대한 서비스 지원 작업 에 참여 하고 균형 부하 기 는 클 라 이언 트 가 클 라 이언 트 에 게 클 라 이언 트 를 유지 하 는 단일 영상 이다.집단 실체 간 에 내부 의 통신망 을 통 해 정 보 를 교류 하 는데 이런 교류 메커니즘 은 일반적으로 그룹 방송 협 의 를 채택 한다.부하 균형 기 는 내부 통신망 을 통 해 각 서비스 실체의 심장 박동 정 보 를 탐지 하고 서비스 실체 간 에 내부 통신망 을 통 해 임무 자원 의 전 파 를 완성 한다.이 를 통 해 알 수 있 듯 이 클 러 스 터 는 주로 서비스 실체 설정 과 부하 이퀄 라이저 설정 두 부분 으로 구성 된다.본 고 는 tomcat 5.5.5.20, apache 2.2.11 을 사용 하여 클 러 스 터 환경 을 설정 합 니 다.
2.1 준비 소프트웨어
# 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
#
# 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...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 파일 압축 및 압축 풀기파일 의 간단 한 압축 과 압축 해 제 를 실현 하 였 다.주요 테스트 용 에는 급 하 게 쓸 수 있 는 부분 이 있 으 니 불편 한 점 이 있 으 면 아낌없이 가르쳐 주 십시오. 1. 중국어 문 제 를 해 결 했 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.