Windows下Apache+Tomcat7负载均衡配置方法详解

准备工作

Windows Server 2008 R2 Enterprise(2.40GH,8GB,64Bit,192.168.10.212)
2台Ubuntu 10.04.4(192.168.10.98,192.168.10.137)
JDK1.7.80
Tomcat7.0.68
Apache2.4.4

1.安装Apache2.4.4

安装过程中没什么注意事项,一直Next就行了。安装完成后默认开启Apache服务,可以在浏览器上输入localhost或者127.0.0.1,这时候会出现It works的字样

2.Java环境

在Ubuntu上的配置网上很多我就不多讲了,但是记得配置JAVA_HOME和PATH

3.Tomcat安装

直接解压在目录中就好了,我的目录在/opt/tomcat7/,在两台Ubuntu上都解压。可能会遇到权限不足的问题,这时候就要敲命令啦,最简单粗暴的,莫过于sudo chmod 777 目录,鉴于安全问题,各位还是妥善地进行授权,这就不提了。

开始配置

Apache的配置

1.首先打开一些必要的Module注释(把前面的#号去掉就行),在conf/httpd这个文件中

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so

这里我提一下最后两个个,我当时只打开了前面几个,结果Apache一直启动不起来

看了看日志发现一直在报Failed to lookup provider ‘shm' for ‘slotmem': is mod_slotmem_shm loaded??这个错误,我看了看才发现原来没有打开这个Module,去掉#号就不会报这个错误了;

另外一个是因为报了(22)Invalid argument: AH01183: Cannot share balancer这个错误,打开这个Module之后就不会报错啦。

2.在conf/httpd文件中打开Virtual hosts的注释

在Include前去掉#号

3.在conf/extra/httpd-vhosts.conf中添加配置

先把我自己的配置贴出来

<VirtualHost *:80>
  ServerAdmin 502053382@qq.com
  ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On
  ProxyPassReverse / balancer://cluster/
  ServerName 192.168.10.212
  ErrorLog "logs/error.log"
  CustomLog "logs/access.log" common
</VirtualHost>
ProxyRequests Off
<proxy balancer://cluster>
  BalancerMember ajp://192.168.10.98:8009 loadfactor=1 route=jvm1 smax=5 max=20 ttl=120 retry=300 timeout=15
  BalancerMember ajp://192.168.10.137:8009 loadfactor=1 route=jvm2 smax=5 max=20 ttl=120 retry=300 timeout=15
</proxy>

ProxyPass :将远程服务器映射到本地服务器的URL空间

balancer:// :代理的指令类型

stickysession : 均衡器粘连会话名称。该值常常会被设置为类似JSESSIONID或者 PHPSESSIONID之类的值,他依赖于支持会话的后端应用服务器。如 果后端服务器使用不同的cookie名称或者URL编码的ID(像servlet 容器),使用|来分开他们。第一个部分针对cookie,第二个针对路径。

nofailover : 如果设为‘On',当工作单元被禁用或者出错时,会话则立即中断。可以将 该值设为On如果后端服务器不支持会话复制(Session replication)。

ProxyRequests : 在使用ProxyPass指令的时候,ProxyRequests指令通常都应该是关闭 的。

BalancerMember : 均衡成员

loadfactor : 工作单元负载系数。用于BalancerMember。它是一个1到100之间的数 字,用于定义应用于该工作单元的正规化权重负载。

route : 工作单元的路由,用于负载均衡器中。该路由是附加给会话ID的一个值。

smax : 根据需要最多创建数量为柔性最大值(Soft Maximum),也就是smax的链接。 任何超出smax数量的链接都会指定一个生存时间也就是ttl。

max : 默认值为当前MPM中每个进程的线程数量。在Prefork MPM中,该值总是为 1,在Worker MPM中,该值受ThreadsPerChild控制。

ttl : 超出smax连接数的非活动链接的生存时间(Time To Live),单位为秒。Apache 会关闭在这段时间内没有被用过的所有链接。

retry : 线程池工作单元重试的超时时间,以秒为单位。如果到后端服务器的线程池工 作单元状态是出错,Apache将不会递交任何请求到该服务器,直到超时结束。 这可以令后端服务器关闭进行维护,并稍后上线。如果值为0则表示总是重试 错误状态的工作单元不等待任何时间。

timeout : 链接超时时间,单位为秒。如果未设置,那么Apache会一直等到有可用的链接 位置。该指令常和max参数一起使用来限制到后端服务器的链接。

这样就差不多配置完了,重启Apache服务就可以了。

注意:当输入localhost或者127.0.0.1的时候已经不会出现It works的字样,而是会报503错误,这是正常的,因为现在Apache已经开起了负载均衡的功能,已经通过AJP导向对象IP上的Tomcat,只是Tomcat还没有启动过。

Tomcat的配置

以192.168.10.98这台服务器为例

使用Vim打开conf下面的server.xml(不会Vim的请自行脑补╮(╯▽╰)╭)。这里介绍的负载均衡,是Apache通过AJP协议与Tomcat进行衔接,所以在Apache中配置的端口号是Tomcat中AJP的端口号。

此外,需要在Engine中配置jvmRoute

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

这里的jvmRoute对应的是Apache中的route。(我刚才把这个去掉不配置,发现竟然也可以,觉得很神奇,但应该是要配置。)

最后还要将

 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

这个注释打开

至此,配置已经完成。同理在192.168.10.137上也这样配置。

编写一个小小的测试用的test.jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.*"%>
<html>
  <head>
    <title>ApacheTomcatTest</title>
  </head>
  <body>
    <%
      out.println("<br> SESSION ID:" + session.getId() + "</br>");
    %>
  </body>
</html>

在Tomcat的webapps目录下面创建一个balance文件夹,将test.jsp放在该文件夹下面,启动Tomcat

最后在浏览器中输入192.168.10.212/balance/test.jsp
会发现SESSION ID的值一直在两个数字之间变换

这就是负载均衡的体现了。当然,输入192.168.10.212出现的也不会是It works,而是经典的Tomcat首页。

对了,以上是基于三台服务器的

更多关于Apache+Tomcat7负载均衡配置方法请点击下面的相关链接

(0)

相关推荐

  • 详解tomcat设置默认路径致使项目url冲突解决方法

    前言 tomcat作为java容器非常出色,但是依然会有一些避之不及的小坑,在此记录一笔. START 问题 部署多个项目后url路径冲突 情景描述 1.webapps下有两个项目 projectA,projectB.两个项目除开管理信息接口,其余都有安全验证机制. 2.projectA由于未做前后端分离,因此静态资源也存在java项目中.在做静态资源中的接口请求时未写包名,比如登录,js代码会拼接服务器ip+端口+当前设置的url(/login),而未在/login前加上/projectA,所

  • 基于alpine用dockerfile创建的tomcat镜像的实现

    1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull repository docker.io/library/alpine ... latest: Pulling from docker.io/library/alpine 4fe2ade4980c: Pull complete Digest: sha256:621c2f39f8133acb8e64023a94dbd

  • Tomcat默认程序发布路径的使用与修改方法讲解

    tomcat7默认的程序发布路径为tomcat/webapps/ROOT/下面. 例子 比如我在tomcat/webapps/ROOT/路径下新建一个jsp文件,则可以直接通过URL为: http://localhost:8080/index.jsp 来访问. 再比如我做文件的上传和下载功能时,可以在ROOT下新建一个FileUpload文件夹,把上传文件的路径设为这个文件夹下,然后上传一个文件test.txt:做下载功能时,点击该文件的下载按钮,可以直接让网页打开一个URL: http://l

  • IDEA导入eclipse项目并且部署到tomcat的步骤详解

    前言 本文主要给大家介绍了关于IDEA导入eclipse项目并部署到tomcat的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 步骤如下: 1.首先引入本地项目 我这里是maven项目就直接选择的以maven项目引入,如果选eclipse的话,pom文件不会被初始化,部署tomcat会出问题 这项选完后,就一路next,jdk可以在引入的时候选择,也可以引入后在配置,注意jdk版本要与项目一致 现在项目就从成功引入进来了,可能现在项目会有一大堆红杠,是因为项目还没有配

  • Spring Boot使用Thymeleaf + Gradle构建war到Tomcat

    Spring Boot 以Jar的方式部署启动,这个不用介绍了, 之前也介绍了关于 Spring Boot + thymeleaf 的简单使用 ,但是今天遇到一个问题, 我先描述下问题的场景: 由于运维部门的需求,项目需要以war的形式放到tomcat运行 ,而不是原定的jar的方式运行 配置了一下午,也查了一下午的资料,以war的方式在Tomcat能运行,并且能访问Controller,但是在返回html视图时,找不到视图模板.最终发现问题在Thymeleaf的配置,话不多说,具体看操作步骤:

  • Idea配置maven-tomcat-plugin插件实现项目部署

    参考文章: maven tomcat plugin实现热部署:https://www.jb51.net/article/143054.htm 实现maven项目部署到服务器分为如下几个步骤: tomcat 的tomcat-users.xml中添加用户: maven 的settings.xml中添加server: pom.xml中添加tomcat7-maven-plugin插件配置: 在tomcat运行的情况下,运行 tomcat7:deploy 命令. 1.添加用户 在 标签内: <role r

  • Linux centOS安装JDK和Tomcat的教程

    首先下载JDK. 这里使用的是jdk-8u181-linux-x64.tar.gz 下载Tomcat. 这里使用的是apache-tomcat-8.5.35.tar.gz 创建目录 $ cd / $ mkdir soft $ cd soft 把安装包放到soft里 可以使用yum命令上传 安装 yum install -y lrzsz rz回车选择文件 安装JDK $ cd /usr $ mkdir java $ tar -zxvf jdk-8u181-linux-x64.tar.gz -C /

  • Tomcat获取Nginx反向代理的客户端域名

    问题 Nginx反向代理之后,Tomcat应用通过request.getHeader("host")取到的是Nginx的host,并非客户端浏览器地址栏上的真实域名. 例如在某一台服务器上,Tomcat的端口号为8080,Nginx的端口号为80,Nginx反向代理8080端口. server { listen 80; location / { proxy_pass http://127.0.0.1:8080; } } 在另一台机器上用浏览器打开http://haha/test访问To

  • Intellij idea下使用不同tomcat编译maven项目的服务器路径方法详解

    问题出现原因: 使用自己下载的tomcat运行maven项目,其中有图片上传模块,图片全部上传到target目录下的工程文件里.结果使用maven的clean插件时,图片全部被删除. 目录如下: 为了解决这个问题,想了如下几种方法: 更改output directory目录 Tomcat 增加虚拟目录.但Intellij idea里的工程运行的是 catalina.sh run 命令,工程外的文件路径访问不到 在第2种方法的基础上,同时运行Tomcat/bin/startup.sh脚本,但比较麻

  • 在Docker中利用Tomcat快速部署web应用的方法示例

    在学习了docker的基本操作之后,我们就可以尝试在我们的container中部署一些基本的应用了. 这篇文章我们就来说一下怎么在docker中快速部署一个web应用. 首先肯定是要机器中安装了docker,如果没安装就是用yum install -y docker 命令安装一下 yum install -y docker 既然是部署web应用,那么当然少不了Tomcat了,所以我们应该先拉取Tomcat镜像.命令如下 docker pull tomcat 这个镜像有点大,所以可以事先拉取好,节

随机推荐