咸糖记录编程的地方

Do what you love and the money will follow.

目录
负载均衡 LVS 持久性连接
/  

负载均衡 LVS 持久性连接 有更新!

从用户端来解释,就是当一个用户第一次访问被负载均衡代理到后端服务器A并登录后,服务器A上保留了用户的登录信息;当用户再次发送请求时,根据负载均衡策略可能被代理到后端不同的服务器,例如服务器B,由于这台服务器B没有用户的登录信息,所以导致用户需要重新登录。这对用户来说是不可忍受的。所以,在实施负载均衡的时候,我们必须考虑Session的问题。

问题出在哪里? 如何处理?

  • 会话保持(案例:Nginx、Haproxy)

  • 会话复制(案例:Tomcat)

  • 会话共享(案例:Memcached、Redis)

我们这里主要讲的是 会话保持的方式,这个方式也主要是从负载均衡这一层进行解决。

首先讲两个十分通用的方式吧!

会话保持

IP_HASH

每个请求按照访问的ip的Hash结果进行分配,这样每个访客可以访问同一个后端服务器,达到保持Session的方法。

upstream bakend {  
 ip_hash;  
 server192.168.0.11:80;  
 server192.168.0.12:80;  
 }

Cookie 识别

也就是Haproxy在用户第一次访问的后在用户浏览器插入了一个Cookie,用户下一次访问的时候浏览器就会带上这个Cookie给Haproxy,Haproxy进行识别

配置指令:cookie SESSION_COOKIE insert indirect nocache

配置例子如下:

cookie SERVERID insert indirect nocache  
server web01 192.168.56.11:8080 check cookie web01  
server web02 192.168.56.12:8080 check cookie web02

其次就是一个三方模块 nginx-sticky-module

注意:cookie需要浏览器支持,且有时候会泄露数据

nginx-sticky-module

工作原理:

  • Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
  1. 客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。

  2. 后端服务器处理完请求,将响应数据返回给nginx。

  3. 此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值

  4. 客户端接收请求,并保存带route的cookie。

  5. 当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。

1562398604770

无论如何刷新你都会发现这个 route 不会改变。


标题:负载均衡 LVS 持久性连接
作者:xiantang
地址:http://xiantang.info/articles/2019/07/06/1562402063056.html

评论