Tomcat负载均衡原理详解及计划,汤姆cat负载均衡

作者: 计算机网络  发布:2019-09-24

Apache Tomcat负载均衡配置,tomcat负载均衡

Apache Tomcat负载均衡能确认保障较高的可用性和系统性格,那么些是通过Apache与汤姆cat之间的通讯来落成的。Apache和汤姆cat之间的简报基本有二种艺术:Mod_Jk、HTTP_Proxy、AJP_Proxy其中以Mod_Jk最为流行,而且官方的文档也极度全。

Mod_JK是Apache的五个模块,其通过AJP合同落实与汤姆cat之间的电视发表,汤姆cat通过设置Connector监听AJP的总是央求。

 

在意:假如指望apache与tomcat通讯使用 HTTP 左券则要求使用 HTTP_Proxy,请看最终。

 

安装Mod_JK:

tar zxvf tomcat-connectors-1.2.40-src.tar.gz

cd tomcat-connectors-1.2.40-src/

cd native/

Tomcat负载均衡原理详解及计划,汤姆cat负载均衡布局。./configure --with-apxs=/home/soft/httpd-2.4.10/bin/apxs --prefix=/home/soft/tomcat-connectors-1.2.40
make 

make install
可选

make clean

make distclean

注:安装结果貌似不会装到/tomcat-connectors-1.2.40,但会往地面apache httpd 写入文件,比方加多了:modules/mod_jk.so

 

负载均衡配置步骤:
1.在apache安装目录下conf目录中找到httpd.conf,在结尾加上配置 Include conf/mod_jk.conf
2.将mod_jk.so文件放入Apachemodules文件夹
3.新建mod_jk.conf文件并安顿
4.新建workers.properties和uriworkermap.properties文件并布置
5.改造各类tomcat配置文件server.xml,首要对应端口和设置engine的jvmRoute属性

 

mod_jk.conf 内容:
# 加载 mod_jk 模块
LoadModule jk_module modules/mod_jk.so
# workers.properties 位置
JkWorkersFile conf/mine_jk/workers.properties
#加载workers的乞求管理分配文件
JkMountFile conf/mine_jk/uriworkermap.properties
# 日志存放地方
JkLogFile logs/mine_mod_jk.log
# 设置日志品级 [debug/error/info]
JkLogLevel info
# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

workers.properties 内容:
# 定义worker,此处的list名称必须和mod_jk.conf文件中的 dispatcher 名称一样  
worker.list=dispatcher,status
# Define Node1  
worker.tomcat1.port=8019  
worker.tomcat1.host=localhost  
worker.tomcat1.type=ajp13  
worker.tomcat1.lbfactor=1  
#worker.tomcat1.connection_pool_size=10  
#worker.tomcat1.connection_pool_timeout=600  
#worker.tomcat1.socket_connect_timeout=300  
# Define Node2  
worker.tomcat2.port=8029  
worker.tomcat2.host=localhost  
worker.tomcat2.type=ajp13  
worker.tomcat2.lbfactor=1  
#worker.tomcat2.connection_pool_size=10  
#worker.tomcat2.connection_pool_timeout=600  
#worker.tomcat2.socket_connect_timeout=300  

# Load-balancing behaviour  
worker.dispatcher.type=lb  
worker.dispatcher.balance_workers=tomcat1, tomcat2
#sticky_session session亲和的装置
worker.dispatcher.sticky_session=0
worker.dispatcher.sticky_session_force=1
#loadbalancer
worker.status.type=status

uriworkermap.properties 内容:
#点名需要提交tomcat管理,"dispatcher"为在workers.propertise里钦赐的负载分配调控器
/*.jsp=dispatcher
/jkstatus=status
!/*.gif=dispatcher
!/*.jpg=dispatcher
!/*.png=dispatcher
!/*.css=dispatcher
!/*.js=dispatcher
!/*.htm=dispatcher
!/*.html=dispatcher

 

Tomcat设置:

预备多少个tomcat,将它们的router分别设成tomcat1和tomcat2,配置它们的connector为ajp,端口分别为8019和8029。

布署完结后,运维apache和tomcat,访谈 能够查看集群状态(前提是安顿了status类型的worker)

 

有能够看看别的人写的,很详细:

 

留神:如若期望apache与tomcat通讯使用 HTTP 合同则必要使用 HTTP_Proxy:

http_proxy

那是运用 Apache 自带的 mod_proxy 模块使用代理才具来连接 汤姆cat。在布局之前请确定保障是不是利用的是 2.2.x 版本的 Apache 服务器。因为 2.2.x 版本对那一个模块进行了重写,大大的加强了其职能和平静。

http_proxy 情势是依附 HTTP 合同的代办,因而它需求 汤姆cat 必需提供 HTTP 服务,也等于说必需启用 汤姆cat 的 HTTP Connector。

本身用的linux源码编写翻译的apache,mod_proxy.so和mod_proxy_http.so已经自带了,别的版本的apache应该也可以有,若无就独自安装 库 文件

############## http_proxy 情势须要的mod_proxy.so ##############
LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
############## http_计算机,proxy 格局亟待的mod_proxy_http.so ##############
LoadModule proxy_http_module modules/mod_proxy_http.so
上边的剧情在 apache配置文件 httpd.conf 中,放手在那之中的笺注就可以使用 库了,

还亟需在httpd.conf文件的尾声加上:

############## http_proxy 方式 ##############
#http_proxy方式亟待加载 mod_proxy.so 和 mod_proxy_http.so,将上边的 两行对应的 LoadModule  松开注释
ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass /

在那一个布局中,大家把具有 的伸手代理到 ,那也正是 Tomcat 的拜望地址,除了 images、css、js 多少个目录除了那一个之外。大家一致能够应用 mod_proxy 来做负载均衡,再看看上面这几个布局

ProxyPass /images !

ProxyPass /css !

ProxyPass /js !

 

ProxyPass / balancer://example/

<Proxy balancer://example/>

BalancerMember

BalancerMember

BalancerMember

</Proxy>

开发银行apache和tomcat就足以测量检验了。

查看斟酌

汤姆cat负载均衡布局,tomcat负载均衡 Apache Tomcat负载均衡能担保较高的可用性和类别性能,这么些是透过Apache与汤姆cat之间的简报来实现的。...

出于公司开端试行个人任务管理模块,内部工作支撑平台的施用人口直线上升,每一种月的月中在线人数达到顶峰,原有的二个汤姆cat已经胜任不了,笔者决定通过负载均衡来化解。

由于公司初叶推行个人职务管理模块,内部专门的学业支撑平台的行使人口直线回涨,各样月的月首在线人数高达巅峰,原有的一个汤姆cat已经胜任不了,作者决定通过负载均衡来消除。

结构图

JAVA项目一般直接用汤姆cat作为Web服务器。为了增添tomcat的特性和平稳,大家一般接纳balance和session同步机制。 下图列出了小编们常用也是最简便的建设方案。计算机 1

事先没搞过负载均衡,于是乎,在各大搜索网址物色文书档案无数。从常理起始,先理解一下法则,有利于接下去的施行,然后再找找有什么本事和方案,最终决定用Apache 汤姆cat配置负载均衡来消除

前面没搞过负载均衡,于是乎,在各大搜索网址寻觅文书档案无数。从常理先河,先知道一下法规,有利于接下去的实践,然后再找找有何技术和方案,最终决定用Apache 汤姆cat配置负载均衡来化解

说明

接下去就起始在虚构机上搞实验,笔者的是台式机,开五个虚构机,卡得作者想吐。喝了半怀咖啡,鼠标才给自家动两下,伤不起呀。果决关掉一个设想机,决定在一个设想机内开三个汤姆cat来测验:

接下去就起来在虚构机上搞实验,笔者的是台式机,开三个设想机,卡得小编想吐。喝了半怀咖啡,鼠标才给本身动两下,伤不起呀。果断关掉三个虚构机,决定在二个设想机内开多少个汤姆cat来测量检验:

1 balance

  • 负载均衡我们一般选取Apache proxy和Apache+mod_jk方式
  • 所采取软件:Apache2.2.19  ;
          Tomcat7           

1、首先供给下载相关的公文:

1、首先供给下载相关的文本:

1.1 mod_proxy方式

      Apache:   httpd-2.2.17-win32-x86-no_ssl.msi

      Apache:   httpd-2.2.17-win32-x86-no_ssl.msi

  mod_proxy是一种分工同盟的的花样,通过主服务器跳转到各台主机担当分化的任务而落到实处职务分工,这种样式不可能完毕负载均衡,只可以提供主服务器的访谈跳转   修改apache的httpd.conf文件配置

开拓httpd.conf文件,撤销上面四行的讲授,用以展开代理所需的.so帮忙模块。

计算机 2View Code

1 #LoadModule proxy_http_module modules/mod_proxy_http.so
2 #LoadModule proxy_connect_module modules/mod_proxy_connect.so
3 #LoadModule proxy_module modules/mod_proxy.so
4 #Include conf/extra/httpd-vhosts.conf

1 #LoadModule proxy_http_module modules/mod_proxy_http.so
2 #LoadModule proxy_connect_module modules/mod_proxy_connect.so
3 #LoadModule proxy_module modules/mod_proxy.so
4 #Include conf/extra/httpd-vhosts.conf

开垦文件confextrahttpd-vhosts.conf,可以观察如下代码:

计算机 3

计算机 4View Code

 1 #
 2 # Use name-based virtual hosting.
 3 #
 4 NameVirtualHost *:80
 5 
 6 #
 7 # VirtualHost example:
 8 # Almost any Apache directive may go into a VirtualHost container.
 9 # The first VirtualHost section is used for all requests that do not
10 # match a ServerName or ServerAlias in any <VirtualHost> block.
11 #
12 <VirtualHost *:80>
13     ServerAdmin webmaster@dummy-host.leader89
14     DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.leader89"
15     ServerName dummy-host.leader89
16     ServerAlias www.dummy-host.leader89
17     ErrorLog "logs/dummy-host.leader89-error.log"
18     CustomLog "logs/dummy-host.leader89-access.log" common
19 </VirtualHost>
20 
21 <VirtualHost *:80>
22     ServerAdmin webmaster@dummy-host2.leader89
23     DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host2.leader89"
24     ServerName dummy-host2.leader89
25     ErrorLog "logs/dummy-host2.leader89-error.log"
26     CustomLog "logs/dummy-host2.leader89-access.log" common
27 </VirtualHost>

计算机 5

#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.leader89
DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.leader89"
ServerName dummy-host.leader89
ServerAlias www.dummy-host.leader89
ErrorLog "logs/dummy-host.leader89-error.log"
CustomLog "logs/dummy-host.leader89-access.log" common
</VirtualHost>

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.leader89
DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host2.leader89"
ServerName dummy-host2.leader89
ErrorLog "logs/dummy-host2.leader89-error.log"
CustomLog "logs/dummy-host2.leader89-access.log" common
</VirtualHost>

 

依附须要转移<VirtualHost>节点内的参数。

说明:NameVirtualHost *:80和<VirtualHost *:80>中 的*为近年来服务器IP,固然有一定IP能够用IP把*轮换掉,小编这里运用的是动态IP,所以用*,小编看apache帮忙文书档案的时候,向来认为这里的*为对 应的域名,那个主张应该是不当的,因为作者填上域名的时候一直未有设置成功。ServerName那些填域名,DocumentRoot填 ServerName上域名对应的根目录。

注:

若果访谈域名出现403权力错误,且相应的文本夹everyone的权位都以任何说了算,则难题出在httpd.conf上。 
编排 httpd.conf,找到DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"那项,那是暗中同意根目录路线,可是要更换的不是其一,从来往下找,找 到<Directory />节点,然后在节点截至后拉长:

计算机 6

计算机 7View Code

 1 <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.leader89">
 2 Options Indexes FollowSymLinks
 3 AllowOverride all
 4 Order Allow,Deny
 5 Allow from all
 6 </Directory>
 7 <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host2.leader89">
 8 Options Indexes FollowSymLinks
 9 AllowOverride all
10 Order Allow,Deny
11 Allow from all
12 </Directory>

计算机 8

<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.leader89">
Options Indexes FollowSymLinks
AllowOverride all
Order Allow,Deny
Allow from all
</Directory>
<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host2.leader89">
Options Indexes FollowSymLinks
AllowOverride all
Order Allow,Deny
Allow from all
</Directory>

那边的"C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.leader89"和"C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host2.leader89"为方今VirtualHost里的路线。 
保留httpd.conf和httpd-vhosts.conf,然后重启Apache。 
然 后拜望dummy-host.leader89展开的是C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.leader89目录,
访问dummy-host2.leader89的是C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host2.leader89目录,
贯彻了单IP多域名多站点的效应。

      Tomcat:   apache-tomcat-6.0.35-windows-x86.zip

      Tomcat:   apache-tomcat-6.0.35-windows-x86.zip

1.2 mod_proxy_blancer方式

      模块     : tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x.zip

      模块     : tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x.zip

  mod_proxy_balancer是mod_proxy的增添,提供负载平衡援救,通过mod_proxy_balancer.so包实现负载平衡,公司生产服务器权且就利用这种艺术。   修改apache的httpd.conf文件配置

开垦httpd.conf文件,撤除上面四行的注明,用以张开代理所需的.so帮助模块。

计算机 9View Code

1 #LoadModule proxy_http_module modules/mod_proxy_http.so
2 #LoadModule proxy_connect_module modules/mod_proxy_connect.so
3 #LoadModule proxy_module modules/mod_proxy.so
4 #LoadModule proxy_module modules/mod_proxy_blancer.so

1 #LoadModule proxy_http_module modules/mod_proxy_http.so
2 #LoadModule proxy_connect_module modules/mod_proxy_connect.so
3 #LoadModule proxy_module modules/mod_proxy.so
4 #LoadModule proxy_module modules/mod_proxy_blancer.so

在httpd.conf文件最后增添以下代码:

计算机 10

计算机 11View Code

1 ProxyPass / balancer://proxy/ #注意这里以"/"结尾   
2 <Proxy balancer://proxy>   
3 BalancerMember http://127.0.0.1:8080/ loadfactor=3 #BalancerMember 及其后面的URL表示要配置的后台服务器、test表示该服务器下的项目名称
4 BalancerMember http://127.0.0.1:8081/ loadfactor=1 #参数”loadfactor”表示后台服务器负载到由Apache发送请求的权值,该值默认为1   
5 </Proxy>

计算机 12

ProxyPass / balancer://proxy/ #小心这里以"/"结尾
<Proxy balancer://proxy>
BalancerMember loadfactor=3 #BalancerMember 及其背后的UEvoqueL表示要配置的后台服务器、test表示该服务器下的项目名称
BalancerMember loadfactor=1 #参数”loadfactor”表示后台服务器负荷到由Apache发送诉求的权值,该值默感觉1
</Proxy>

将下载的tomcat压缩包解压两份,分别命名叫tomcat1、tomcat2。修改tomcat第22中学conf/server.xml中有的端口 号(因为作者在本机做测量试验,所以为了减轻端口号被占用的主题材料修改tomcat2的端口号,使tomcat1与tomcat2能够同偶尔间起步,达成多服务器;倘若有多台PC服务器可不要修改),修改内容如下:

计算机 13

计算机 14View Code

…………
<Server port="9005" shutdown="SHUTDOWN"> #此处修改为9005,避免与tomcat1的8005冲突
…………
…………
    <Connector port="8081" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443"/> #此处修改为8081,避免与tomcat1的8080冲突
…………
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="9009" protocol="AJP/1.3" redirectPort="8443"/> #此处修改为9009,避免与tomcat1的8009冲突。如果使用的是mod_proxy_blancer方式此处可以注释掉,如果使用的是mod_jk方式则此处必须存在
…………
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> #去掉该行注释即可实现session复制功能
…………

计算机 15

…………
<Server port="9005" shutdown="SHUTDOWN"> #此地修改为9005,制止与tomcat1的8005争论
…………
…………
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" /> #这里修改为8081,幸免与tomcat1的8080龃龉
…………
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" /> #此间修改为9009,制止与tomcat1的8009争论。如若应用的是mod_proxy_blancer格局此处能够注释掉,假设运用的是mod_jk格局则此处必需存在
…………
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> #去掉该行注释就能够兑现session复制功能
…………

1)轮询均衡攻略的布置

ProxyPass / balancer://proxy/
<Proxy balancer://proxy>   
 BalancerMember http://127.0.0.1:8080/
 BalancerMember http://127.0.0.1:8081/
</Proxy>   
实现负载均衡的原理如下:

假设Apache接收到 被分发到后台某多少个BalancerMember,比方,该央浼大概会转化到 个满意条件的URAV4L央浼过来时,该央浼可能会被分发到另外一台BalancerMember,例如,恐怕会转接到 

2)按权重分配均匀计谋的配备

ProxyPass / balancer://proxy/
<Proxy balancer://proxy>   
 BalancerMember http://127.0.0.1:8080/ loadfactor=3
 BalancerMember http://127.0.0.1:8081/ loadfactor=1
</Proxy>

参数"loadfactor"表示后台服务器负荷到由Apache发送央浼的权值,该值默以为1,能够将该值设置为1到100里头的任何值?以上面包车型大巴安插为例,介绍怎么着贯彻按权重分配的载荷均衡,现如若Apache收到 4次这样的恳求,该诉求分别被负载到后台 服务器,则有3次延续的如此央浼被负载到BalancerMember为 负载BalancerMember为

3)权重央求响应负载均衡计谋的配置

ProxyPass / balancer://proxy/ lbmethod=bytraffic
<Proxy balancer://proxy>   
 BalancerMember http://127.0.0.1:8080/ loadfactor=3
 BalancerMember http://127.0.0.1:8081/ loadfactor=1
</Proxy>

参数“lbmethod=bytraffic"表示后台服务器负荷乞求和 响应的字节数,管理字节数的有一点是以权值的方法来代表的? “loadfactor"表示后台服务器管理负荷央浼和响应字节数的权值,该值默以为1,能够将该值设置在1到100的任何值?遵照以上配置是那样举办均 衡负载的,假若Apache接收到 最大的区分)?

迄今配置以成就

  在tomcat第11中学webapps文件夹下新建test项目文件夹,test目录下新建如下页面

计算机 16

计算机 17View Code

<%@ page contentType="text/html; charset=GBK"%>

<%@ page import="java.util.*"%>

<html><head><title>Cluster App Test</title></head>

<body>

Server Info:

<%

out.println(request.getLocalAddr()  " : "  request.getLocalPort() "<br>");%>

<%

  out.println("<br> ID "  session.getId() "<br>");

  // 如果有新的 Session 属性设置

  String dataName = request.getParameter("dataName");

  if (dataName !=null&& dataName.length() >0) {

     String dataValue = request.getParameter("dataValue");

     session.setAttribute(dataName, dataValue);

  }

  out.println("<b>Session 列表</b><br>");

  System.out.println("============================");

  Enumeration e = session.getAttributeNames();

  while (e.hasMoreElements()) {

     String name = (String)e.nextElement();

     String value = session.getAttribute(name).toString();

     out.println( name  " = "  value "<br>");

         System.out.println( name  " = "  value);

   }

%>

  <form action="test.jsp" method="POST">

    名称:<input type=text size=20 name="dataName">

     <br>

    值:<input type=text size=20 name="dataValue">

     <br>

    <input type=submit>

   </form>

</body>

</html>

计算机 18

<%@ page contentType="text/html; charset=GBK" %>

<%@ page import="java.util.*" %>

<html><head><title>Cluster App Test</title></head>

<body>

Server Info:

<%

out.println(request.getLocalAddr() " : " request.getLocalPort() "<br>");%>

<%

out.println("<br> ID " session.getId() "<br>");

// 若是有新的 Session 属性设置

String dataName = request.getParameter("dataName");

if (dataName != null && dataName.length() > 0) {

String dataValue = request.getParameter("dataValue");

session.setAttribute(dataName, dataValue);

}

out.println("<b>Session 列表</b><br>");

System.out.println("============================");

Enumeration e = session.getAttributeNames();

while (e.hasMoreElements()) {

String name = (String)e.nextElement();

String value = session.getAttribute(name).toString();

out.println( name " = " value "<br>");

System.out.println( name " = " value);

}

%>

<form action="test.jsp" method="POST">

名称:<input type=text size=20 name="dataName">

<br>

值:<input type=text size=20 name="dataValue">

<br>

<input type=submit>

</form>

</body>

</html>

如需session复制作用此步骤为必需操作

  展开项指标WEB-INF下的web.xml在</web-app>内增加<distributable/>标签,若无则手动建立目录结构

计算机 19

计算机 20View Code

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
       <display-name>TomcatDemo</display-name>

<distributable/> #一般均放在web-app结束节点上一行
</web-app>

计算机 21

<web-app xmlns="" xmlns:xsi=""

xsi:schemaLocation=" " version="2.4">
<display-name>TomcatDemo</display-name>

<distributable/> #一般均位于web-app甘休节点上一行
</web-app>

将tomcat1下的test项目复制一份到tomcat2的webapps目录下
至此全数操作已成功 

起步tomcat1、tomcat2、apache。张开浏览器,输入
计算机 22

      JDK      :  jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe

      JDK      :  jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe

1.3 mod_jk方案 mod_jk是相比较非常针对Tomcat的主意,通过AJP左券连接汤姆cat 1)要求下载mod_jk-1.2.31-httpd-2.2.3.so   http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/mod_jk-1.2.31-httpd-  2.2.3.so包并放到Apache安装目录下的modules子目录中 2)然后配置mod_jk.conf 3)配置workers2.properties 注意:因为mod_jk2情势不被引入,mod_jk2已经不复被更新了。由此,此处不予列举,如有要求参照他事他说加以考察者请留言,将跟着贴出。  proxy、proxy_blancer和mod_jk的比较

  • proxy的毛病是,当个中一台tomcat停止运转的时候,apache仍旧会转化呼吁过去,导致502网关错误。但是假若服务器再起步就不设有这些标题。
  • mod_jk格局的长处是,Apache 会自动物检疫查评定到甘休掉的tomcat,然后不再发乞请过去。
    症结便是,当结束掉的tomcat服务器再度运行的时候,Apache检查评定不到,依旧不会转接呼吁过去。
  • proxy和mod_jk的同步优点是.能够只将Apache置于公网,节省公网IP地址能源。
    能够通过安装来促成Apache专责管理静态网页,让汤姆cat专责管理jsp和servlet等动态必要。
    一齐弱点是:要是前置Apache代理服务器甘休运营,全体集群服务将不可能对外提供。
  • proxy和mod_jk对静态页面央浼的拍卖,都可以通设置来抉择二个尽大概优化的功力。
    mod_proxy_balancer和mod_jk都亟需修改tomcat的配备文件协作
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
  • 这二种汤姆cat集群格局对贯彻最好负载均衡都有自然不足,mod_proxy_balancer和mod_jk相对好些,mod_jk的安装技术更加强些。lbfactor参数来分配诉求职责。
  • apache自带mod_proxy作用模块中这几天只可以够兑现三种区别的负载均衡集群实现格局,第一种是分工合营的的款式,通过各台主机肩负差别的天职而实现职分分工。第几种是例外的机器在担负同一的职责,某台机器出现故障主机能够自动物检疫查评定到将不会影响到客商端,而首先种却无法促成但第一种完结形式的帮助和益处在 于他是主服务器担当相应没第二种大因为台只是提供跳转指路效用,形象的说她不给你指点只是告诉您有条路能够到,但到了那是或不是可以看出你见的人她一度不会去 管你了。比较之下第二种属性要比第一种会好广大;但他俩都有个共同点都以一托N情势来成功职务的之所以您的主机品质必供给好。

 

 

2 session同步

  • 对此tomcat的集群有三种方法,这几个重假设针对session来讲的。一种就是sticky方式,即黏性会话形式;另外一种便是session复制格局了。

2、安装JDK文件,配置JDK环境

2、安装JDK文件,配置JDK环境

2.1 sticky模式

  • 利 用负载均衡器的sticky形式的点子把全体同一session的伸手都发送到一样的汤姆cat节点。那样区别客商的伏乞就被平均分配到集群 中各种tomcat节点上,完结负载均衡的力量。这样做的欠缺是未有魔难复苏的工夫。一旦贰个节点发生故障,那几个节点上富有的session消息全部错失;
  • 这种艺术实际是由前端balancer达成的,基本没有须要webServer做任何更动(只要求修改jvmRoute="tomcat1")
  • 长久以来客商同一session只和一个webServer交互,一旦这几个webserver产生故障,此次session将错过,客户不能够继续行使

3、安装Apache服务器,依据互连网查的资料,供给配备以下文件

3、安装Apache服务器,依据网络查的材料,须求配备以下文件

2.2 复制格局

  • 利 用汤姆cat session复制的体制使得全数session在具有汤姆cat节点中保持一致。当二个节点修改二个session数据的时候,该节点会把那几个session的全数内容种类化,然后广播给具备别的节点。这样即刻一个客商要求被负载均衡器分配到其余贰个节点的时候,那个节点上有完备的 session消息能够用来服务该诉求。这种做法的标题是对session哪怕有一小点改造,也要把方方面面sessions数据总体类别化 (serialize),还要广播给集群中颇具节点,不管该节点到底需无需那个session。那样很轻易会促成大批量的网络通讯,导致互联网不通。一般采用这种办法,当汤姆cat节点当先4个时候,整个集群的吞吐量就不能够再上涨了;
  • 此办法是经过tomcat自身提供的效用,只要求修改server.xml文件
    (1)修改Engine节点消息: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
    (2)去掉<Cluster> <Cluster> 的注释符
    (3)web.xml中增加 <distributable/>

    修改http.conf,在文书最终加上下边一句话就足以了:include "安装目录Apache Software FoundationApache2.2confmod_jk.conf"

    修改http.conf,在文书最终加上下边一句话就可以了:include "安装目录Apache Software FoundationApache2.2confmod_jk.conf"

2.3 Terracotta模式

  • 另 一种办法正是行使开源软件Terracotta。Terracotta的基本原理是对于集群间分享的数据,当在一个节点发生变化的时 候,Terracotta只把调换的一些发送给Terracotta服务器,然后由服务器把它转载给真正需求以此数指标节点。那样对网络的压力就相当小, 各样节点也没有需要浪费CPU时间和内存实行大气的连串化操作。把这种集群间数据分享的体制应用在session同步上,也就是对tomcat第三种集群完毕机制进行了优化,既防止了对数据库的借助,又能落得负载均衡和劫难苏醒的功力。在自己检查自纠测量检验中,采纳Terracotta搭建汤姆cat集群,节点达到8 个时候,整个集群的吞吐量还向来是线性增进的。

本文由韦德国际1946发布于计算机网络,转载请注明出处:Tomcat负载均衡原理详解及计划,汤姆cat负载均衡

关键词: 所有随笔 企业信息化 企业信息