目录

1.写在前面

2.实验一:实现nginx的虚拟服务器功能

3.实验二:解决Nginx链接跳转问题

4.实验三:nginx给两台tomcat的RealServer做负载均衡,返回Session不同并解决Session一致性的问题


1.写在前面

        接下来拿着Nginx做几个比较常见的实验。

2.实验一:实现nginx的虚拟服务器功能

        在做实验前,我们需要提前修改本机windows中host文件,设置ip与域名映射关系。

1.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战

        接下来,我们直接在linux服务器中修改nginx.conf文件即可:

1.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战

        结果展示:

1.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战

1.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战

3.实验二:解决Nginx链接跳转问题

        我们通过nginx反向代理访问www.baidu.com,如果我们通过http来访问,则会发生页面跳转问题。我们可以看到:

    • 现象
      • nginx的location配置1.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
      • 访问www.wymnode01.com/oxox,发现发生了页面跳转,跳转到www.baidu.com1.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
    • 结果分析:由于Client通过反响代理和http访问百度,请求也确实经过了nginx到达了百度,但是由于现在的大网站都是https的协议。百度服务器收到http请求后,会给Client返回一个跳转连接,那么Client通过跳转连接则会和百度服务器直接建立连接而跳过nginx。所以我们要避免这种情况
    • 问题解决:在114行将http改成https就可以了1.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战

4.实验三:nginx给两台tomcat的RealServer做负载均衡,返回Session不同并解决Session一致性的问题

  • 问题描述:假设nginx后面RealServer集群(R1和R2)搭载tomcat,并有着用户登录和用户主页访问的功能,那么如果我们的Client先访问R1并登录获取了R1发送的Session,这时候连接断开,Client携带Session访问RealServer集群,但是nginx将这个请求负载给了R2,由于R2的Session和R1的Session不一样,就会引发登录重定向,要求用户重新登陆。这样的情况和京东淘宝的登陆情况是不同的,因为两个网站都没有需要重复登陆的问题,在解决问题之前我们先将问题复现
  • 问题复现
    • 将R1与R2(node02和node03)装上,并进入tomcat的主页文件进行修改,将之前的主页index.jsp备份成为index.jsp.bak,对主页进行如下修改
      • node021.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
      • node031.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
    •  在node01也就是nginx.conf中给R1和R2配置负载均衡,并监听8080端口,防火墙也放开8080端口
      • 添加upstream
      • 1.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
      • 添加location1.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
    • 结果演示:两者session不同
      • 负载给node021.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
      • 刷新后负载给node031.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
    • 问题解决session不同的问题我们可以在RealServer集群后加一台服务器(S1),让RealServer集群将Session统一写到S1中,即使负载均衡给了不同的RealServer,那么这台RealServer只需要查询S1的Session表中是否有对应的Session,不需要和自己产生的Session进行匹配了。但是问题又会出现,这台S1会承载大量的RealServer的IO请求,如果S1是一台mysql,则会非常慢,因为IO速度成为了限制瓶颈(硬盘IO速度很慢)。我们可以使用Redis集群来解决这个问题,将IO速度提升为内存IO速度,从而提升了性能。我们这里先不用Redis,先用memcached来实现,后续引出Redis。因为session不一致问题不是出现在nginx,所以我们只需要将缓存服务器搭建在tomcat的集群之外的服务器就可以了,这里我们选择搭建在nginx服务器上
      • 解决步骤:
        • 安装memcahed:这里下图的蓝色IP就是nginx服务器的IP,装到那一台换即可1.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
      • 启动memcached,如上图红色指令
      • 修改RealServer集群中tomcat文件夹下的context.xml文件,让tomcat将Session写到memcached服务器中,只需要在Context字段下添加Manager字段1.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
      • 给RealServer集群添加响应的jar包,添加到tomact的lib目录下,也就是Mananger字段中的所提到的jar包
        • 1.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
      • 结果演示
        • node021.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
        • node031.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
        • 遗留问题:这里应该刷新过后session是不变的,但是还是发生了变化,没有导入jar包会报404错误,导入jar包后不会出现404错误但是出现了session变化问题,具体原因还有待商榷,初步判定应该是没有导入正确版本的jar包。
          • 遗留问题解决:
            • ​​​​​​​1.首先考虑到的是jar包版本问题,重新翻阅博客找到了新的jar包,但是还是出现了session变化问题。
            • 2.后来考虑到了RealServer的集群时间,nginx的服务器时间以及客户端时间是否是一致的问题,因为如果客户端时间或者nginx时间比RealServer的时间早,那么RealServer会判定这个session已经过期了。就会发送新Session,那么就会出现session变化,但是发现nginx服务器的时间不会影响结果。但是还是要保证当前项目下服务器的时间一定要是一致的。
            • 3.之后怀疑是否是session本身存活时间过短,但是查看tomcat的server.xml发现session存活时间默认是30分钟,所以排除
            • 4.最终原因memcached的端口11211没有打开,最后发现是这个原因,也就明白了,因为session结果是从memcached中查询得到的,那么如果没有打开11211端口,RealServer就不能对memcached进行读写操作,那么一旦发生负载均衡出现Client拿着R1的Session去访问R2,RealServer不能访问memcached,只能自己生成新Session给Client。也就发生了即使配置了memcached,也会存在session不一致的情况
              • ​​​​​​​解决后结果演示
                • node021.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战​​​​​​​
                • 刷新后node031.7.3 linux和高并发-nginx集群和高并发-Nginx反向代理和负载均衡实战
        • 补充点:集群时间很重要,一个集群的机器的时间一定要设置成为一样的。不然session会出现过期的现象,这样服务器就会重新创建一个session,那又会出现之前的重复登陆问题了!!

 

相关文章:

  • 2021-06-19
  • 2021-10-29
  • 2022-12-23
  • 2022-02-01
  • 2021-06-06
  • 2021-07-01
猜你喜欢
  • 2021-06-14
  • 2021-09-07
  • 2022-12-23
  • 2021-07-27
  • 2021-11-14
  • 2021-06-28
  • 2021-10-07
相关资源
相似解决方案