程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

Tomcat+Nginx集群配置(负载均衡)

发布于2021-06-08 12:14     阅读(833)     评论(0)     点赞(13)     收藏(2)


简介

由于单台Tomcat的承载能力是有限的,当我们的业务系统用户量比较大,请求压力比较大时,单台Tomcat是扛不住的,这个时候,就需要搭建Tomcat的集群,而目前比较流程的做法就是通过Nginx来实现Tomcat集群的负载均衡。

环境准备

准备Tomcat

在服务器上, 安装两台tomcat, 然后分别改Tomcat服务器的端口号 :
修改tomcat/conf/server.xml(尽量吧所有都改成不相同的)

8005------>8015------->8025

8080------->8888-------->9999

8009-------->8019-------->8029

安装配置Nginx

查看这篇文章

在当前服务器上 , 安装Nginx , 然后再配置Nginx, 配置nginx.conf :

upstream serverpool{
    server localhost:8888;
    server localhost:9999;
} 
server {
    listen 99;
    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标记服务器永久停机了

weight权重

权重方式,在轮询策略的基础上指定轮询的几率。

upstream serverpool{
	server localhost:8888 weight=3;
	server localhost:9999 weight=1;
}

weight参数用于指定轮询几率,weight的默认值为1;weight的数值与访问比率成正比,比如8888服务器上的服务被访问的几率为9999服务器的三倍。

**注意:此策略比较适合服务器的硬件配置差别比较大的情况。 **

IP_HASH

指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。

upstream serverpool{
	ip_hash;
	server 192.168.192.133:8080;
	server 192.168.192.137:8080;
}

Session共享方案

在servlet_demo01 工程中 , 制作session.jsp页面,分别将工程存放在两台 tomcat 的**webapps/ **目录下:

<%@ page contentType="text/html;charset=UTF‐8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
TOMCAT ‐ 9999 :
<br/>
sessionID : <%= session.getId()%>
<br/>
<%
    Object loginUser = session.getAttribute("loginUser");
    if(loginUser != null && loginUser.toString().length()>0){
        out.println("session 有值, loginUser = " + loginUser);
    }else{
        session.setAttribute("loginUser","ITCAST");
        out.println("session 没有值");
    }
%>
</body>
</html>

通过nginx访问 , http://localhost:99/demo01/session.jsp ,访问到的两台Tomcat出现的sessionID是不一样的:

上述现象,则说明两台Tomcat的Session各是各的,并没有进行同步,这在集群环境下是存在问题的。

Session同步的配置如下:

  • 在Tomcat的**conf/server.xml **配置如下:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
  • 在Tomcat部署的应用程序 servlet_demo01 的web.xml 中加入如下配置 :
<distributable/>
  • 配置完毕后,重启两个Tomcat的服务

在这里插入图片描述
在这里插入图片描述
上述方案,适用于较小的集群环境(节点数不超过4个),如果集群的节点数比较多的话,通过这种广播的形式来完成Session的复制,会消耗大量的网络带宽,影响服务的性能。 (不建议采用)

SSO单点登录

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,也是用来解决集群环境Session共享的方案之一 。



所属网站分类: 技术文章 > 博客

作者:java小王子

链接:http://www.javaheidong.com/blog/article/219608/7cece5a9f4d1ab0d7c5c/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

13 0
收藏该文
已收藏

评论内容:(最多支持255个字符)