预计阅读本页时间:-
7.3.4 服务器健康检测技术
负载均衡器现在都使用了非常多的服务器健康检测技术,主要方法是通过发送不同类型的协议包然后检查能否接收到正确的应答来判断后端的服务器是否存活,如果后端的服务器出现故障就会自动剔除。其中所包括的三种主要技术如下。
·ICMP:负载均衡器向后端的服务器发送ICMP ECHO包(就是我们俗称的“ping”),如果能正确收到ICMP REPLY,则证明服务器ICMP协议处理正常,即服务器是活着的。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
·TCP:负载均衡器向后端的某个端口发起TCP连接请求,如果成功完成三次握手,则证明服务器TCP协议处理正常。
·HTTP:负载均衡器向后端的服务器发送HTTP请求,如果收到的HTTP应答内容是正确的,则证明服务器HTTP协议处理正常。
这里以Nginx来举例说明下。
upstream模块是Nginx负载均衡的主要模块,它提供了简单的办法来实现在轮询和客户端IP之间的后端服务器负载均衡,并且可以对服务器进行健康检查。upstream并不处理请求,而是通过请求后端服务器得到用户的请求内容。在转发给后端时,默认是轮询。下面为一组服务器负载均衡的集合:
upstream php_pool {
server 192.168.1.7:80 max_fails=2 fail_timeout=5s;
server 192.168.1.8:80 max_fails=2 fail_timeout=5s;
server 192.168.1.9:80 max_fails=2 fail_timeout=5s;
}
这里针对upstream模块的相关指令进行一下说明。
·max_fails:定义可以发生错误的最大次数。
·fail_timeout:若Nginx在fail_timeout设定的时间内与后端服务器通信失败的次数超过max_fails设定的次数,则认为这个服务器不再起作用;在接下来的fail_timeout时间内,Nginx不再将请求分发给该失效的机器。
·down:把后端标记为离线,仅限于ip_hash。
·backup:把后端标记为备份服务器,在后端服务器全部无效时才启用。
Nginx的健康检查主要是针对后端服务所提供的,且功能被集成在upstream模块中,共有如下两个指令:max_fails和fail_timeout,指令说明见上文。
Nginx健康检查机制为:在检测到后端服务器故障后,Nginx依然会把请求转向该服务器,不过,当它发现timeout或refused时,则会把请求改发到upstream的其他节点,直到获得正常数据后,Nginx才会把数据返回给用户,这也体现了Nginx的异步传输。这一点跟LVS/HAProxy的区别很大,在LVS/HAProxy里,每个请求都只有一次机会,假如用户发起一个请求,结果该请求分到的后端服务器刚好挂掉了,那么这个请求就失败了。