Nginx实现负载均衡以及多服务器之间的session共享

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 https://blog.csdn.net/weixin_43863007/article/details/88745257

前面一篇文章是介绍了Nginx的反向代理原理,这里要说的负载均衡就是利用反向代理的原理来实现的,也可以点击了解:Nginx反向代理实现原理

1.什么是负载均衡:

  • 当一台服务器的单位时间内的访问量越大时,服务器压力就越大,达到超过自身承受能力时,服务器就会崩溃,为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器的压力
  • 服务器可以有很多,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器,如此一来,用户每次访问都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况

2.实现负载均衡的几种常用方式(配置在nginx目录下的—conf—nginx.conf中):

2.1 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器有一个down掉,会自动剔除,代码如下:
upstream backserver {
    server 192.168.1.14;
    server 192.168.1.15;
}
2.2 配置权重(weight):指定轮询的几率,weight和访问比率成正比,权重越高,被访问概率越大,使用 weight=3 配置,代码如下:
upstream backserver {
    server 192.168.0.14 weight=3;
    server 192.168.0.15 weight=7;
}
2.3 配置轮询和权重都有一个严重的问题,就是session,如果用户访问的是不同的服务器,那么session也会不一样,这样就导致session无法共享,那么可以配置ip_hash,这样每个访客固定访问一个后端服务器,就解决了session的共享问题
2.4 配置ip_hash(weight):配置ip_hash,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过hash算法,自动定位到该服务器,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,就解决了session的共享问题,代码如下:
upstream backserver {
    ip_hash;
    server 192.168.0.14:8088;
    server 192.168.0.15:8080;
}
2.4 tomcat与redis集成实现session共享:
  1. 使用第三方插件实现:https://github.com/ran-jit/tomcat-cluster-redis-session-manager
  2. 将jar拷到tomcat的lib文件夹内
  3. 添加环境变量:catalina.base=“TOMCAT_LOCATION”
  4. 将redis-data-cache.properties配置文件拷到tomcat的conf文件夹内
  5. 修改tomcat的context.xml,添加以下内容
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager" />
  1. OK(session的有效期默认为30分钟,在conf目录下的web.xml里修改)

猜你喜欢

转载自blog.csdn.net/weixin_43863007/article/details/88745257
今日推荐