nginx+tomcat+docker部署javaweb项目时遇到的问题

背景

公司打算在周年庆的时候举办一次线上知识竞赛,行政部门的同事要求系统能够满足1500人同时在线访问(1500的并发量),只提供了一台服务器(内存和硬盘足够大,但是服务器数量只有一台)。

方案

根据公司提供的服务器,最开始为了省事打算找一个开源的k8s云原生平台(好雨云,rancher)部署在服务器上,然后将服务以集群部署在云原生平台上并实现负载。可能是只有一个节点的原因,在云原生平台创建k8s的时候一直失败,因为时间关系,只好放弃这个方案。改用nginx+tomcat+docker来部署。tomcat部署6个节点,nginx部署一个节点,nginx负载均衡代理到6个tomcat节点。部署过程中遇到了几个问题,记录总结一下。

  1. 端口映射问题
    使用docker部署nginx,由于nginx端口默认监听的是80,而服务器上80端口已经被占用,所以就用9999端口去映射容器内的80端口。
    知识竞赛系统在用户登录后5分钟内没有操作时,session就会过期,系统会重定向到/login的登录页。
    比如我登录之后首页地址是192.168.144.154:9999/index,由于容器内nginx端口为80,重定向后的地址就变成了192.168.144.154:80/login导致系统无法正常访问,最后把容器内nginx端口也改完9999后问题解决。
  2. 负载均衡的问题,一开始使用nginx轮询的负载均衡策略,但是在部署好之后,访问时每次登录成功之后立马又被重定向到了登录页,排查后发现登录调用被代理到了tomcat1上,而进入首页的接口被代理到了别的tomcat上了,而其他tomcat上并没有登录过,所以就重定向到了登录页。所以需要确保同一个用户每次的请求都能被代理到同一个tomcat节点上,将策略改为iphash的就可以了。
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐