重新做个Demo记录一下
1、环境准备
需要的软件:
- JDK/JRE
- Apache httpd2.4(跟2.2有不少不同点)
- Tomcat8若干
tips:
tomcat和apache httpd正好我有博客介绍怎么装;
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、暂结
其实还有一些没写完,有时间来补上。