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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
传统型负载均衡 CLB,每月750个小时 15LCU
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 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分钟),这一点很重要。



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
17天前
|
负载均衡 算法 搜索推荐
Nginx 常用的负载均衡算法
【10月更文挑战第17天】在实际应用中,我们需要根据具体的情况来选择合适的负载均衡算法。同时,还可以结合其他的优化措施,如服务器健康检查、动态调整权重等,来进一步提高负载均衡的效果和系统的稳定性。
108 59
|
29天前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
134 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
13天前
|
负载均衡 算法 应用服务中间件
Nginx 常用的负载均衡算法
【10月更文挑战第22天】不同的负载均衡算法各有特点和适用场景。在实际应用中,需要根据具体的业务需求、服务器性能和网络环境等因素来选择合适的算法。
20 3
|
17天前
|
负载均衡 监控 应用服务中间件
除了 Nginx,还有以下一些常见的负载均衡工具
【10月更文挑战第17天】这些负载均衡工具各有特点和优势,在不同的应用场景中发挥着重要作用。选择合适的负载均衡工具需要综合考虑性能、功能、稳定性、成本等因素。
|
27天前
|
负载均衡 应用服务中间件 nginx
Nginx的6大负载均衡策略及权重轮询手写配置
【10月更文挑战第9天】 Nginx是一款高性能的HTTP服务器和反向代理服务器,它在处理大量并发请求时表现出色。Nginx的负载均衡功能可以将请求分发到多个服务器,提高网站的吞吐量和可靠性。以下是Nginx支持的6大负载均衡策略:
114 7
|
24天前
|
负载均衡 算法 Java
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
尼恩,一位资深架构师,分享了关于负载均衡及其策略的深入解析,特别是基于权重的负载均衡策略。文章不仅介绍了Nginx的五大负载均衡策略,如轮询、加权轮询、IP哈希、最少连接数等,还提供了手写加权轮询算法的Java实现示例。通过这些内容,尼恩帮助读者系统化理解负载均衡技术,提升面试竞争力,实现技术上的“肌肉展示”。此外,他还提供了丰富的技术资料和面试指导,助力求职者在大厂面试中脱颖而出。
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
|
27天前
|
缓存 负载均衡 算法
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
Nginx 是一款高性能的 HTTP 和反向代理服务器,也是一个通用的 TCP/UDP 代理服务器,以及一个邮件代理服务器和通用的 HTTP 缓存服务器。
56 0
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
|
23天前
|
NoSQL Redis API
限流+共享session redis实现
【10月更文挑战第7天】
34 0
|
1月前
|
负载均衡 算法 Java
java中nginx负载均衡配置
java中nginx负载均衡配置
36 0
|
1月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
68 6
下一篇
无影云桌面