高可用笔记(3)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包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值