lvs、nginx、haproxy转发模式总结
lvs、nginx、haproxy是最常见的三种⾼可⽤性负载均衡软件。由于lvs和haproxy在⽬前的公司的现⽹环境中并未⽤到,虽然之前简单的了解和搭建过,现在也已经忘的差不多了,⽽及于nginx的负载均衡虽然公司在⽤,不过⼀配置⽂件都是ctrl+c、ctrl+v,对转发的理论性的东西也都忘的差不多了。隐约脑⼦⾥现在只有upstream、dr 、ip_hash这⼏个词了。现对三者的转发⽅式做下总结。
⼀、LVS转发模式
LVS是章⽂嵩博⼠写的⼀个⼯作于四层的⾼可能性软件。不像后两者⽀持七层转发,不过也正因为其简单,所以其是最稳定的。其共有三种IP负载均衡技术:VS/NAT(Virtual Server via Network Address Translation)、VS/TUN(Virtual Server via IP Tunneling)和VS/DR(Direct Routing),三者之间具体的⽐较见下表
⼆、nginx负载模式
nginx有五种负载算法模式,分别是:轮询、weight(权重)、ip_hash、fair、url_hash 。现逐⼀说明:
1. 轮询(默认): 每个请求按时间顺序逐⼀分配到不同的后端服务器,如果后端服务器down掉,能⾃动剔除。
2. weight :指定轮询⼏率,weight和访问⽐率成正⽐,⽤于后端服务器性能不均的情况。配置为:
1. upstream bakend {
2. server 192.168.0.14 weight=10;
3. server 192.168.0.15 weight=10;
4. }
3. ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问⼀个后端服务器,可以解决session的问题。配置为:
1. upstream bakend {
2. ip_hash;
3. server 192.168.0.14:88;
4. server 192.168.0.15:80;
5. }
4. fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配。
1. upstream backend {
2. server server1;
3. server server2;
4. fair;
5. }
5. url_hash:按访问url的hash结果来分配请求,使每个url定向到同⼀个后端服务器,后端服务器为缓存时⽐较有效。配置如:
1. upstream backend {
2. server squid1:3128;
3. server squid2:3128;
4. hash $request_uri;
5. hash_method crc32;
6. }
注:第五种模式下,需要注意在upstream中加⼊hash语句,server语句中不能写⼊weight等其他的参数,hash_method是使⽤的hash 算法 。
server后⾯常接的参数有如下⼏个:
down 表⽰单前的server暂时不参与负载
weight 默认为1.weight越⼤,负载的权重就越⼤。
max_fails :允许请求失败的次数默认为1.当超过最⼤次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout:max_fails次失败后,暂停的时间。
nginx和网关怎么配合使用
backup: 其它所有的⾮backup机器down或者忙的时候,请求backup机器。所以这台机器压⼒会最轻。
三、haproxy
haproxy是三者之间负载算法最多的,有⼋种,所以其应⽤场景也是最多,配置也是最灵活的,具体8种算法为:
①roundrobin,表⽰简单的轮询,这个是负载均衡基本都具备的;
②static-rr,表⽰根据权重,和nginx的weight算法类似;
③leastconn,表⽰最少连接者先处理,有点类似于nginx的fair,不过fair是根据响应时间;
④source,表⽰根据请求源IP,这个跟Nginx的IP_hash机制类似,我们⽤其作为解决session问题的⼀种⽅法,建议关注;
⑤ri,表⽰根据请求的URI,类似于nginx的url_hash;
⑥rl_param,表⽰根据请求的URl参数'balance url_param' requires an URL parameter name;
⑦hdr(name),表⽰根据HTTP请求头来锁定每⼀次HTTP请求;
⑧rdp-cookie(name),表⽰根据据cookie(name)来锁定并哈希每⼀次TCP请求。
四、总结
具体现⽹应⽤可以根据据体的实际情况选择最好的负载⽅式。三者中,lvs稳定性最好,可配置性最少;nginx针对域名、⽬录结构进⾏正则匹配是最强的,同时其对⽹络依赖⽐较⼩,不过性能上和lvs和haproxy相⽐稍差⼀点点;haproxy⽀持虚拟主机,尤其在session保持⽅⾯做的最好,其有三种算法可以实现session共享———— ip识别(source)、cookie识别、session识别三种,除此之外在对mysql做HA ⽅案时也经常会⽤到该软件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。