接博客nginx或httpd实现反向代理tomcat并实现会话保持(二)

实例四:使用httpd负载均衡后端tomcat服务

第一步:准备两个tomcat服务器节172.16.240.203

修改tomcat的server.xml配置文件,添加一个host。

<Host name="tomcatA.com"appBase="/myweb/webapp/" unpackWARS="TRUE"autoDeploy="no">

<Contextpath="webapp" docBase="Root" reloadable="true"/>

<ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="/myweb/logs"

prefix="myweb_access_log." suffix=".txt"

pattern="%h %l %u %t&quot;%r&quot; %s %b" />

</Host>

在修改其默认engine

<Engine name="Catalina"defaultHost="tomcatA.com" jvmRoute="tomcatA">

然后在为其提供测试文件

[root@lpw4 webapp]# cat Root/index.jsp

<%@ page language="java" %>

<html>

<head><title>TomcatA</title></head>

<body>

<h1><font color="red">TomcatA.lpw.com</font></h1>

<table border="1">

<tr>

<td>Session ID</td>

<% session.setAttribute("lpw.com","lpw.com");%>

<td><%= session.getId() %></td>

</tr>

<tr>

<td>Created on</td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

启动tomcat服务,并在浏览器中测试:

第一个节点准备完毕

修改tomcat的配置文件server.xml,添加一个host

<Host name="tomcatB.lpw.com"appBase="/myweb/webapp/" unpackWARS="TRUE"autoDeploy="no">

<Contextpath="webapp" docBase="Root" reloadable="true"/>

<ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="/myweb/logs"

prefix="myweb_access_log." suffix=".txt"

pattern="%h %l %u %t&quot;%r&quot; %s %b" />

</Host>

并修改其默认的engine:

<Engine name="Catalina"defaultHost="tomcatB.lpw.com" jvmRouter="tomcatB"

为此节点准备测试页面:

启动tomcat并在浏览器中测试:

两个节点准备完毕。

接下来配置httpd的负载均衡

使用httpd与后端tomcat链接的有三种方式:

1、  基于mod_httpd模块(使用http协议)与后端tomcat实现负载均衡;

2、  基于mod_ajp模块(使用ajp协议)与后端tomcat实现负载均衡;

3、  基于mod_jk模块(使用ajp协议)与后端tomcat实现负载均衡;

每一种方案使用的模块:

(1) apache:

mod_proxy

mod_proxy_http

mod_proxy_balancer

tomcat:

http connector

(2) apache:

mod_proxy

mod_proxy_ajp

mod_proxy_balancer

tomcat:

ajp connector

(3) apache:

mod_jk #mod_jk自身就有负载均衡的功能,因此不需要mod_balancer模块

tomcat:

ajp connector

第一种方案:基于module_httpd模块实现负载均衡

修改虚拟主机的配置文件:

<proxy balancer://lbcluster1>

BalancerMember http://172.16.249.203:8080 loadfactor=1 route=tomcatA

BalancerMember http://172.16.249.204:8080 loadfactor=1 route=tomcatB

</proxy>

<VirtualHost *:80>

ServerName tomcat.com

ProxyVia On

ProxyRequests Off

ProxyPreserveHost On

<proxy *>

Require all granted

</proxy>

ProxyPass / balancer://lbcluster1/

ProxyPa***everse / balancer://lbcluster1/

<Location />

Require all granted

</Location>

</VirtualHost>

然后重启httpd服务,并在浏览器中测试:

要实现session绑定,只需修改虚拟主机的配置文件:

Header add Set-Cookie"ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/"env=BALANCER_ROUTE_CHANGED

<proxy balancer://lbcluster1>

BalancerMember http://172.16.249.203:8080 loadfactor=1 route=tomcatA

BalancerMember http://172.16.249.204:8080 loadfactor=1 route=tomcatB

ProxySet stickysession=ROUTEID

</proxy>

<VirtualHost *:80>

ServerName tomcat.com

ProxyVia On

ProxyRequests Off

ProxyPreserveHost On

<proxy *>

Require all granted

</proxy>

ProxyPass / balancer://lbcluster1/

ProxyPa***everse / balancer://lbcluster1/

<Location />

Require all granted

</Location>

</VirtualHost>

重启httpd服务,并用浏览器测试:

第二种方法:基于mod_ajp实现负载均衡tomcat:

修改虚拟主机的配置文件如下

<proxy balancer://lbcluster1>

BalancerMember ajp://172.16.249.203:8009 loadfactor=1 route=tomcatA

BalancerMember ajp://172.16.249.204:8009 loadfactor=1 route=tomcatB

</proxy>

<VirtualHost *:80>

ServerName tomcat.com

ProxyVia On

ProxyRequests Off

ProxyPreserveHost On

<proxy *>

Require all granted

</proxy>

ProxyPass / balancer://lbcluster1/

ProxyPa***everse / balancer://lbcluster1/

<Location />

Require all granted

</Location>

</VirtualHost>

在浏览器中测试:

要实现session,修改虚拟主机配置文件如下,

#Header add Set-Cookie"ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/"env=BALANCER_ROUTE_CHANGED

<proxy balancer://lbcluster1>

BalancerMember ajp://172.16.249.203:8009 loadfactor=1 route=tomcatA

BalancerMember ajp://172.16.249.204:8009 loadfactor=1 route=tomcatB

#      ProxySet stickysession=ROUTEID

</proxy>

<VirtualHost *:80>

ServerName tomcat.com

ProxyVia On

ProxyRequests Off

ProxyPreserveHost On

<proxy *>

Require all granted

</proxy>

ProxyPass / balancer://lbcluster1/

ProxyPa***everse / balancer://lbcluster1/

<Location />

Require all granted

</Location>

</VirtualHost>

重启httpd服务,并使用浏览器测试:

注意:以上两种方法都是使用proxy_balancer_module模块实现的负载均衡,此模块也自带了内置的后端各节点主机管理页面,因此,此页面也需要做访问控制,在虚拟主机配置文件中启用此功能。添加如下Location段。

<Location /balancer-manager> #balancer-manager是自定义的网页访问时的页面名称

SetHandlerbalancer-manager #此项指明内置的管理器为balancer-manager,这是内置的固定格式。

Proxypass!  #感叹号表示在做负载均衡时请求的资源是balancer-manager页面的时候不想后端节点做负载均衡。

require ip 172.16.1.104 #指明访问控制的允许访问的主机ip地址

require all denied  #指明此页面拒绝其他用户访问。此页面也可以使用基于用户的访问控制。

</Location>

或者基于用户的访问控制:配置如下:

基于ip地址的访问控制测试:

在其他主机上使用curl命令来访问此页面

基于用户访问控制测试:

第三种方法:使用mod_jk实现负载均衡后端tomcat

这里首先配置mod_jk模块实现反向代理后端tomcat

mod_jk是ASF的一个项目,是一个工作于apache端基于AJP协议与Tomcat通信的连接器,它是apache的一个模块,是AJP协议的客户端(服务端是Tomcat的AJP连接器)。

mok_jk模块实现与后端tomcat做负载均衡也是基于ajp协议的,因为mod_jk模块已经不在是httpd服务的自带模块,因此要使用mod_jk模块实现,必须手动编译mod_jk模块为httpd的模块才可使用。

首先解压tomcat-connectors软件包:

[root@lpw3 src]# tar -xftomcat-connectors-1.2.40-src.tar.gz -C /usr/local/

[root@lpw3 local]# cdtomcat-connectors-1.2.40-src/

[root@lpw3 tomcat-connectors-1.2.40-src]#cd native/

要编译mod_jk为httpd的模块,需要指定—with-apxs选项,表示将mod_jk模块编译为httpd的模块,这里使用的是httpd-2.4,支持动态装载模块,因此只要编译mod_jk就可以直接让httpd加载,所有首先确认是否有apxs工具,如:

而apxs是由http-devel包提供,因此安装http-devel包即可。(需要安装开发包和开发工具)

[root@lpw3 native]# yum install http-devel

在native目录下执行./configure

[root@lpw3 native]# ./configure --with-apxs

[root@lpw3 native]# make && makeinstall

然后在httpd的配置文件中装载此模块:

安装完成后可httpd的模块目录下查看是否有此模块:

此模块安装后不会自动被httpd装载,需要手动装载,为此模块创建一个独立配置文件:

[root@lpw3 conf.d]# vim http-jk.conf

LoadModule jk_module modules/mod_jk.so  #加载mod_jk模块

JkWorkersFile  /etc/httpd/conf.d/workers.properties #指明mod_jk模块使用的配置worker属性的文件,此文件需要自己创建

JkLogFile logs/mod_jk.log  #开启日志功能

JkLogLevel debug  #开启调试功能

JkMount /*  TomcatA  #指明将所有的请求资源都代理至后端tomcaA来处理

JkMount /status/  stat1  #stat1是jk模块内置的一个worker,用来显示status管理页面信息的,此页面不应该让管理员以外的人查看,因此需要做访问控制。

然后创建workers.properties文件

[root@lpw3 conf.d]# vim workers.properties

worker.list=TomcatA,stat1 #指明worker名单列表,这里一个是TomcatA,后端的tomcat服务器,一个是stat1,是jk模块内置的一个worker。

worker.TomcatA.port=8009  #指明后端tomcat的端口

worker.TomcatA.host=172.16.249.204 #指明后端tomcat的ip地址

worker.TomcatA.type=ajp13  #指明基于ajp-1.3协议与后端tomcat进行连接

worker.TomcatA.lbfactor=1  #指明负载均衡时后端tomcatA主机的权重,(mo_jk做负载均衡时此项必须给出一个值,只做反向代理的情况下可以不指定此项)

worker.stat1.type = status #指明stat1这个worker的类型,可以认为此项是默认的写法。

[root@lpw3 conf.d]# httpd -t

Syntax OK

[root@lpw3 conf.d]# systemctl reloadhttpd.service

在浏览器中查看:

由于status页面不应该让所有人都能访问,因此要对此页面做访问控制:

修改http-jk.conf配置文件,在其中添加访问控制:

<Location /status>    #定义对status页面做访问控制

require ip 172.16.1.104  #定义只允许172.16.249.104访问此页面

require all denied  #拒绝所有的主机访问

</Location>

然后检查httpd的配置文件是否有错误,重新载入配置文件,并在另一主机上使用curl命令访问此页面:

[root@lpw3 conf.d]# vim http-jk.conf

[root@lpw3 conf.d]# httpd -t

Syntax OK

[root@lpw3 conf.d]# systemctl reloadhttpd.service

[root@lpw3 conf.d]# curl http://172.16.249.208/status/   #这里使用虚拟机的curl命令模拟访问status页面。

然后开始配置使用mod_jk模块实现负载均衡后端tomcat服务器:

编辑http-jk.conf配置文件:

[root@lpw3 conf.d]# vim http-jk.conf

LoadModule jk_module  modules/mod_jk.so  #加载mod_jk模块

JkWorkersFile  /etc/httpd/conf.d/workers.properties #定义mok_jk模块用来定义个work属性的配置文件,负载均衡的后端主机的配置都在此文件中,需要手动编辑。

JkLogFile logs/mod_jk.log  #开启日志功能

JkLogLevel debug  #开启调试功能

JkMount /*  lbcluster1  #定义所有请求使用负载均衡调度

JkMount /status/  stat1  #定义status页面

然后编辑workers.properties文件

worker.list = lbcluster1,stat1 #定义worker列表,第一个为负载均衡worker名,第二个是内置的stat1的worker。

worker.TomcatA.type = ajp13 #定义负载均衡的一个节点node为TomcatA,指明使用的协议为ajp1.3版本

worker.TomcatA.host = 172.16.249.203 #定义TomcatA的ip地址

worker.TomcatA.port = 8009  #指明TomcatA 监听的端口

worker.TomcatA.lbfactor = 1 #指明TomcataA的权重为1

worker.TomcatB.type = ajp13 #定义负载均衡的一个节点node为TomcatB,指明使用的协议为ajp1.3版本.

worker.TomcatB.host = 172.16.249.204  #定义TomcatB的ip地址

worker.TomcatB.port = 8009   #指明TomcatB 监听的端口

worker.TomcatB.lbfactor = 1  #指明TomcataB的权重为1

worker.lbcluster1.type = lb  #指明lbcluster1这个worker的类型是lb(表示负载均衡),此项是定义负载均衡的关键。

worker.lbcluster1.sticky_session = 0 #指明是否开启session绑定机制,0表示不开启,1表示开启,如果后端是session集群的情况下,可以不开启此功能。

worker.lbcluster1.balance_workers =TomcatA, TomcatB #定义负载均衡的两个节点。

worker.stat1.type = status #stat1是jk模块内置的一个worker,用来显示status管理页面信息的,此页面不应该让管理员以外的人查看,因此需要做访问控制。

然后检查httpd配置文件的语法,并重新载入配置文件,在浏览器中测试:

要想实现session绑定只需修改worker.lbcluster1.sticky_session = 1即可

实例五:使用nginx做负载均衡后端tomcat服务器,只需要将前端调度器使用nginx实现:

编辑nginx的配置文件:

upstream upserver{

server 172.16.249.203:8080 weight=1;

server 172.16.249.204:8080 weight=1;

}

server {

listen       80;

location ~* \.(jsp|do)$ {

proxy_pass  http://upserver;

}

}

使用浏览器测试:

要实现session绑定功能,只需要再nginx的配置文件中添加调度算法,基于ip_hash算法。

即可实现基session绑定机制。

注意:一个tomcat实例最大占据内存为32G,因此在一个性能良好的服务器上,可以同时启动多个tomcat实例(只要使用不同的端口),即可提高服务器的利用率!

后续实例见博客四:tomcat实现session集群及tomcat+memcached共享session服务器实现会话保持

转载于:https://blog.51cto.com/qikexing/1709449

nginx或httpd实现负载均衡tomcat(三)相关推荐

  1. Haproxy群集+Nginx负载均衡+Tomcat架构搭建

    文章目录 Haproxy群集+Nginx负载均衡+Tomcat 一.Nginx+Tomcat 1.tomcat1搭建 1)准备工作 2)安装JDK,配置tomcat环境变量 ①rpm安装JDK ②配置 ...

  2. nginx 反向代理负载均衡 tomcat集群应用

    nginx 反向代理负载均衡 tomcat集群应用 环境介绍: 系统:centos5.8_64 192.168.0.201:nginx服务器 192.168.0.202:tomcat服务器 192.1 ...

  3. 王高利:Apache Httpd负载均衡Tomcat并实现Session Sticky和Session Cluster

    Apache Httpd负载均衡Tomcat并实现Session Sticky和Session Cluster http://anyisalin.blog.51cto.com/10917514/176 ...

  4. 从0开始,在Linux中配置Nginx反向代理、负载均衡、session共享、动静分离

    写这篇文章花费了我近一周的时间,参考网上许多优秀的博客文章,我不敢说写的很好,至少很全很详细.本文先介绍原理部分,然后再进行实战操作,我认为这样才会有更深的理解,不过这也导致了文章篇幅很长.但是,如果 ...

  5. nginx实现请求的负载均衡 + keepalived实现nginx的高可用

    前言 使用集群是网站解决高并发.海量数据问题的常用手段.当一台服务器的处理能力.存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求.这种 ...

  6. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    本站点停止更新,请访问:blog.coocap.com 相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tom ...

  7. Nginx动静分离实现负载均衡

    转载自   Nginx动静分离实现负载均衡 前期准备 使用Debian环境.安装Nginx(默认安装),一个web项目,安装tomcat(默认安装)等. Nginx.conf配置 1 # 定义Ngin ...

  8. 基于Nginx反向代理及负载均衡

    基于Nginx反向代理及负载均衡 参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 只要没有被启用,默认就是 ...

  9. docker实现nginx反向代理、负载均衡

    docker实现nginx反向代理.负载均衡 启动docker服务 systemctl start docker.server 查看docker镜像 docker images 拉取tomcat.ng ...

最新文章

  1. php ajax formdata 进度,使用formdata使用ajax将数据发送到PHP
  2. 真相!30K拿到互联网大厂offer,网友:我服了!
  3. 11岁少女叫板支付宝!会写代码的孩子,到底多可怕?
  4. 数据中心网络性能:新应用下的新需求
  5. java向注册表单传递数据php_PHP提交from表单的方法
  6. UIScrollView的简单使用
  7. 排序算法:直接插入排序算法实现及分析
  8. 建模数据科学家的福音:MIT系特征自动构造工具今日发布
  9. 使用代码更新 UIVersion 属性
  10. Java课堂作业03
  11. db2离线备份_DB2高危操作LOAD命令风险详解
  12. 多页面共用子窗口技术
  13. 详述支付路由的设计方案
  14. 删除OSX中第三方的「偏好设置」程序(.prefPane)
  15. 《软件工程导论》知识点期末复习整理
  16. 2022年汽车修理工(中级)上岗证题库及答案
  17. libcef.dll丢失怎么办
  18. Dubbo 的集群容错模式:Failsafe Cluster
  19. EXCEL转PDF最便捷的方法
  20. linux查看sriov端口,sriov查看pf-vf对应关系

热门文章

  1. 2008开年大礼:《Application = Code + Markup》中文版面世
  2. Linux环境编译安装Mysql以及PHP中文乱码解决
  3. php使用curl可以get 模拟post
  4. asp.net2.0如何加密数据库联接字符串
  5. 在C#.net中如何操作XML
  6. 【ubuntu】vim中鼠标选中时变成 可视模式,不能复制的解决方法
  7. array column函数php,php array_column 函数实例应用
  8. python 打印皮卡丘_Python到底是什么?学姐靠它拿了5个offer
  9. Java多线程复习:2(线程的创建和使用)
  10. IDEA中修改文件的默认创建方式