高可用笔记(3)nginx+tomcat+redis

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 在《高可用笔记(1)nginx》中已经使用过nginx反向代理tomcat的http服务,本文将介绍如何用nginx+tomcat+redis的组合实现负载均衡。

在《高可用笔记(1)nginx》中已经使用过nginx反向代理tomcat的http服务,本文将介绍如何用nginx+tomcat+redis的组合实现负载均衡。

首先来看负载均衡需要解决的2个问题

  • 多个tomcat的部署的web应用怎么实现统一出口?
    答:用nginx代理多个tomcat,可以根据实际情况设置不同的权重weight。
  • 多个tomcat的session共享问题怎么解决?
    答:将session的数据保存到同一个redis数据库中。将会用到tomcat-redis-session-manager插件。

准备测试环境

还是这三台测试主机

  • host1 192.168.30.1 (redis/master, nginx, tomcat)
  • host2 192.168.30.2 (redis/slave, tomcat)
  • host3 192.168.30.3 (redis/slave, tomcat)

安装tomcat

经过前面两个笔记,host1的redis、nginx和tomcat均已安装好,host2和host3的redis也已经安装好。
还需要在host2和host3安装tomcat:

$ yum install tomcat -y
$ systemctl enable tomcat

部署tomcat测试项目

拷贝host1的hellonginx项目到host2和host3的相应目录,稍作修改:

$ scp -r root@192.168.30.1:/var/lib/tomcat/webapps/hellonginx /var/lib/tomcat/webapps/
……
#将index.html的“host1”分别改为“host2”和“host3”
……
$ systemctl start tomcat

nginx代理多个tomcat

修改host1的配置文件/etc/nginx/conf.d/http_proxy.conf:

upstream tomcat_server {
    server 192.168.30.1:8080 weight=1; #weight是权重
    server 192.168.30.2:8080 weight=1;
    server 192.168.30.3:8080 weight=1;
}

server {
    listen       80;
    server_name  localhost;


    location /hellonginx{
        proxy_pass http://tomcat_server/hellonginx;
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host $http_host;

    }
}
$ nginx -s reload

用浏览器打开http://192.168.30.1/hellonginx
第一次:
screenshot

第二次:
screenshot

第三次:
screenshot

第四次:
screenshot

......

如果host2宕机了,那么第一次是host1,第二次是host3,第三次又是host1。
显然host1是不能宕机的,整个环境的高可用还必须借助keepalived+vip,后面的笔记会讲到。

tomcat的session共享

redis的高可用在上一个笔记中已经部署好了,在这里也仅仅是保存session的作用,就不在赘述了。
那么如何将tomcat的session保存到redis中呢?
该tomcat-redis-session-manager出场了。

准备几个jar包:

  • commons-pool2-2.4.2.jar
  • jedis-2.9.0.jar
  • tomcat-redis-session-manager-2.0.0.jar

将三个jar包分别放入三台主机的/usr/share/tomcat/lib/目录下

修改三个tomcat的配置文件/etc/tomcat/context.xml

……
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/>
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
    maxInactiveInterval="60"
    sentinelMaster="mymaster"
    sentinels="192.168.30.1:7000,192.168.30.2:7000,192.168.30.3:7000"/>
……

重启三个tomcat,完成!

注意:
这里使用的tomcat-redis-session-manager是v2.0.0,配合的另外两个jar是commons-pool2-2.4.2和jedis-2.9.0的。这个版本支持redis-sentinels配置。
小于v2.0.0版本的tomcat-redis-session-manager需要配合commons-pool-1.x和jedis-2.1.0。并且不支持redis-sentinels,只能配置单个redis的host和ip。

附件是上面三个jar包。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
20天前
|
关系型数据库 MySQL 应用服务中间件
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
76 7
|
1月前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
150 26
|
5月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
165 0
|
2月前
|
前端开发 Java 应用服务中间件
Tomcat和Nginx的资源路径映射
Tomcat和Nginx的资源路径映射
72 1
|
3月前
|
网络协议 应用服务中间件 nginx
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
这篇文章讨论了在使用nginx-rtmp-module进行RTMP推流时遇到的“Server error: Already publishing”错误,分析了错误原因,并提供了详细的解决办法,包括修改nginx配置文件和终止异常的TCP连接。
282 0
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
|
4月前
|
JavaScript Java 应用服务中间件
|
4月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
3月前
|
NoSQL 关系型数据库 MySQL
Tomcat、MySQL、Redis最大支持说明
综上所述,Tomcat、MySQL、Redis的并发处理能力均非固定值,而是通过合理的配置与优化策略,结合系统硬件资源,共同决定了它们在实际应用中的表现。开发者应根据应用的具体需求和资源条件,对这些组件进行细致的调优,以达到最佳性能表现。
47 0
|
3月前
|
NoSQL 网络协议 应用服务中间件
redis,memcached,nginx网络组件
redis,memcached,nginx网络组件
30 0
|
5月前
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
113 1