负载均衡
二层负载均衡:通过改写报文的目标MAC地址为上游服务器MAC地址,源IP地址和目标IP地址是没有变的,负载均衡服务器和真实服务器共享一个VIP,如LVS DR工作模式。
四层负载均衡:根据端口将报文转发到上游服务器(不同的IP地址+端口),如LVS NAT模式,HaProxy。
七层负载均衡: 根据端口号和应用层协议如HTTP协议的主机名、URL,转发报文到上游服务器(不同的IP地址+端口),如HaProxy、Nginx。
TIPS:
Nginx的性能是万级,一般的Linux服务器上装个Nginx大概能到5万/秒;LVS的性能是十万级,据说可达到80万/秒;F5性能是百万级,从200万/秒到800万/秒都有。
4层和7层的区别就在于协议和灵活性。Nginx支持HTTP、E-mail协议,而LVS和F5是4层负载均衡,和协议无关,几乎所有应用都可以做,例如聊天、数据库等。
Nginx种的负载均衡算法
round-robin:轮询,默认负载均衡算法。
ip_hash:根据客户IP进行负载均衡,即相同IP将负载均衡到同一个upstream server。
upstream backend {
ip_hash;
server 192.168.61.1:9080 weight=1;
server 192.168.61.1:9090 weight=2;
}
hash key:对某一个key进行哈希或者使用一致性哈希算法进行负载均衡。
根据URI进行负载均衡:可以使用Nginx变量
upstream backend {
hash $uri;
server 192.168.61.1:9080 weight=1;
server 192.168.61.1:9090 weight=2;
}
一致性哈希算法:consistent_key动态指定
upstream backend {
hash $consistent_key consistent;
server 192.168.61.1:9080 weight=1;
server 192.168.61.1:9090 weight=2;
}
如下location指定了一致性哈希key,此处会优先考虑请求参数cat(类目),如果没有,则再根据请求uri进行负载均衡。
localtion / {
set $consistent_key $arg_cat;
if ($consistent_key = "") {
set $consistent_key $request_uri;
}
}
least_conn:最少连接算法。
least_time:最小平均响应时间算法,仅在Nginx商业版中提供。
失败重试
主要有两部分配置:upstream server和proxy_pass。
upstream backend {
server 192.168.61.1:9080 max_fails=2 fail_timeout=10s weight=1;
server 192.168.61.1:9090 max_fails=2 fail_timeout=10s weight=2;
}
max_fails:最大重试次数
fail_time: 超时时间、恢复重试的等待时间