一、规划

前端Apache:192.168.10.135

后端tomcat:192.168.10.132

192.168.10.133

二、配置Tomcat

①配置server.xml

1
2
3
4
5
# vi /usr/local/tomcat/conf/server.xml               ##位于103行
TomcatA:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatA">
TomcatB:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatB">

②配置测试页

1
2
3
# cd /usr/local/tomcat/webapps/ROOT
# mv index.jsp index.jsp.bak
# vi index.jsp

TomcatA:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color="green">TomcatA </font></h1>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("abc","abc"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>

TomcatB:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" %>
<html>
<head><title>TomcatB</title></head>
<body>
<h1><font color="yellow">TomcatB </font></h1>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("abc","abc"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>

三、基于mod_jk实现

①配置mod_jk配置文件

1
2
3
4
5
6
7
8
9
# vi /etc/httpd/conf/mod_jk.conf
JkWorkersFile  /etc/httpd/conf/workers.properties   ##指出mod_jk工作所需文件位置
JkLogFile  logs/mod_jk.log                   ##指定日志输出文件位置
JkLogLevel  debug                         ##指定日志级别
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount  /*  lbcluster1                   ##指定负载均衡器名称
JkMount  /status/  stat1                 ##指定状态信息

②配置worker.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# vi /etc/httpd/conf/workers.properties
# workers 列表
worker.list = lbcluster1,stat1
#-------------------------------------------------
# tomcat实例1
#-------------------------------------------------
worker.TomcatA.type = ajp13              ##定向包协议
worker.TomcatA.host = 192.168.10.132     ##tomcat主机地址
worker.TomcatA.port = 8009            ##TomcatA实例端口
worker.TomcatA.lbfactor = 1             ##负载均衡权重为1
#-------------------------------------------------
# tomcat实例2
#-------------------------------------------------
worker.TomcatB.type = ajp13
worker.TomcatB.host = 192.168.10.133
worker.TomcatB.port = 8009
worker.TomcatB.lbfactor = 1
#-------------------------------------------------
# load balancer worker --负载均衡控制器
# ------------------------------------------------
worker.lbcluster1.type = lb             ##负载均衡work,lb内置类
worker.lbcluster1.sticky_session = 0       ##会话是否绑定
worker.lbcluster1.balance_workers = TomcatA, TomcatB     ##指定集群拥有实例
worker.stat1.type = status                    ##状态信息

③配置httpd

1
2
3
# vi /etc/httpd/conf/httpd.conf
LoadModule jk_module modules/mod_jk.so           ##加载mod_jk模块
Include /etc/httpd/conf/mod_jk.conf             ##指定mod_jk配置文件

④测试

输入前端Apache地址查看

刷新后继续查看

前端输入http://localhost/status/查看集群状态

⑤实现会话复制

a.在 <Engine>或 <Host>元素节点下添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# vi /usr/local/tomcat/conf/server.xml
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

b.在启用集群功能的web应用程序的web.xml中添加<distributable/>以实现集群功能

1
2
3
4
5
6
7
8
# vi /usr/local/tomcat/conf/web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<distributable/>
# cp /usr/local/tomcat/conf/web.xml /usr/local/tomcat/webapps/ROOT/WEB-INF/

详情:http://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html

c.测试

输入前端Apache地址查看

刷新后继续查看

TomcatA和TomcatB已经实现了会话共享

四、基于mod_proxy实现

①查看相关代理模块是否装载(其中balancer为集群实现模块)

1
2
3
4
5
6
7
8
9
10
11
# httpd -D DUMP_MODULES | grep proxy         
proxy_module (shared)
proxy_ajp_module (shared)
proxy_balancer_module (shared)
proxy_connect_module (shared)
proxy_express_module (shared)
proxy_fcgi_module (shared)
proxy_fdpass_module (shared)
proxy_ftp_module (shared)
proxy_http_module (shared)
proxy_scgi_module (shared)

②配置httpd

1
2
3
4
5
6
7
8
9
10
11
12
13
# vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerAdmin localhost
ServerName localhost
ProxyPass / balancer://cluster1/ stickysession=jsessionid
ProxyPa***everse / balancer://cluster1/
</VirtualHost>
ProxyRequests Off
<proxy balancer://cluster1>
BalancerMember ajp://192.168.10.132:8009 loadfactor=1 route=TomcatA
BalancerMember ajp://192.168.10.133:8009 loadfactor=1 route=TomcatB
ProxySet  lbmethod=bytraffic
</Proxy>

注:

ProxySet  lbmethod={byrequests|bytraffic|bybusyness}:负载均衡的实现方式

byrequests:按照请求次数负载均衡(默认)

bytraffic:按照流量负载均衡

bybusyness:安装繁忙程度负载均衡(总是分配给活跃请求数最少的服务器)

③测试

输入TomcatA地址查看:

输入TomcatB地址查看:

输入前端Apache地址查看:

刷新继续查看:

本文出自 “记事本” 博客,请务必保留此出处http://wangzhijian.blog.51cto.com/6427016/1718502

转载于:https://blog.51cto.com/lucifer119/1732365

Apache+Tomcat实现负载均衡相关推荐

  1. apache+tomcat 搭建负载均衡系统

    apache+tomcat+mod_jk 搭建负载均衡系统. 0.os系统采用centos6.8 x64 2.6.32-642.el6.x86_64 1.首先安装好jdk环境本次采用jdk-8u111 ...

  2. linux ajp集群,Linux下apache tomcat ajp_proxy 负载均衡+集群+session 复制

    11.查看 netstat –ant tcp        0      0 ::ffff:192.168.15.124:4000  :::*                        LISTE ...

  3. 【转】Apache Http Server与Tomcat实现负载均衡和集群

    Apache Http Server与Tomcat实现负载均衡和集群 一.分布式实现原理 如上图所示,主要通过 Apache-Server 作为中转服务器,实现多个 tomcat 服务器之间的分布式处 ...

  4. nginx+tomcat+memcached负载均衡

    2019独角兽企业重金招聘Python工程师标准>>> nginx+tomcat+memcached负载均衡 负载均衡: 负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服 ...

  5. NGINX基于Tomcat配置负载均衡

    NGINX基于Tomcat配置负载均衡 本部署指南说明了如何使用NGINX开源和NGINX Plus在Apache Tomcat TM应用程序服务器池之间平衡HTTP和HTTPS流量.本指南中的详细说 ...

  6. 关于Tomcat+Nginx负载均衡与Jmeter服务器测压的日记

    Jmeter测压 1.Jmeter-5.1.1下载:http://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-5.1.1.zip 2 ...

  7. nginx+tomcat+redis负载均衡及session共享

    概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...

  8. Nginx+Tomcat服务器负载均衡实践方案

    1.    为何选择Nginx+Tomcat做负载均衡? 1.1. Nginx是什么? Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3 ...

  9. nginx+tomcat的负载均衡

    nginx+tomcat的负载均衡 一. Nginx的安装配置 1. Nginx服务器端 Nginx服务器的IP:192.168.5.108 Tomcat01的IP:   192.168.5.102 ...

最新文章

  1. Mysql 知识点总结(持续更新)
  2. 键空间通知(keyspace notification)
  3. python图像识别车票_是程序员就用Python查12306的票
  4. java线上排查利器arthas
  5. Dubbo(RPC原理、Dubbo架构负载均衡配置方式)(2)
  6. 27. Location reload() 方法
  7. HDU 1596 find the safest road
  8. python ppt表格样式展示
  9. 【案例分享】利用Python识别图片中的文字
  10. Android崩溃治理
  11. C++_基础1.1初识——Hellow world
  12. 最简单的 UE 4 C++ 教程 —— 扫描多线轨迹【十六】
  13. 如何下载喜马拉雅里面的音频文件
  14. Linux用户与权限系统
  15. 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(解读误区)
  16. 【Datawhale可解释性机器学习笔记】预备知识学习
  17. IVD-Net:多模态UNet在MRI中的椎间盘定位和分割
  18. win10用一会就蓝屏重启_电脑总是蓝屏重启怎么办
  19. 计算机工业革命是,计算机工业革命是第几次科技革命
  20. CCNA实验之---Cisco VTP

热门文章

  1. linux老版firefox支持mime,video format or mime type is not supported , mac , firefox
  2. 计算机程序C语言若初始数为48,2016年计算机软考程序员模拟选择试题
  3. 霍夫曼编码PHP,数据结构:哈夫曼编码(php版)
  4. 20201023:力扣第37场双周赛(上)
  5. (补)20200328:两两交换链表中的节点(leetcode24)
  6. 遍历mysql大表的小技巧
  7. java堆外内存为何比java堆更适合用来进行网络IO操作
  8. android adb命令使用
  9. rpm常用命令集合1
  10. 智能一代云平台(三十六):项目中如何做到避免传递依赖