Apache2.4+Tomcat8负载均衡

重新做个Demo记录一下

1、环境准备

  • 需要的软件:

    1. JDK/JRE
    2. Apache httpd2.4(跟2.2有不少不同点)
    3. Tomcat8若干
  • tips:

    tomcat和apache httpd正好我有博客介绍怎么装;

    1. Linux中Apache安装、配置、加为服务

    2. Tomcat - 在Windows & Linux 设置为service
      Tomcat这个需要稍微说下,多个tomcat的配置方式其实就是给每个tomcat中所有需要端口的模块配置一个空闲端口。有这么几个地方:

      • 服务器端口:<Server port=”8005” shutdown=”SHUTDOWN”>
      • Http协议连接器端口:<Connector port=”8080” protocol=”HTTP/1.1” connectionTimeout=”20000” redirectPort=”8443” URIEncoding=”UTF-8” />
      • AJP协议连接器端口:<Connector port=”8009” protocol=”AJP/1.3” redirectPort=”8443” />
    3. JDK/JRE安装很简单,Oracle官网下载的直接就是binary文件,加压后配置下环境变量就好了(另一篇博客Java为什么要设置环境变量、JAVA_HOME )

2、预期目标

  1. 使用1个httpd服务器接收所有请求;

  2. 安装2个Tomcat形成集群;

  3. 配置httpd服务器做反向代理,将请求根据请求平均分配(byrequests)到每个Tomcat上,从而分散压力实现负载均衡 - LoadBalance;

3、步骤

经过了”环境准备”环节,到这里我们的软件应该都装好了,装好了的状态我描述如下:

  • 浏览器地址栏输入服务器域名/IP应该能看到:It works!
  • linux启动httpd和tomcat_1和tomcat_2都没有报错。

接下来,我们来着手修改httpd和tomcat的配置,做负载均衡

httpd配置

  1. 首先打开httpd的conf文件

    1. 加载模块

      (注意,我用"//"是因为csdn这个markdown用"#"排版不好看)
      
      //下面列出来的,没有"#"的都是原来有,而我们需要去掉的;
      //稍微解释下:mod_proxy是代理核心模块;proxy_http/ajp是代理的协议;balancer是必须;slotmem_shm暂时没看左右,没有会报错
      
      LoadModule proxy_module modules/mod_proxy.so
      LoadModule proxy_http_module modules/mod_proxy_http.so
      LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
      LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
      LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
      
      
      ##下面这类模块,是选择负载请求分发的方式的,应该是**选且只能选一个**,按需要解开注释吧
      
      LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
      //LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
      //LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
      //LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
    2. 虚拟主机

      //解开虚拟主机配置文件,去那配置,也可以在这配置,但是为了解耦嘛
      
      # Virtual hosts
      
      Include conf/extra/httpd-vhosts.conf
    3. 负载均衡配置

      //在文档的最后加上负载均衡配置
      
      ProxyRequests Off
      <proxy balancer://cluster>
       BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=tomat8_1
       BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=tomat8_2
      </proxy>
      
      //注意,ajp是协议,tomcat默认会有一个支持ajp协议的<connector>,IP后面的端口指的是tomcat中ajp连接器的端口
      //route一会儿要和tomcat里面的配置对应
      
  2. 打开httpd/conf/extra/httpd-vhosts.conf文件

    //注释或删除原来的VirtualHost配置,然后作以下配置
    
    <VirtualHost *:80>
     ServerAdmin xxx@163.com
     ServerName localhost
     ServerAlias localhost
     ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
     ProxyPassReverse / balancer://cluster/
     ErrorLog "logs/lb-error.log"
     CustomLog "logs/lb-access.log" common
    </VirtualHost>

tomcat配置

tomcat的配置其实经过环境准备已经差不多了,这里主要就是配置route,然后弄一个测试网站。

  1. 打开server.xml文件

    
    <!-- 在引擎上配置jvmRoute和httpd.conf中的route一样就行了,另一个tomcat也要记得配置 -->
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat8_1">
    
  2. 随便做一个测试网站

    1. 要记得JavaWeb网站的结构啊,tomcat中不配置默认放在webapps下面最方便了,在webapps中新建一个文件夹,就是网站路径了,比如叫test

    2. test下面放一个test.jsp和另外一个文件夹WEB-INF
      test.jsp如下,简单打印了JSESSIONID,输出会带上tomcat的名字,这样就能知道两个tomcat在轮流处理了:

      <%@ page contentType="text/html; charset=UTF-8" %>
      <html><head><title>test</title></head>
      <body>
      <%out.println("<br> JSESSIONID: " + session.getId()+"<br>");%>
      </body>
      </html>
    3. WEB-INF下放一个web.xml文件;

      <?xml version="1.0" encoding="utf-8"?>
      
      <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_3_0.xsd" version="3.0" metadata-complete="true"> 
       <distributable />
      </web-app>

    以上。

4、暂结

其实还有一些没写完,有时间来补上。

你可能感兴趣的:(apache,tomcat,负载均衡)