apache+tomcat实现动静分离和负载均衡

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介: apache+tomcat实现动静分离和负载均衡

Apache+Tomcat整合

Tomcat作为一个Servlet容器,可以用于运行Java Web应用程序并提供Web服务,它内置了一个HTTP服务器,可以处理HTTP请求和响应。但是,Tomcat的HTTP服务器功能相对较为简单,对于一些特定的需求,可能无法满足用户的要求。

因此,有时候我们需要引入Apache或其他专门的HTTP服务器,来进一步扩展Tomcat的功能和灵活性,例如:

  1. 静态文件处理:Tomcat的HTTP服务器主要是用于处理Servlet/JSP请求和响应,对于静态文件的处理能力不够强大,而Apache或其他HTTP服务器具备更为强大的静态文件处理能力,能够更好地处理静态文件,提高网站性能。
  2. 负载均衡:Apache可以通过mod_jk或mod_proxy将请求转发到多个Tomcat实例,从而实现负载均衡,提高Web应用程序的可伸缩性和可用性。
  3. 安全性:Apache提供了更加丰富的安全性配置选项,例如基于IP的访问控制、SSL/TLS加密、安全认证等,可以更好地保护Web应用程序的安全。
  4. URL重写:Apache可以通过mod_rewrite模块对URL进行重写,从而优化URL的结构和SEO效果。

综上所述,虽然Tomcat已经具备了HTTP服务器的功能,但在某些特定场景下,我们仍然需要引入Apache或其他HTTP服务器来补充Tomcat的不足,从而提高Web应用程序的性能、可伸缩性和安全性。

所以这章内容我们来讲讲怎么配置与实现apache+tomcat的整合实现动静分离与负载均衡

环境

  • tomcat
tar xf apache-tomcat-8.5.20.tar.gz -C /usr/local
ln -s /usr/local/apache-tomcat-8.5.20 /usr/local/tomcat
  • apache
yum -y install httpd
systemctl start httpd
  • jdk
mkdir -p /usr/java
tar xf jdk-8u60-linux-x64.tar.gz -C /usr/java

通过JK实现动静分离

JK方式是一种常用的将Apache和Tomcat整合的方法。JK代表的是Java Connector,它是一个Apache模块,负责将请求从Apache服务器转发到Tomcat服务器。

JK 是通过 AJP 协议与 Tomcat 服务器进行通讯的,Tomcat 默认的 AJP Connector 的端口是 8009。JK 本身提供了一个监控以及管理的页面 jkstatus,通过 jkstatus 可以监控 JK 目前的工作状态以及对到 tomcat 的连接进行设置。

下载和安装mod_jk模块。mod_jk是一个Apache模块,可以将请求从Apache服务器转发到Tomcat服务器。可以在Apache官方网站下载mod_jk模块的最新版本。

编译mod_jk.so

wget -c https://dlcdn.apache.org/tomcat/tomcat-connectors/jk/tomcat-connectors1.2.48-src.tar.gz --no-check-certificate
tar xf tomcat-connectors-1.2.48-src.tar.gz -C /usr/local/src/
cd /usr/local/src/tomcat-connectors-1.2.48-src/native/
yum install -y httpd-devel
./configure --with-apxs=/usr/bin/apxs
make && make install

创建测试页面

# 创建静态页面
vim /var/www/html/index.html
<h1>static_page_from_apache</h1>
# 创建动态页面
vim /usr/local/tomcat/webapps/ROOT/test.jsp
<h1>dynamic_page_from_tomcat</h1>

配置jk模块

[root@node1 ~]# cat /etc/httpd/conf.d/mod_jk.conf
# 载入 mod_jk 模块
LoadModule jk_module modules/mod_jk.so
# 指定 workers.properties 文件的位置
JkWorkersFile conf/workers.properties
# 指定 mod_jk 日志文件的位置,并将日志级别设置为 'info'
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
# 设置 mod_jk 日志格式
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# 设置 mod_jk 的选项
JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectories
# 设置 mod_jk 请求日志格式
JkRequestLogFormat "%w %V %T"
# 将指定的 URL 映射到 'worker1' worker
JkMount /*.jsp worker1
JkMount /servlet/* worker1
JkMount /*.do worker1
JkMount /*.action worker1
# 将 /jkstatus URL 映射到 'status' worker
JkMount /jkstatus status
[root@node1 ~]# cat /etc/httpd/conf/workers.properties
#路径根据实际情况填写
workers.tomcat_home=/usr/local/tomcat/
workers.java_home=/usr/java/jdk1.8.0_261-amd64
worker.list=worker1
# Set properties for worker1 下面的都可以不用修改,感兴趣可以搜索相关含义
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
#worker.worker1.cachesize=10
#worker.worker1.cache_timeout=600
#worker.worker1.socket_keepalive=1
#worker.worker1.socket_timeout=300
worker.list = status
worker.status.type=status

配置文件可以参考/usr/local/src/tomcat-connectors-1.2.48-src/conf/httpd-jk.conf

启动apache和tomcat测试。

systemctl restart httpd tomcat

  

Apache+Tomcat负载均衡

Tomcat1:192.168.133.150

Tomcat2:192.168.133.130

在tomcat2上配置好tomcat和jdk

配置测试页

# cd /usr/local/tomcat/webapps/ROOT
# mv index.jsp index.jsp.bak
# vim index.jsp

TomcatA:

<%@ 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:

<%@ 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文件

# vim /etc/httpd/conf/mod_jk.conf
LoadModule jk_module modules/mod_jk.so
#JkWorkersFile 路径根据实际情况填写
JkWorkersFile conf/workers.properties
# Where to put jk logs
JkLogFile /var/log/httpd/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
#根据实际情况自己定义即可,就是将什么样的请求转发给lb1处理
#JkMount /* lb1
JkMount /* lb1
JkMount /servlet/* lb1
JkMount /*.do lb1
JkMount /*.action lb1
#JkMount /*.class lb1
#JkMount /*.jar lb1
JkMount /jkstatus status 
# 状态页

配置worker.properties

# workers 列表
workers.tomcat_home=/usr/local/tomcat/
workers.tomcat_home=/usr/java/jdk1.8.0_261-amd64
worker.list = lb1,TomcatA,TomcatB
#-------------------------------------------------
# tomcat实例1
#-------------------------------------------------
worker.TomcatA.type = ajp13              ##定向包协议
worker.TomcatA.host = 192.168.133.150     ##tomcat主机地址
worker.TomcatA.port = 8009            ##TomcatA实例端口
worker.TomcatA.lbfactor = 1          ##负载均衡权重为1
worker.TomcatA.activation = A
#-------------------------------------------------
# tomcat实例2
#-------------------------------------------------
worker.TomcatB.type = ajp13
worker.TomcatB.host = 192.168.133.130
worker.TomcatB.port = 8009
worker.TomcatB.lbfactor = 1
worker.TomcatB.activation = A
#-------------------------------------------------
# load balancer worker --负载均衡控制器
# ------------------------------------------------
worker.lb1.type = lb             ##负载均衡work,lb内置类
worker.lb1.sticky_session = 0       ##会话是否绑定
worker.lb1.balance_workers = TomcatA, TomcatB     ##指定集群拥有实例
worker.list=status
worker.status.type = status                    ##状态信息

测试

image-20230418221705423

yum安装 elinks 来测试

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
2月前
|
存储 SQL 缓存
快手:从 Clickhouse 到 Apache Doris,实现湖仓分离向湖仓一体架构升级
快手 OLAP 系统为内外多个场景提供数据服务,每天承载近 10 亿的查询请求。原有湖仓分离架构,由离线数据湖和实时数仓组成,面临存储冗余、资源抢占、治理复杂、查询调优难等问题。通过引入 Apache Doris 湖仓一体能力,替换了 Clickhouse ,升级为湖仓一体架构,并结合 Doris 的物化视图改写能力和自动物化服务,实现高性能的数据查询以及灵活的数据治理。
快手:从 Clickhouse 到 Apache Doris,实现湖仓分离向湖仓一体架构升级
|
3月前
|
Ubuntu Java 应用服务中间件
如何通过 Apt-Get 在 Ubuntu 14.04 上安装 Apache Tomcat 7
如何通过 Apt-Get 在 Ubuntu 14.04 上安装 Apache Tomcat 7
95 0
|
1月前
|
存储 SQL 缓存
Apache Doris 3.0 里程碑版本|存算分离架构升级、湖仓一体再进化
从 3.0 系列版本开始,Apache Doris 开始支持存算分离模式,用户可以在集群部署时选择采用存算一体模式或存算分离模式。基于云原生存算分离的架构,用户可以通过多计算集群实现查询负载间的物理隔离以及读写负载隔离,并借助对象存储或 HDFS 等低成本的共享存储系统来大幅降低存储成本。
Apache Doris 3.0 里程碑版本|存算分离架构升级、湖仓一体再进化
|
1月前
apache+tomcat配置多站点集群的方法
apache+tomcat配置多站点集群的方法
34 4
|
5月前
|
Ubuntu 前端开发 JavaScript
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
|
1月前
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
38 3
|
3月前
|
Java 应用服务中间件 Apache
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
本文介绍了在IntelliJ IDEA中修改Web项目访问路径的步骤,包括修改项目、模块、Artifacts的配置,编辑Tomcat服务器设置,以及解决Apache Tomcat控制台中文乱码问题的方法。
224 0
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
|
3月前
|
Ubuntu Java 应用服务中间件
在Ubuntu 16.04上安装Apache Tomcat 8的方法
在Ubuntu 16.04上安装Apache Tomcat 8的方法
37 0
|
3月前
|
安全 Java 应用服务中间件
在CentOS 7上安装Apache Tomcat 8的方法
在CentOS 7上安装Apache Tomcat 8的方法
133 0
|
3月前
|
安全 Java 应用服务中间件
如何通过 Yum 在 CentOS 7 上安装 Apache Tomcat 7
如何通过 Yum 在 CentOS 7 上安装 Apache Tomcat 7
199 0

推荐镜像

更多
下一篇
无影云桌面