一次简单的负载均衡配置实战

最近的问答项目中有需求,部署多套python service,由其他程序轮巡调用接口,因为调用过程中存在多线程调用,所以做了如下负载均衡配置。

首先配置upstream指定负载均衡器

upstream qa_ask{
    server 192.168.1.100:15995;
    server 192.168.1.100:15996;
    server 192.168.1.100:15997;
    server 192.168.1.100:15998;
    server 192.168.1.100:15999;
    }

upstream qa_ask_sec{
    server 192.168.1.101:16009;
    server 192.168.1.101:16010;
    }

在这里指定两个均衡器分别命名为
qa_ask:用于主环境问答
qa_ask_sec:用于次要环境问答

在未指定负载均衡算法的的情况下,默认为轮巡,即按照时间顺序逐一分配到指定的后端服务器,如果其中有服务器宕机,则自动剔除,不影响用户的使用。

除此之外,还可以为没太服务器配置调度状态,常用的有以下几种:
1、down:表示当前服务器不参与负载均衡的调度。

2、backup:预留的备用服务器,当其他服务器故障或者繁忙的时候,会请求备用服务器,所以,这台服务器的访问压力最轻。
3、max_fails:允许请求的失败次数,默认为1,需要配合fail_timeout一起使用。
4、fail_timeout:当服务器连续失败次数为max_fails设置的最大值时,将服务器暂停的时间配置,默认是10s,在接下来配置的时间内,nginx不会将请求分发给这个失败的server

示例如下:

upstream qa_ask{
    server 192.168.1.100:15995 down;
    server 192.168.1.100:15996 weight=2;
    server 192.168.1.100:15997 weight=3 max_fails=3 fail_timeout=20s;
    server 192.168.1.100:15998 weight=4 max_fails=3 fail_timeout=20s;
    server 192.168.1.100:15999 backup;
    }

upstream qa_ask_sec{
    server 192.168.1.101:16009; #默认weight=1
    server 192.168.1.101:16010; #默认weight=1
    }

本次项目中每个python service的处理能力相同,所以使用默认的算法就可以满足,并未做特殊配置。

配置好均衡器,开始配置server

server {
    listen       80 ;
    root         /usr/share/nginx/html;

    add_header Access-Control-Allow-Origin "*";
    add_header Access-Control-Allow-Headers: Origin,X-Requested-With,Content-Type,Accept;

    location /ask/ {
            proxy_pass http://qa_ask/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    location /asksec/ {
            proxy_pass http://qa_ask_sec/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

}

使用location /ask/配置路径
proxy_pass http://qa_ask/指定均衡器

如上配置即访问/ask/可以访问到qa_ask中配置的服务器
访问/asksec可以访问到qa_ask_sec中配置的服务器

上述部分完整配置如下

upstream qa_ask{
    server 192.168.1.100:15995;
    server 192.168.1.100:15996;
    server 192.168.1.100:15997;
    server 192.168.1.100:15998;
    server 192.168.1.100:15999;
    }

upstream qa_ask_sec{
    server 192.168.1.101:16009;
    server 192.168.1.101:16010;
    }

server {
    listen       80 ;
    root         /usr/share/nginx/html;

    add_header Access-Control-Allow-Origin "*";
    add_header Access-Control-Allow-Headers: Origin,X-Requested-With,Content-Type,Accept;

    location /ask/ {
            proxy_pass http://qa_ask/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    location /asksec/ {
            proxy_pass http://qa_ask_sec/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

}

负载均衡有以下算法可以使用:
1、轮询(默认):上述配置使用的算法。
2、weight:指定轮询的权重,weight值越大,分配的几率就越高,当服务器性能不均衡时可以使用,将高性能服务器的权重配置的稍大些,从而提升整体性能。
3、ip_hash:按照访问的IP的哈希结果分配服务器,这样可以让同一个ip的房客访问到同一个后端服务器,可以有效的解决动态网页存在的session共享问题。
4、fair(第三方):需要Nginx的upstream_fair模块。按照页面大小和加载时长进行分配,响应时间短的优先分配。
5、url_hash(第三方):需要Nginx的hash软件包。按照访问URL的哈希来进行请求的分配,可以让相同的URL定向到相同的后端服务器,从而提高后端缓存服务器的效率。

“如果”

上一篇

VMware安装CentOS

下一篇
评论
发表评论 说点什么
还没有评论
308
1