您的位置:首页 > 运维架构 > Tomcat

Apache2.4+Tomcat8负载均衡

2016-05-12 00:24 483 查看
重新做个Demo记录一下

1、环境准备

需要的软件:

JDK/JRE

Apache httpd2.4(跟2.2有不少不同点)

Tomcat8若干

tips:

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

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

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” />

JDK/JRE安装很简单,Oracle官网下载的直接就是binary文件,加压后配置下环境变量就好了(另一篇博客Java为什么要设置环境变量、JAVA_HOME

2、预期目标

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

安装2个Tomcat形成集群;

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

3、步骤

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

浏览器地址栏输入服务器域名/IP应该能看到:It works!

linux启动httpd和tomcat_1和tomcat_2都没有报错。

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

httpd配置

首先打开httpd的
conf
文件

加载模块

(注意,我用"//"是因为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


虚拟主机

//解开虚拟主机配置文件,去那配置,也可以在这配置,但是为了解耦嘛

# Virtual hosts

Include conf/extra/httpd-vhosts.conf


负载均衡配置

//在文档的最后加上负载均衡配置

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里面的配置对应


打开
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,然后弄一个测试网站。

打开
server.xml
文件

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


随便做一个测试网站

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


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>


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、暂结

其实还有一些没写完,有时间来补上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: