DNS负载均衡最早的负载均衡技术,利用域名解析实现负载均衡,在DNS服务器,配置多个A记录,这些A记录对应的服务器构成集群。大型网站总是部分使用DNS解析,作为第一级负载均衡。如下图: 优点
缺点
实践建议 将DNS作为第一级负载均衡,A记录对应着内部负载均衡的IP地址,通过内部负载均衡将请求分发到真实的Web服务器上。一般用于互联网公司,复杂的业务系统不合适使用。如下图: HTTP负载均衡Nginx是一个高性能的HTTP和反向代理服务器, 通过其本身的Upstream模块,我们可以将其作为7层负载均衡服务器使用,其支持的负载均衡策略如下: 1,轮询:将请求依次轮询发给每个服务器 2,最少链接:将请求发送给持有最少活动链接的服务器 3,IP哈希:通过哈希函数决定请求发送给哪个服务器 4,权重:服务器的权重越高,处理请求的概率越大 系统整体结构如下:
一. Nginx/ Haproxy比较 早期版本Nginx只能在HTTP层负载,不支持TCP,经过1.9和1.11两个大版本的大跃进般开发,目前在功能和特性上,已经大幅超越haproxy ,当然haproxy也有自己的长处。 比如: stream module:同时支持TCP和UDP,也支持haproxy的proxy protocol。 stream module的TLS卸载:可以把TLS在nginx卸载掉,后端只需要跑http或者明文tcp流。得益于nginx的多进程和对TLS硬件加速卡的支持,对于大流量网站这是非常重要的功能。 SNI Preread:基于SNI协议的host头做负载均衡。在一些特殊场合很有用处,比如严格管理私钥的场景,也可以在不改动现有架构的场景下,由nginx统一调度流量。 IP Transparency:对这个功能没实际测试过。看官方文档应该类似SNAT和DNAT的功能。相比Linux的NAT功能,nginx能做的更多,比如负载均衡、url路由等等。 TLS:双证书、HTTP/2、TLS v1.3(1.13版) 缓存模块的切片模块 而且,nginx还有几个大杀器:map模块、lua、js和shared memory。 1)HAProxy对于后端服务器一直在做健康检测(就算请求没过来的时候也会做健康检查): 一. Nginx / LVS 转发策略 LVS采用的是同步请求转发的策略。同步转发是在lvs服务器接收到请求之后,立即redirect到一个后端服务器,由客户端直接和后端服务器建立连接。 Nginx采用的是同步请求转发的策略。异步转发是nginx在保持客户端连接的同时,发起一个相同内容的新请求到后端,等后端返回结果后,由nginx返回给客户端。 在其它的均衡器(lvs/haproxy/apache等)里,每个请求都是只有一次机会的,假如用 户发起一个请求,结果该请求到达后台服务器后,后台服务器刚好挂掉了,那么这个请求就失败了;而nginx因为是异步的,所以这个请求可以重新发往下一个后台,下一个 后台返回了正常的数据,于是这个请求就能成功了。 |
|