nginx反向代理做负载均衡以及使用redis实现session共享配置详解

简介: nginx反向代理做负载均衡以及使用redis实现session共享配置详解

1.为什么要用nginx做负载均衡?


   首先我们要知道用单机tomcat做的网站,比较理想的状态下能够承受的并发访问在150到200,


按照并发访问量占总用户数的5%到10%技术,单点tomcat的用户人数在1500到4000左右。这样显


然是不够的,为了解决这个问题我们就可以采用负载均衡的方法。


1.1为什么采用nginx?


   成本低,不同于硬负载,成本基本为0。


   nginx能够支持高达50000个并发连接数的响应


2.什么是反向代理?反向代理与正向代理的区别


这里不多赘述了,比较简单,大家可以参考文章:


https://blog.csdn.net/m13666368773/article/details/8060481

3.nginx如何实现反向代理?


3.1正确安装nginx,比较简单,不做过多赘述,下面是正确安装后的目录结构


微信图片_20221110170039.png

访问localhost:80,可以看到如下界面:

微信图片_20221110170119.png

3.2 进行反向代理配置


     在conf目录中找到nginx.conf文件。用记事本打开,可以看到如下配置:

微信图片_20221110170143.png

  我们之所有直接通过localhost:80能访问到页面就是因为这段配置


 很明显listen代表的是nginx监听的端口,server_name代表ip或者域名,location / {..}这段配


置代表默认主页,最后一段配置代表的是错误页面。


   然后介绍下反向代理的配置(以配置tomcat的反向代理为例),如下:

20180705003040357.png

配置完成后我们会发现,现在直接访问localhost:80时显示的不是之前的页面了,而是tomcat的主


页,这样我们就完成了反向代理,当用户访问时,我们通过nginx从tomcat取得数据并返回给用户,


这就是通过nginx完成反向代理。


4.怎么用nginx实现负载均衡


如果理解了反向代理的配置,这个配置就很简单了。具体配置如下:

微信图片_20221110170250.png

可以看到其他的配置都没有变,只不过在之前反向代理的列表中多加了一个tomcat的访问路径。

在测试的时候发现nginx服务器一直无法启动,然后在错误日志中查了下发现:

微信图片_20221110170320.png


//

实际上上面的配置  weigth后应该有个等号,修改后如下:

微信图片_20221110170340.png

这样一来,每当客户访问localhost:80(nginx服务器时),nginx服务器会随机将请求分发给列表中的


tomcat进行处理,这样我们就完成了对基于nginx负载均衡的配置


5.但是完成负载均衡后,问题又来了,session怎么办?我们总不能每分配


一次服务器就让用户登陆一次吧?这个就是session共享问题

其实解决session共享问题的方案很多,我这里只给出一种,就是使用redis实现session共享,核心思想就是:


将每个tomcat独立管理的session统一存储到redis中管理.大致原理图如下:

微信图片_20221110170401.png

骤如下:

1.下载nginx+tomcat集群+redis实现session共享工具包,下载地址

https://github.com/jcoleman/tomcat-redis-session-manager/downloads

2.其他需要的依赖

微信图片_20221110170431.png

将以上四个包copy到tomcat的lib目录下(集群中的所有Tomcat都需要有这四个jar)

3.在tomcat/conf/context.xml文件中添加配置(集群中的所有Tomcat都需要配置)


注意:

1.按照如上配置,使用redis数据库,放入session中的对象必须要实现java.io.Serializable接口,使用memcache的可以不用实现Serializable接口

原因是:因为tomcat里使用的将session放置redis使用的工具类,是使用的jdk序列化模式存储的,这一点也是很容易理解的,session.setAttribute(String key, Object value),存储Object类型

object放入redis中又要能取出来,只能是序列化进行存储了,然后取出的时候进行反序列化。

所以我们在session中存储的任何对象,都必须实现序列化接口。


2.按照如上配置,使用redis做session存储空间时,web应用的session-time的时间单位会变成[秒],而不是原本的[分]

原因是:因为tomcat里使用的将session放置redis使用的工具类,在存储时为对tomcat容器时间做转换,

在redis中设置过期时间是使用秒作为单位的,有个命令叫expire可以设置redis键值过期时间,所以在context.xml配置文件中我们需要制定session过期时间(默认是60秒,配成1800即30分钟),这一点很重要。



相关文章
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
1064 25
|
NoSQL 安全 Linux
设置Redis在CentOS7上的自启动配置
这些步骤总结了在CentOS 7系统上设置Redis服务自启动的过程。这些命令提供了一个直接且明了的方式,确保Redis作为关键组件在系统启动时能自动运行,保障了依赖于Redis服务的应用的稳定性和可用性。
969 9
|
弹性计算 负载均衡 网络协议
配置SLB监听器
配置SLB监听器
1012 63
|
域名解析 弹性计算 监控
slb测试基本配置检查
slb测试基本配置检查
491 60
|
NoSQL Ubuntu 网络安全
在 Ubuntu 20.04 上安装和配置 Redis
在 Ubuntu 20.04 上安装和配置 Redis 的步骤如下:首先更新系统包,然后通过 `apt` 安装 Redis。安装后,启用并启动 Redis 服务,检查其运行状态。可选配置包括修改绑定 IP、端口等,并确保防火墙设置允许外部访问。最后,使用 `redis-cli` 测试 Redis 功能,如设置和获取键值对。
787 1
|
存储 监控 NoSQL
NoSQL与Redis配置与优化
通过合理配置和优化Redis,可以显著提高其性能和可靠性。选择合适的数据结构、优化内存使用、合理设置持久化策略、使用Pipeline批量执行命令、以及采用分布式集群方案,都是提升Redis性能的重要手段。同时,定期监控和维护Redis实例,及时调整配置,能够确保系统的稳定运行。希望本文对您在Redis的配置与优化方面有所帮助。
325 23
|
存储 负载均衡 NoSQL
搭建高可用及负载均衡的Redis
通过本文介绍的高可用及负载均衡Redis架构,可以有效提升Redis服务的可靠性和性能。主从复制、哨兵模式、Redis集群以及负载均衡技术的结合,使得Redis系统在应对高并发和数据一致性方面表现出色。这些配置和技术不仅适用于小型应用,也能够支持大规模企业级应用的需求。希望本文能够为您的Redis部署提供实用指导和参考。
1097 9
|
存储 监控 NoSQL
NoSQL与Redis配置与优化
通过合理配置和优化Redis,可以显著提高其性能和可靠性。选择合适的数据结构、优化内存使用、合理设置持久化策略、使用Pipeline批量执行命令、以及采用分布式集群方案,都是提升Redis性能的重要手段。
349 7
|
弹性计算 负载均衡 监控
slb配置健康检查
slb配置健康检查
543 5
|
监控 负载均衡 容灾
slb测试配置
slb测试配置
549 5