一、背景介绍

当一个tomcat服务器性能遇到瓶颈时,通常的做法是将tomcat服务器横向扩容,使用多台tomcat服务器来响应用户请求,但此时又引入了一个新问题,就是用户每次请求都会随机给他分配一个tomcat服务器,下面介绍如何实现tomcat实现负载均衡和会话绑定

二、实验拓扑

本次实验采用3台主机,操作系统为centos 7.4,JDK版本为1.8,tomcat版本为8.5,拓扑如下图所示:

初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第1张图片

当用户请求指定的域名时,静态内容由反代服务器自身响应,动态内容转交后端tomcat服务器响应,为避免不必要障碍,关闭3台主机的iptables和selinux。

三、配置Nginx作为反代服务器

1.配置后端tomcat服务器(以tomcat1为例)

(1)安装JDK和tomcat(略)

(2)在tomcat配置文件conf/server.xml中,新增一个虚拟主机,主机名为“www.ark.com”,并指定主机位置和根目录

初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第2张图片

(3)创建对应的目录及主页文件(略),启动tomcat,测试访问是否正常

(4)在tomcat2上做相同的配置

2.配置前端nginx服务器

(1)安装nginx程序(略)

(2)在nginx的配置文件conf/nginx.conf中添加upstream段,并设置tomcat1和tomcat2为上游服务器地址

初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第3张图片

(3)由于要实现动静分离,所以在安装目录下的web目录中提供一个主页作为静态页面

(4)所有以.jsp或者.do结尾的请求都发往上游服务器,由于上游服务器的默认虚拟主机不是www.ark.com,所以要使用proxy_set_header配置项,启用该配置项后,nginx再向上游服务器传递请求时就会带上请求首部,至此操作完成。

(5)此时请求www.ark.com时,静态内容会由nginx自身响应

初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第4张图片

(6)而动态内容请求会以轮询的方式传递到2个tomcat服务器上

初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第5张图片

 初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第6张图片

(7)如果要实现会话绑定,只需要在upstream配置段启用ip_hash选项,来自同一IP的请求就会始终被发往一个tomcat服务器

四、配置apache作为反代服务器

apache服务器实现动静分离有一定的困难,但相对于nginx他又可以和tomcat之间以效率更高的ajp协议进行通讯,具体采用哪种方法根据业务需求选择,继续使用上个实验的环境

1.配置apache负载均衡

(1)关闭前端服务器的nginx服务,安装apache服务(略)

(2)找到conf/httpd.conf配置文件注销根目录

初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第7张图片

(3)在conf.d目录下创建一个vhosts.conf配置文件,供虚拟主机使用,在配置文件中首先定义一个集群,将所有的请求都发给后端服务器,关键要开启ProxPreserveHost选项,该选项可以将用户请求的主机名传递至后端,类似nginx中的proxy_set_header,至此操作完成

初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第8张图片

(4)在使用IP地址(172.16.10.10)请求时,得到的是tomcat主页

初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第9张图片

(5)而动态内容请求会以轮询的方式传递到2个tomcat服务器上

初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第10张图片

初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第11张图片 

(6)如果要使用ajp协议,无非是将proxy中的http协议与端口换成ajp协议和对应的端口号

12.png

2.apache会话绑定

(1)首先在tomcat服务器的Engine上设置jvmroute(此处以tomcat1为例)

初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第12张图片

(2)然后再到apache服务器的proxy配置段将设置的jvmroute名称填写进route选项,并开启stickysession选项,重启tomcat和apache服务器,会话已实现绑定,马哥视频中http协议需要添加set-cookie配置项才能实现session绑定,在测试中发现不添加该配置项也可以实现

14.png

(3)使用ajp协议也只需要将apache服务器上的http协议改为ajp协议即可

15.png

补充说明

apache启用负载均衡功能是通过proxy_balancer_module子模块实现的

16.png

该模块有一个内置的管理界面,可以在线管理后端的负载策略

初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第13张图片

只需要在VirtualHost段中增加一个Location即可,且不要将对该Location的请求传递到后端

初识TomCat之4——TomCat负载均衡及基于IP的Session sticky_第14张图片