nginx+tomcat配置负载均衡

1,前期准备

两个tomcat,nginx,一个测试项目

nginx+tomcat配置负载均衡_第1张图片

修改配置文件,能同时运行两个tomcat

修改server.xml





为了区分两个tomcat,修改对应的启动文件startup,bat

在第一行添加

然后分别启动tomcat

nginx+tomcat配置负载均衡_第2张图片

分别访问测试项目

nginx+tomcat配置负载均衡_第3张图片

nginx+tomcat配置负载均衡_第4张图片

2 配置nginx

修改配置文件,将tomcat的地址给添加进去

nginx+tomcat配置负载均衡_第5张图片

修改nginx的监听端口(默认为80)


有的电脑开启了IIS的服务,80端口被占用

nginx+tomcat配置负载均衡_第6张图片

nginx+tomcat配置负载均衡_第7张图片

运行nginx.exe,一个窗口一闪而过

window下可以直接查看进程


然后在浏览器中输入 http://localhost:8080/nginxdemo/

nginx+tomcat配置负载均衡_第8张图片

刷新可能会改变

nginx+tomcat配置负载均衡_第9张图片

至此,一个简单的负载均衡配置完成

3 nginx配置描述

  1)轮询(默认),每个web请求按时间顺序分配到不同的服务器


2)权重(设置轮询比率,用于后端服务器性能不均的情况,默认为1)

访问比率tomcat2:tomcat1为2:1,其它规则和轮询一致

3)ip_hash  

 使用负载均衡时需要注意session丢失的问题,可以使用ip_hash,使同一客户端连接进入到同一个服务器中,当服务器宕机时,自动跳转到其它服务器,

nginx+tomcat配置负载均衡_第10张图片

4)集群/分布式下的session处理策略

在搭建完分布式环境后,如果不做任何处理的话,会出现用户未登录的情况,因为假设有两台服务器A,B,nginx将用户请求发送给服务器A,A会围棋创建session,当用户再次请求时,若nginx将请求发送给服务器B,则此时会出现未登录的情况,所以必须考虑到session共享的问题

  解决方法1:将用户请求和服务器绑定在一起,比如直接设置ip_hash

 优点:简单,不需要对session做人恶化处理

  缺点:负载不均衡了,且缺乏容错性,如果服务器宕机之后,session会丢失

解决方法2:在所有服务器上都保存用户的session信息,当任何服务器上session变化时,该节点会把session内容序列化,广播给其它所有节点

优点:各个服务器的session能实时响应

缺点:实现方式有限,必须只能在同一种组件之间实现,比如用tomcat,其它必须全部用tomcat

解决方法3:修改tomcat的session存储机制,使之能把session序列化,存放到memcached (Memcached 是一套高性能的、分布式内存对象缓存系统。)中

使用redis+tomcat+nginx实现session共享

第一步:下载插件tomcat-cluster-redis-session-manager-2.0.2.jar

下载地址:https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/tag/2.0.2

解压之后,按照readMe的步骤配置

nginx+tomcat配置负载均衡_第11张图片

  1)将lib中的jar包复制到tomcat/lib目录下

nginx+tomcat配置负载均衡_第12张图片

2)配置环境变量

nginx+tomcat配置负载均衡_第13张图片

3)将conf下的配置文件复制到tomcat/conf下

4)修改tomcat/conf/content.xml,增添配置


5)修改session的过期时间 (tomcat/conf/web.xml),默认为30分钟


屏蔽掉nginx的ip_hash配置

nginx+tomcat配置负载均衡_第14张图片

运行测试程序,注意,此时需要启动redis,否则会报错

nginx+tomcat配置负载均衡_第15张图片

此时会发现,无论网页怎么刷新,sessionid都是固定的

nginx+tomcat配置负载均衡_第16张图片


nginx+tomcat配置负载均衡_第17张图片

至此,session共享已经完成

使用Redis实现session共享的好处就是,把session管理放在redis中,如果服务器重启或挂机,sessionId保存在redis中,下次重启后一样生效,避免sessionId失效,同样redis最好也做集群,避免redis重启或挂机。

你可能感兴趣的:(负载均衡,分布式)