【转】Apache Http Server与Tomcat实现负载均衡和集群
一、分布式实现原理
如上图所示,主要通过 Apache-Server 作为中转服务器,实现多个 tomcat 服务器之间的分布式处理,用户直接请求Apache-Server ,然后 Apache-Server 会将请求分发到具体的 tomcat-server ,之后tomcat-server 响应客户请求并返回结果到 Apache-Server ,最后 Apache-Server 返回结果给用户
二、负载均衡
文件说明:
mod_jk.conf
主要定义 mod_jk 模块的位置以及 mod_jk 模块的连接日志设置,还有定义 worker.properties 文件的位置。
worker.properties
定义 worker 的参数,主要是连接 tomcat 主机的地址和端口信息。如果 Tomcat 与apache 不在同一台机器上,或者需要做多台机器上 tomcat 的负载均衡只需要更改 workers.properties 文件中的相应定义即可。
% APACHE_HOME %为你的安装目录
环境说明:
主要使用了一个 Apache Server 和两个 Tomcat ,在同一台电脑上进行测试。
1. 准备软件
下载地址: http://jakarta.apache.org
apache_2.2.4-win32-x86-no_ssl.msi
下载地址: http://httpd.apache.org/download.cgi
mod_jk-1.2.31-httpd-2.0.52.so (主要作用是建立 Apache Server 与 Tomcat 之间的连接 )
下载地址: http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/
说明: apache-server 安装完成后,可以在浏览器中输入 http://localhost/来测试,如果出现 ” It works!”则表示安装成功。
2. 安装 mod_jk 连接模块
3. 修改 mod_jk.conf 文件
为了保持 httpd.conf 文件的简洁,把 jk 模块的配置放到单独的文件中来。
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
# Where to find workers.properties(引用 workers配置文件 )
JkWorkersFile conf/workers.properties
# Where to put jk logs(log文件路径 )
# Set the jk log level [debug/error/info](log级别 )
# Select the log format(log格式 )
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
# Send JSPs for context / to worker named loadBalancer(URL转发配置,匹配的 URL才转发到 tomcat进行处理 )
4. 修改 workers.properties 文件
在 workers.properties 文件中添加以下内容:
worker.list = controller,tomcat1,tomcat2
# tomcat1(ajp13 端口号,在tomcat下server.xml配置,默认8009)
worker.controller.balanced_workers=tomcat1,tomcat2
#worker.controller.sticky_session=true
说明:此文件配置了 2 个 tomcat 服务器进行负载均衡处理
5. 修改 tomcat 配置文件 server.xml
更改其中一个的设置打开tomcat2/conf/server.xml 文件,修改里面所有的端口设置,将8 改为 9 ,如下:
6. 编写一个测试页面 teat1.jsp
建立一个 test 的 web 应用,里面新建一个 test1.jsp, 内容为
7. 启动服务器并进行测试
三、集群 (session复制 )
只配置负载均衡还不行,还要 session 复制,也就是说其中任何一个tomcat 的添加的 session ,是要同步复制到其它 tomcat , 集群内的 tomcat 都有相同的 session
1. tomcat 配置
1.1 修改 tomcat1, tomcat2 的 server.xml 文件添加集群内容,tomcat5.5 无需添加,只需要去掉注释符, tomcat6.0需要添加,内容如下:
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true">
className="org.apache.catalina.cluster.mcast.McastService"
className="org.apache.catalina.cluster.tcp.ReplicationListener"
className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
<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"
<ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
分别添加以上内容后,在 tomcat2 中,修改 tcpListenPort="4001" 为 4002
1.2. Engine 增加 jvmRoute 属性设置, jvmRoute 的值来自于workers.properties 文件所设置的服务器名称。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >
worker.list = controller,tomcat1,tomcat2
2. 添加 test.jsp 页面
2.2. 修改 web.xml 文件,加入 <distributable/>节点,如下所示:
< web-app xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web ="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id ="WebApp_ID" version ="2.5">
< display-name > test </display-name >
< distributable/>
< welcome-file-list>
< welcome-file > index.html </ welcome-file >
< welcome-file > index.htm </welcome-file >
< welcome-file > index.jsp </welcome-file >
< welcome-file > default.html </ welcome-file >
< welcome-file > default.htm </ welcome-file >
< welcome-file > default.jsp </ welcome-file >
</ welcome-file-list>
</ web-app>
3. Session 复制测试
1) 启动apache-server 、 tomcat1 、 tomcat2
2) 访问http://localhost/test/test.jsp,输入名称: test0001 、值: 123 并点击“提交查询内容”按钮,显示效果如下:
如上图所示, tomcat1 创建了一个新的 session , session 中有属性 test0001, 值为 123
3) 关闭tomcat1 服务器, tomcat1 端口为 8080 ,如下图:
4) 在页面中再次点击“提交查询内容”按钮,效果如下:
前端页面并没有发生改变,接下来查看后台情况:
如图所示,可以发现 session 已成功复制到tomcat2 中,以此证明 tomcat 集群已配置成功。
【转】Apache Http Server与Tomcat实现负载均衡和集群相关推荐
- Windows+Nginx+Tomcat搭建负载均衡和集群环境同时实现session共享(一)
摘要:随着网站的访问量越来越多,所以就考虑给网站增加服务器了,现在比较流行的做法就是给网站做集群环境,下面我把我做的过程记录一下,方便日后查看,同时也希望可以帮助到有需要的朋友! 一:首先是环境: 1 ...
- apache的tomcat负载均衡和集群配置
略看了一下,感觉太复杂,要配置的东西太多,因此在这里写出一种更简洁的方法. 要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务 ...
- 基于nginx的tomcat负载均衡和集群(超简单)
今天看到"基于apache的tomcat负载均衡和集群配置 "这篇文章成为javaEye热点. 略看了一下,感觉太复杂,要配置的东西太多,因此在这里写出一种更简洁的方法. 要集群t ...
- 使用LVS(Linux Virtual Server)在Linux上搭建负载均衡的集群服务
使用LVS(Linux Virtual Server)在Linux上搭建负载均衡的集群服务 一.基于于NAT的LVS的安装与配置. 1. 硬件需求和网络拓扑 ...
- nginx+keepalived+tomcat+memcache负载均衡搭建小集群
最近一段时间一直在研究高可用高并发负载均衡分布式集群等技术,先前发布了lvs基于网络第四次协议搭建的小集群,现在用空刚好搭建了一个基于nginx搭建的小集群. 我准备了四台机器,情况如下 机器名称 机 ...
- linux ajp集群,Tomcat6_Apache2.2_ajp负载均衡加集群实战
Tomcat6_Apache2.2_ajp负载均衡加集群实战 [日期:2011-04-20] 来源:Linux社区 作者:Linux [字体:大 中 小] 3.tomcat负载均衡和集群配置 参考官方 ...
- 使用LVS和Keepalived搭建高可用负载均衡服务器集群
目录 1.什么是LVS和Keepalived 2.负载均衡服务器集群示例环境搭建及安装配置 2.1.环境网络拓扑结构 2.2.安装ipvsadm软件 2.3.安装keepalived 2.4.配置网络 ...
- RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成负载均衡组件 Ha-Proxy_02
服务器IP hostname 节点说明 端口 管控台地址 账号 密码 192.168.0.115 mq-01 rabbitmq master 5672 http://192.168.0.115:156 ...
- RabbitMQ + 镜像队列 + HAProxy 实现负载均衡的集群
RabbitMQ + 镜像队列 + HAProxy 实现负载均衡的集群 一.集群管理(RabbitMQ扩容) 1. 环境介绍 hostname ip mq1 192.168.80.16 mq2 192 ...
最新文章
- web在线聊天系统。非ajax轮询
- 四种方式下创建线程启动的区别
- 基于beego一键创建RESTFul应用
- 如何手撸一个队列?队列详解和面试题汇总(含答案)
- thinkphp3.2 不同域名配置不同分组设置
- 上传新文件项目到svn上
- 【python初学者日记】读入正整数n,判断它是质数还是合数,显示所有的因数(包括1和它自身)
- [笔记分享] [SD] 块设备驱动学习小结
- 5.9 Illustrator颜色的设置 [Illustrator CC教程]
- linux eth0网卡配置详解
- 刚开始使用push遇到的小问题
- 【C++ 八】写文件、读文件
- 返回多字段并用数组分割方式展示
- 《Git》版本管理工具的初识与入门
- 字符串流stringstream(头文件sstream)
- 苹果微信多开_一个手机能登两个微信吗
- mysql中字符串转时间戳_MySQL日期 字符串 时间戳互转
- 以太坊 solidity在线实时编译器
- 电子商务外包为成为中小企业最爱
- Object.assign 是浅拷贝还是深拷贝?