初识TomCat之4——TomCat负载均衡及基于IP的Session sticky
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识TomCat之4——TomCat负载均衡及基于IP的Session sticky相关的知识,希望对你有一定的参考价值。
一、背景介绍
当一个tomcat服务器性能遇到瓶颈时,通常的做法是将tomcat服务器横向扩容,使用多台tomcat服务器来响应用户请求,但此时又引入了一个新问题,就是用户每次请求都会随机给他分配一个tomcat服务器,下面介绍如何实现tomcat实现负载均衡和会话绑定
二、实验拓扑
本次实验采用3台主机,操作系统为centos 7.4,JDK版本为1.8,tomcat版本为8.5,拓扑如下图所示:
当用户请求指定的域名时,静态内容由反代服务器自身响应,动态内容转交后端tomcat服务器响应,为避免不必要障碍,关闭3台主机的iptables和selinux。
三、配置nginx作为反代服务器
1.配置后端tomcat服务器(以tomcat1为例)
(1)安装JDK和tomcat(略)
(2)在tomcat配置文件conf/server.xml中,新增一个虚拟主机,主机名为“www.ark.com”,并指定主机位置和根目录
(3)创建对应的目录及主页文件(略),启动tomcat,测试访问是否正常
(4)在tomcat2上做相同的配置
2.配置前端nginx服务器
(1)安装nginx程序(略)
(2)在nginx的配置文件conf/nginx.conf中添加upstream段,并设置tomcat1和tomcat2为上游服务器地址
(3)由于要实现动静分离,所以在安装目录下的web目录中提供一个主页作为静态页面
(4)所有以.jsp或者.do结尾的请求都发往上游服务器,由于上游服务器的默认虚拟主机不是www.ark.com,所以要使用proxy_set_header配置项,启用该配置项后,nginx再向上游服务器传递请求时就会带上请求首部,至此操作完成。
(5)此时请求www.ark.com时,静态内容会由nginx自身响应
(6)而动态内容请求会以轮询的方式传递到2个tomcat服务器上
(7)如果要实现会话绑定,只需要在upstream配置段启用ip_hash选项,来自同一IP的请求就会始终被发往一个tomcat服务器
四、配置apache作为反代服务器
apache服务器实现动静分离有一定的困难,但相对于nginx他又可以和tomcat之间以效率更高的ajp协议进行通讯,具体采用哪种方法根据业务需求选择,继续使用上个实验的环境
1.配置apache负载均衡
(1)关闭前端服务器的nginx服务,安装apache服务(略)
(2)找到conf/httpd.conf配置文件注销根目录
(3)在conf.d目录下创建一个vhosts.conf配置文件,供虚拟主机使用,在配置文件中首先定义一个集群,将所有的请求都发给后端服务器,关键要开启ProxPreserveHost选项,该选项可以将用户请求的主机名传递至后端,类似nginx中的proxy_set_header,至此操作完成
(4)在使用IP地址(172.16.10.10)请求时,得到的是tomcat主页
(5)而动态内容请求会以轮询的方式传递到2个tomcat服务器上
(6)如果要使用ajp协议,无非是将proxy中的http协议与端口换成ajp协议和对应的端口号
2.apache会话绑定
(1)首先在tomcat服务器的Engine上设置jvmroute(此处以tomcat1为例)
(2)然后再到apache服务器的proxy配置段将设置的jvmroute名称填写进route选项,并开启stickysession选项,重启tomcat和apache服务器,会话已实现绑定,马哥视频中http协议需要添加set-cookie配置项才能实现session绑定,在测试中发现不添加该配置项也可以实现
(3)使用ajp协议也只需要将apache服务器上的http协议改为ajp协议即可
补充说明
apache启用负载均衡功能是通过proxy_balancer_module子模块实现的
该模块有一个内置的管理界面,可以在线管理后端的负载策略
只需要在VirtualHost段中增加一个Location即可,且不要将对该Location的请求传递到后端
以上是关于初识TomCat之4——TomCat负载均衡及基于IP的Session sticky的主要内容,如果未能解决你的问题,请参考以下文章
apache分别基于三种方案实现tomcat的代理负载均衡及会话绑定