Tomcat服务器集群配置问题分析!集群的负载均衡和Session共享问题解决方案说明

258 阅读3分钟

这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战

基本概念

  • 由于单台Tomcat服务器的承载能力是有限的,当系统的用户量比较大,请求压力比较大时,单台Tomcat无法承载请求压力,此时需要搭建Tomcat集群
  • 通过反向代理服务器Nginx可以实现Tomcat服务器的负载均衡 在这里插入图片描述

环境准备

配置Tomcat集群

  • 在服务器上,安装多台Tomcat的服务器,然后通过server.xml来配置Tomcat服务器

配置Nginx

  • 在服务器上,安装Nginx反向代理服务器,然后通过nginx.conf来配置Nginx反向代理服务器:
upstream serverpool {
	server localhost:8888;
	server localhost:9999;
}

server {
	listen 6666;
	server_name localhost;

	# 后端服务器负载均衡
	location / {
		proxy_pass http://serverpool/;
	}
}

负载均衡

轮询

  • 轮询: 最基本的配置方法,是upstream模块默认的负载均衡策略. 每个请求会按照时间顺序逐一分配到不同的后端服务器
upstream serverpool {
	server localhost:8888;
	server localhost:9999;
}
  • 参数说明:
参数说明
fail_timeout失败超时时间
可以与max_fails结合使用
max_fails配置在fail_timeout数配置的时间内最大失败次数
如果在这个时间内,所有针对该服务的每次请求都失败,那么认为该服务器停机
fail_time服务器被认为停机的时间长度,默认为10s
backup标记该服务器为备用服务器
主服务器停止时,请求会被发送到备用服务器
down标记该服务器永久停机

权重

  • weiht权重: 在轮询策略的基础上指定轮询的机率
upstream serverpool {
	server localhost:8888 weight=3;
	server localhost:9999 weight=1;
}
  • weight参数 : 指定轮询的机率,默认值为1. weight参数的数值和访问机率成正比
  • weight权重策略适合硬件配置比较大的服务器

ip_hash

  • ip_hash: 指定基于客户端IP地址的分配方式进行负载均衡请求
    • 这个方法保证了客户端相同的请求一直发送到相同的服务器,这样可以保证session会话
    • 每个固定的客户端访问都固定访问同一个服务器,可以解决session不能跨服务器问题
upstream serverpool {
	ip_hash;
	server 192.168.6.33:8080;
	server 192.168.6.35:8080;
}

Session共享

  • Tomcat集群中,如果应用需要用户进行登录后操作,如果Tomcat做了负载均衡,请求被发送到不同的Tomcat服务器上时,此时访问系统就会出现问题
  • 为了解决Session共享问题,有以下几种方案:
    • ip_hash策略
    • Session复制
    • SSO单点登录

ip_hash策略

  • 使用ip_hash策略可以使得同一个用户发起的请求,都会通过Nginx, 将请求发送到同一台Tomcat服务器上,这样就不会引起Session共享问题

Session复制

  • Tomcatconf/server.xml中添加下列配置:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />
  • Tomcat部署的项目中的WEB-INF下的web.xml文件中添加如下配置:
<distribute />
  • 配置完成之后,重启Tomcat, 就完成了集群中各个Tomcat服务器之间的Session复制
  • 注意:
    • 这个Session复制方案,只适用于节点数比较小的集群环境,节点的数量不能超过4
    • 如果集群的节点数量较大时,使用这种广播的形式进行Session复制时,会消耗大量的网络带宽,影响服务性能

SSO单点登录

  • SSO单点登录 (Single Sign On) 是当前解决集群环境下Session共享的流行的解决方案之一
  • SSO定义在多个应用系统中,用户只要登录一次就可以访问所有相互信任的应用系统,用来解决集群环境中Session共享问题 在这里插入图片描述