首先给大家科普一下负载均衡的实现原理:

nginx负载均衡其中一台服务挂了如何分配到另一台机器 nginx负载均衡服务器挂掉_负载均衡

这个负载均衡我是使用反向代理实现的,所以在外面访问时就直接访问我的反向代理服务器的ip或域名就好了。在用户访问我的反向代理时Web服务器会自动将这个请求分配到其他服务器上面执行。这时,你可以选择让这个请求去访问一个集群或多个集群。这些都是等下自己设置的,随自己而定。

 

如上图这个情况,是没有发生服务器宕机的情况下,是正常的,但是他总会有问题会产生的,比如说在反向代理服务器分配请求时某台服务器突然宕机了,这时就很难受了,所以我们为了防止这类情况的发生,只有提前准备好应对这个情况的措施。

nginx负载均衡其中一台服务挂了如何分配到另一台机器 nginx负载均衡服务器挂掉_负载均衡_02

如上图所示,发生服务器宕机情况下就让反向代理服务器停止给这台已经宕机的服务器分配请求,在重新找一个新的服务器用来代替这台宕机的服务器,来承担这台宕机服务器所需要承担的压力。

 

下面,给大家说下负载均衡配置的几种方式:

  1. 轮询(默认
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。  可能不是按照顺序进行访问的,最终后端服务器的负载的比例是:1:1:1

        适用于: 后端服务器性能均衡的情况。
2、weight ( 权重 )

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

例子:

三台服务器,第一台服务器权重 2 , 第二台和第三台服务器权重为1,最终服务器的负载比: 2:1:1

适用于:后端服务器性能不均的情况

3、ip_hash(IP哈希)

根据用户访问网站的外网ip(192.168.1.252,不是hash ip的全部,hash的内容是是ip的一部分192.168.1),hash之后,把用户所有的请求分发到一台服务器.
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

5、url_hash(第三方)

(根据当前访问的url路径进行hash,不能解决session共享问题)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

 

下面具体说下该怎么配置负载均衡:

      1、在nginx.conf中找到http,在http中与server同级的地方写上upstream  web{ server  域名 }

upstream web {
    server 192.168.1.1;
}

在配置upstream时可以根据服务器的本身的性能差别及职能,可以设置不同的参数控制。

down 表示负载过重或者不参与负载

weight 权重过大代表承担的负载就越大

backup 其它服务器宕机时或down时才会请求backup服务器

max_fails 失败超过指定次数会暂停或请求转往其它服务器

fail_timeout 失败超过指定次数后暂停时间

 

然后在server中的location /中加入几行代码

location / {
        #自动访问文件
            index  index.html index.htm index.php;
            #负载均衡
            proxy_pass http://web;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

加入这几段代码就好了,在每次访问这个反向代理服务器时都会走upstream  web中配置的几个服务器。

另外,小编给大家配图一张:

nginx负载均衡其中一台服务挂了如何分配到另一台机器 nginx负载均衡服务器挂掉_nginx_03