Skip to content
justan edited this page Aug 2, 2016 · 3 revisions

负载均衡原理,用 Nginx 自建一个负载均衡

本节我们用 Nginx 演示下负载均衡的开源方案。

假设我们已经在 “10.104.0.1” 和 “10.104.0.2” 上部署运行了 项目 4 的应用,监听在 “3000” 端口。

Nginx 负载均衡服务可以部署在任意与应用服务器网络互通的机器上。本节假设我们使用 “10.104.1.1” 这台机器来部署负载均衡服务。

基本配置

在 nginx 的配置文件中配置好 ‘proxy_pass’ 和 ‘upstream’ 即可, 默认情况下请求会平均的分配到 ‘upstream’ 中定义的主机上去。

http {
    upstream project4 {
        server 10.104.0.1:3000;
        server 10.104.0.2:3000;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://project4;
        }
    }
}

配置完成并重启 nginx 服务之后通过负载的地址(10.104.1.1)就可以访问项目4的服务内容了。

权重

默认的负载均衡会将请求尽量平均的分发到各个应用服务器中。权重参数 weight 可以定义各个服务器的负载权重。缺省的权重为 '1',下面例子中没 4 条请求中 3 条会发给 ‘10.104.0.1’ 1 条会发给 ‘10.104.0.2’。

upstream project4 {
    server 10.104.0.1:3000 weight=3;
    server 10.104.0.2:3000;
}

健康检查

健康检查指的是负载均衡中某台服务器出现异常不能访问的情况下,会将其标记成不可用。在达到一定阈值后请求也不会分发到这台机器上。具体由两个参数 max_failsfail_timeout 控制,在失败次数达到 max_fails 后,该服务器被标记不可用,在 fail_timeout 的时间内不会去重试被标记的服务器。

upstream project4 {
    server 10.104.0.1:3000 max_fails=10 fail_timeout=30s;
    server 10.104.0.2:3000;
}

回话保持

很多场景(比如文件断点续传等)我们希望一个用户的请求能够持续的发送到同一台机器上,这需要负载均衡能对用户请求做出识别。 最简单的一种思路的是根据客户端 IP 来识别用户身份。加上 ip_hash 参数后,来自同一 IP 的请求将持续的分发到同一台服务器上。

upstream project4 {
    ip_hash;
    server 10.104.0.1:3000;
    server 10.104.0.2:3000;
}

Clone this wiki locally