提到负载均衡,基本任何一个访问大点的网站都会用到,负载均衡的意义就不说了。现在的负载均衡无非是两种实现,一种是TCP层的负载均衡,一种是HTTP层的负载均衡,TCP四层负载均衡比HTTP 七层负载均衡性能强N倍,但是它运行在TCP层自然没办法对HTTP请求进行匹配、转发等操作,还有一个缺点是,TCP负载均衡的后端可能没法直接拿到HTTP请求的源IP。
市面上四层负载均衡有LVS,七层负载均衡有Haproxy、Nginx,目前用的最多的就是这三种了。
一开始我们也用Haproxy,后来发现,qps 到几万的时候会把Haproxy 机器的单核CPU打满,造成访问延迟很大,这是因为Haproxy 是单核驱动的,所以我们放弃Haproxy了。
剩下LVS 和 Nginx了, LVS具有极高的转发性能,而Nginx也是性能极高的Web服务器,如果我们只用LVS,就没法对HTTP请求做转发处理,如果只用Nginx,频繁修改Nginx配置 即使是reload在大流量下也可能会影响请求的正常处理。所以我们一起用了,即:
请求 —> 网络 —> LVS集群 —> Nginx 集群 —> APP
来看一下用什么LVS的什么模式比较好,我了解的人一般用DR 和 NAT两种模式:
DR和NAT都不够好,我觉得最好的是FULLNAT模式,配合OSPF,就组成了LVS+OSPF+FULLNAT集群,棒死了。
DR模式性能是最好的,LVS改写了目的MAC地址,直接从二层转发到后端,三层的目的IP地址还是VIP,所以为了能够正常工作,要在lo上配置VIP。而且,因为LVS机器和后端机器是