腾讯云公网负载均衡技术实现详解 (4)

Upstream为nginx负载均衡的主要模块。它提供了一个简单的方法实现在轮训和客户端ip之间的后端服务器负载均衡,并且可以对后端服务器进行健康检查。upstream并不处理请求,而是通过请求后端服务器得到用户的请求内容。在转发给后端时,默认是轮询,也可以是ip_hash。

nginx健康检查

当Nginx在检测到后端服务器故障后,nginx依然会把请求转向该服务器,当nginx发 现timeout或者refused后,会把改请求会分发到upstream的其它节点,直到获得正常数据后,nginx才会把数据返回给用户,上面配置文件中max_fails和fail_timeout字段就是和健康检查相关的。

物理网络

7层物理网络负载均衡实现方式和vpc网络唯一的不同就是数据包封装技术不同,因为物理网络不需要进行gre封装,直接IP隧道即可实现和子机通讯(如下图)。其他就没有必要再详细说了,和vpc基本保持一致。

0?wx_fmt=jpeg

请求重定向

目前腾讯云应用型LB支持请求重定向,域名端口 + 规则维度进行重定向。给用户直接的感受就是当你使用url-a在浏览器上进行访问时,请求会被自动重定向到url-b。这里底层的实现也是基于nginx的rewrite操作进行处理。当用户设置了重定向操作之后,会在nginx下发如下配置

0?wx_fmt=jpeg

会话保持实现

Cookie植入

在Cookie插入模式下,CLB将负责插入cookie,后端服务器无需作出任何修改。当客户进行第一次请求时,客户HTTP请求(不带cookie)进入CLB, CLB根据负载平衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器进行HTTP回复(不带cookie)被发回CLB,然后CLB插入cookie,将HTTP回复(带cookie)返回到客户端。当客户请求再次发生时,客户HTTP请求(带有上次CLB插入的cookie)进入CLB,然后CLB读出cookie里的会话保持数值,将HTTP请求(带有与上面同样的cookie)发到指定的服务器,然后后端服务器进行请求回复,由于服务器并不写入cookie,HTTP回复将不带有cookie,恢复流量再次经过进入CLB时,CLB再次写入更新后的会话保持cookie。

实践一下看看,可以看到第一次访问时返回给客户端的cookies值

0?wx_fmt=jpeg

0?wx_fmt=jpeg

Cookie重写

表示负载均衡系统会根据用户自定义cookie名称来分配和管理对客户端进行的cookie植入操作,便于用户识别和区分自定义的cookie名称,从而有选择的针对后端应用服务器上的不同应用设定会话保持规则,用户在进行配置时需要指定相应的cookie名称。目前腾讯云不支持这种类型(阿里云支持)。

服务器如何分辨请求类型

由于CLB代理了HTTPS的SSL加解密,在后端CVM看来,所有7层请求,都是http请求,客户不便于分辨是http,还是https来源。CLB目前已全局生效,在http header中植入X-Client-Proto:

X-Client-Proto: http (client请求为http请求)

X-Client-Proto: https (client请求为https请求)

后端nginx/apache可根据该信息判断来源。

服务器如何获取来访者真实IP

针对 7 层(HTTP协议)服务,负载均衡通过 Http Header:X-Real-IP获取来访者真实 IP,该功能已经默认开启,无需配置,也不能修改。针对 4层(TCP协议)服务可以直接获取,无需额外配置。

健康检查请求类型

目前默认是GET方式进行请求,后续会改为默认使用HEAD,可选GET的请求方式。修改后的健康检查使用HTTP/1.1协议 增加了host字段(host字段可配置)。HEAD和GET请求方式的区别如下: HEAD: 只请求页面的首部 GET: 请求指定的页面信息,并返回实体主体。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzwgfj.html