Nginx负载均衡策略 - least_conn 最少连接

配置

$ vim $NGINX_HOME/conf/nginx.conf
worker_processes  auto;
events {
    use  epoll;
    worker_connections  65535;
}
http {
    upstream aidan.org{
        least_conn;
        server 127.0.0.1:8881;
        server 127.0.0.1:8882;
        server 127.0.0.1:8883;
    }
    server {
        listen       80;
        server_name  aidan.org;
        location / {
            proxy_pass  http://aidan.org;
            proxy_set_header  Host  $host;
            proxy_set_header  X-Real-IP  $remote_addr;
        }
    }
}
$ nginx -s reload

为了测试一下最少连接数负载均衡策略,我们修改了一下我们的Java代码:这里提供两个接口/a/a/a/b,其中/a/b会阻塞50秒

@RestController
@RequestMapping("/a")
public class NginxController {
    @GetMapping("/a")
    public String a(HttpServletRequest request) {
        String host = request.getHeader("Host");
        String realIp = request.getHeader("X-Real-IP");
        String port = System.getProperty("server.port");
        return "hello nginx,I'm " + port + " Server.nginx host is " + host + ",your realIp is " + realIp + "\n";
    }

    @GetMapping("/b")
    public String b(HttpServletRequest request) {
        String host = request.getHeader("Host");
        String realIp = request.getHeader("X-Real-IP");
        String port = System.getProperty("server.port");
        try {
            Thread.sleep(50000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "hello nginx,I'm " + port + " Server.nginx host is " + host + ",your realIp is " + realIp + "\n";
    }
}

重新部署并启动Java Web程序

$ java -Dserver.port=8881 -jar nginx-demo-0.0.1-SNAPSHOT.jar
$ java -Dserver.port=8882 -jar nginx-demo-0.0.1-SNAPSHOT.jar
$ java -Dserver.port=8883 -jar nginx-demo-0.0.1-SNAPSHOT.jar

测试:打开三个终端:
在第一、二两个终端里访问/a/b,使集群中的两台服务器的连接保持50秒,

$ curl aidan.org/a/b

在第三个终端里访问/a/a多次

[root@localhost ~]# curl aidan.org/a/a
hello nginx,I'm 8881 Server.nginx host is aidan.org,your realIp is 127.0.0.1
[root@localhost ~]# curl aidan.org/a/a
hello nginx,I'm 8881 Server.nginx host is aidan.org,your realIp is 127.0.0.1
[root@localhost ~]# curl aidan.org/a/a
hello nginx,I'm 8881 Server.nginx host is aidan.org,your realIp is 127.0.0.1
[root@localhost ~]# curl aidan.org/a/a
hello nginx,I'm 8881 Server.nginx host is aidan.org,your realIp is 127.0.0.1

发现提供/a/a服务的server始终是同一台机器,这里是8881,
等另外两个终端的命令执行完毕后发现被阻塞的两个服务是8882、8883
也就是说当时8881的连接数最少,这就是nginx最少连接负载。

小结

最少连接负载通过least_conn指令定义

发布了32 篇原创文章 · 获赞 0 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/h13140995776/article/details/101172201
今日推荐