nginx的故障转移
其定义就是若集群中有一台服务器挂了或者是请求超时了,nginx会将已经发送至该服务器的请求重新发送到另一台服务器。
nginx雪崩及处理方法
一般情况下都会觉得这是一个很好的功能,但是这个好用的功能也会有坑。试想一下,在并发量很大的情况下,服务器太忙了处理用户请求出现了超时,因为故障转移机制,nginx会把这些个超时的请求交给集群中的其他服务器去处理。但是同样是一个集群,一般来说服务器所承担的压力都是同样大小的,这样的话,其他服务器因为要处理多出来的请求,导致所承受的压力更大,可能会导致服务器压力太大而崩溃。一台服务器崩溃了,原本要它处理的请求又会分给其他服务器,这样的连锁反应,就会导致整个集群都变得不可用。这种现象就是nginx雪崩。
那么有什么办法处理或者规避nginx雪崩呢,目前看来有两个解决办法
一是可以限制重试次数,即若一个请求超时到一定次数后就不让其重试了
二是可以限制重试超时时间,即一个请求在集群中的重试总时间超过了规定的时间之后就放弃重试
这两种方式都是可以通过配置文件实现的
限制重试次数:proxy_next_upstream_tries 3
限制重试超时时间: proxy_next_upstream_timeout 60
nginx熔断机制
当某台被代理的服务器处理请求,出现一定次数的错误的情况下,nginx在一定时间内,将不会把请求分配给这台服务器,这个时间就是熔断时间。过了熔断时间后,nginx会再次尝试分配一次请求给该服务器处理,如果还失败,则继续熔断