通过Apache+mod_JK+Tomcat集群实现负载均衡

通过Apache+mod_JK+Tomcat集群实现负载均衡

1、概念

通过Apache+mod_JK+Tomcat集群搭建起来的环境主要用来实现负载均衡和高可用性。使用apache作为反向代理服务器实现负载均衡,使用mod_jk可以实现节点的故障恢复功能,达到高可用性。使用tomcat集群功能实现sessionID共享复制。用户访问数据在到达apache后,如果是静态内容,直接由apache处理,如果是动态请求,就通过mod_jk调用后端的一台tomcat服务器去处理请求,可以通过黏性Session将用户的每次请求都分配到同一台tomcat服务器上。在mod_jk选择后端tomcat服务器时,根据apache配置文件中的lbfactor,也就是权值大小来选择。权值越大的分配的任务将会越多。

tomcat集群分为横向集群和纵向集群,横向集群是通过在多台物理服务器上运行tomcat形成集群,而纵向集群是在一台物理服务器上运行多个tomcat程序形成集群,纵向集群可以充分利用物理机的硬件资源,节省成本。

2、集群架构图

3、安装配置负载均衡

下载链接

http://httpd.apache.org/download.cgi#apache22

http://tomcat.apache.org/download-70.cgi

http://tomcat.apache.org/download-connectors.cgi#需要和apache对应的版本保持一致

1)、安装apache

# tar -zxvf httpd-2.2.23.tar.gz

# cd httpd-2.2.23

# ./configure --prefix=/usr/local/apache

# make && make install

2)、编译mod_jk模块

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

# cd tomcat-connectors-1.2.40-src

# cd native/

# ./configure --with-apxs=/usr/local/apache/bin/apxs

# make && make install

# ll /usr/local/apache/modules/mod_jk.so

-rwxr-xr-x 1 root root 952069 Aug  8 13:19 /usr/local/apache/modules/mod_jk.so

3)、加载mod_jk模块

# vim /usr/local/apache/conf/http.conf

# 增加的内容

LoadModule jk_module modules/mod_jk.so#加载mod_jk模块

JkWorkersFile /usr/local/apache/conf/workers.properties #指定workers.properties文件的路径

JkMountFile   /usr/local/apache/conf/uriworkermap.properties #指定uriworkermap.properties文件的路径

JkLogFile /usr/local/apache/logs/mod_jk.log #指定mod_jk的日志文件的路径

JkLogLevel info#指定mod_jk的日志级别

JkLogStampformat "[%a %b %d %H:%M:%S %Y]" #记录Tomcat Worker名称、网址和每个请求的时间

4)、配置workers.properties

# vim /usr/local/apache/conf/workers.properties

worker.list=controller

#========tomcat1========

worker.tomcat1.port=8009 #ajp13端口号

worker.tomcat1.host=10.0.2.208 #tomcat的主机地址

worker.tomcat1.type=ajp13 #连接tomcat所用的协议类型

worker.tomcat1.lbfactor = 1 #负载均衡权重值,值越高,分配的连接数越多

worker.tomcat12.connection_pool_timeout=750 #timeout参数必须和tomcat ajp端口timeout设置一致,否则会产生半开或者半闭连接,导致jk连接异常。

worker.tomcat12.socket_keepalive=0 #告诉操作系统在未激活的连接中发送KEEP_ALIVE信息(发送间隔时间依赖于操作系统的设置,一般为120秒),这样将防止防火墙切断未激活的网络连接。

worker.tomcat12.socket_timeout=3000 #连接在未激活的状况下持续多久,web server将主动切断之。

worker.tomcat12.connect_timeout=1000 #说明了web server等待ping回应的时间(以ms为单位)。

worker.tomcat12.reply_timeout=3300 #告诉web server在接到远端的Tomcat已死并实时的切换到集群中的另外一个Tomcat的回应之前等待一段时间。

#========tomcat2========

worker.tomcat2.port=8009

worker.tomcat2.host=10.0.2.209

worker.tomcat2.type=ajp13

worker.tomcat2.lbfactor = 1

worker.tomcat12.connection_pool_timeout=750

worker.tomcat12.socket_keepalive=0

worker.tomcat12.socket_timeout=3000

worker.tomcat12.connect_timeout=1000

worker.tomcat12.reply_timeout=3300

#=======balance controller====

worker.controller.type=lb

worker.retries=3

worker.controller.balance_workers=tomcat1,tomcat2

worker.controller.sticky_session=0 #表述是否将对SESSION ID的请求路由回到相同的Tomcat worker。(默认是0,session不复制)

5)、配置uriworkermap.properties

# vim /usr/local/apache/conf/uriworkermap.properties #告诉apache,出现以下类形的文件交由tomcat处理

/*=controller

!/*.jpg=controller

!/*.gif=controller

!/*.png=controller

!/*.bmp=controller

!/*.html=controller

!/*.htm=controller

!/*.swf=controller

!/*.css=controller

!/*.js=controller

6)、配置tomcat测试页

# vim /usr/local/tomcat/conf/server.xml

在</Host>前添加以下内容

<Context path="" docBase="/usr/local/tomcat/webapps/" debug="0" reloadable="false" />

在/usr/local/tomcat/webapps目录下新建index.jsp,内容如下

<html>

<body bgcolor="green">

Session ID:<%=request.getSession().getId()%>

</body>

</html>

不通的tomcat服务器,需要修改bgcolor="green"中的颜色,如red、yellow等

在完成以上配置后,apache和mod_jk负载均衡已经安装配置完毕,这时候再访问后端的tomcat服务器时,可以发现连接请求会被轮询分配到各台tomcat服务器中,但是并不能保持会话,不断的刷新页面可以发现session ID在不断的变化。

4、配置session同步复制

7)、配置server.xml文件

# vim /usr/local/tomcat/conf/server.xml

<!-- You should set jvmRoute to support load-balancing via AJP ie :

<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

-->

<Engine name="Catalina" defaultHost="localhost">

修改成

<!-- You should set jvmRoute to support load-balancing via AJP ie :

<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

-->

<!--<Engine name="Catalina" defaultHost="localhost">-->

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

取消<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>的注释

8)、配置web.xml

# vim /usr/local/tomcat/conf/web.xml

<distributable/>

</web-app>

在</web-app>上添加<distributable/>。使的session可以被tomcat的集群节点进行轮循复制

在完成以上配置后,session复制已经配置完成,这时候再去不断的刷新页面,会发现会话会在tomcat服务器间不停的流转,但是session ID一直没有变。

5、遗留问题

1)、在本例中配置的tomcat集群是最简单的,用户小规模的集群。在session同步共享方面,我们还可以将session放到一个地方同一管理,参与到集群的所有节点将session信息用一套相同的机制保存到一个统一的地方,这样不管请求被分配到哪个节点,这个节点都可以获得其它节点创建的session。

2)、当sticky_session设置成1时,不断的刷新页面,会话将一直保存在同一个节点上。当停止这个节点的tomcat服务时,会话将自动立刻跳到其它存活的tomcat节点上,并没有出现像一些文章写的那样页面不能访问。但是当手动ifdown这个节点的网口时,会话有的时候会自动跳到其它节点,有的时候是一直处理刷新中。

通过Apache+mod_JK+Tomcat集群实现负载均衡,布布扣,bubuko.com

时间: 2024-08-08 05:16:10

通过Apache+mod_JK+Tomcat集群实现负载均衡的相关文章

基于apache实现tomcat集群的负载均衡

概述 Tomcat是一个完全功能的HTTP服务器,能够独立完成接收客户端请求,处理请求,然后封装响应报文响应客户端.但是Tomcat的并发响应能力并不强,所以往往使用httpd或nginx服务器用于在前端接收客户端请求,然后将请求调度至后端多个Tomcat节点.本文介绍的是利用httpd作为反向代理服务器,实现Tomcat的负载均衡. httpd连接后端的Tomcat服务器,需要启用对应的模块.能够实现该功能的有两个模块:mod_proxy,mod_jk.mod_proxy是新出的模块,只有在a

使用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡出现的无法加载mod_jk.conf文件的问题

用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡的 如果出现了问题,可以用cmd  cd到Apache安装文件的bin下,运行httpd文件,错误信息就会打印出来. 我这里出现的问题是  Include conf/mod_jk.conf无法加载该配置文件(英文翻译过来就是这个问题) 为什么呢? 经过反复的检查发现是我建立的关于mode_jk.conf文件跟work.properties文件格式不对, 经过检查,用文本文件创建了这两个文件之后,文件的后缀名都是.c

Web服务器Tomcat集群与负载均衡技术

我们曾经介绍过三种Tomcat集群方式的优缺点分析.本文将介绍Tomcat集群与负载均衡技术具体实施过程. 在进入集群系统架构探讨之前,先定义一些专门术语: 1. 集群(Cluster):是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信.应用程序可以通过网络共享内存进行消息传送,实现分布式计算机. 2. 负载均衡(Load Balance):先得从集群讲起,集群就是一组连在一起的计算机,从外部看它是一个系统,各节点可以是不同的操作系统或不同硬件构成的计算机.如

nginx反向代理tomcat集群达到负载均衡,同时使用proxy_cache做web缓存

Nginx最早是作为一款优秀的反向代理软件,以高并发下的卓越性能被越来越多的用户所用户,国内最早研究nginx的是张宴,该大牛的博客地址:http://zyan.cc/ .但是随着需求的发展,nginx的功能已经不再单单是反向代理,现在已经更倾向作为web容器. Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对

Nginx实现tomcat集群进行负载均衡

一.背景 随着业务量和用户数量的激增,单一的tomcat部署应用已经无法满足性能需求,而且对于每次发布项目期间服务不可用的问题也凸显,既然出现了这个问题,那么我们本文就借助nginx来完美的解决这个问题. 二.基本概念 1.说明:关于Nginx的概念和介绍以及Centos7下安装步骤,请移步:Centos7安装Nginx实战 2.正向代理和反向代理 假设我们给定客户端A.代理服务器B.以及最终服务器C 正向代理:代理服务器B来代替客户端A来访问最终服务器C并将最终结果转发给客户端A,站在客户端A

apache+tomcat集群、负载均衡

在开发测试环境中,可能硬件资源不够情况下,要怎么实现集群呢,以下就举一例: 环境: win7 工具: apache 一枚 tomcat 两枚 分别命名为tomcat1.tomcat2 mod_jk 一枚(尽量和apache同一个版本) 一路安装,mod_jk不是安装的.这个文件要拷贝到Apache目录的modules目录里面. 配置Tomcat集群 打开tomcat下conf/server.xml文件,找到<Engine name="Catalina" defaultHost=&

【Java Web】apache+tomcat集群实现负载均衡

一步步按照流程实现Apache 负载均衡 + tomcat群集的步骤: 1.环境介绍 操作系统环境 :windows xp sp3 (一台机器上跑 2个或多个tomcat服务) Java环境:   jdk1.6.0_13 软件:apache_2.2.13-win32-x86-no_ssl.msi apache-tomcat-6.0.20.zip 2.jdk的安装 安装过程省略 环境变量的设置 3.正式开始安装: apache的安装: 下载apache软件包:apache_2.2.13-win32

Tomcat集群配置--负载均衡

Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问量过大,就会出现服应用务器崩溃的情况,这个时候怎么办,难道就只能去重启服务器吗?好,如果是一般的小型公益网站到也无所谓,但如果是比如像大型航空公司售票等电子商务网站,每天每小时都有大量的订单业务,如果这些售票系统一旦崩溃后,再去重启,这些时间和客户的损失就直接会影响到航空公司的利益,这些损失如何去避

轻松实现Apache,Tomcat集群和负载均衡

作者:罗代均 ldj_work#126.com,转载请保持完整性 0, 环境说明 Apache  :apache_2.0.55     1 个 Tomcat:  apache-tomcat-5.5.17 (zip版) 2个 mod_jk:: mod_jk-apache-2.0.55.so  1个 第一部分:负载均衡 负载均衡,就是apache将客户请求均衡的分给tomcat1,tomcat2....去处理    1.安装apche,tomcat http://httpd.apache.org/