Nginx代理的多端口实例负载均衡

Nginx作为高性能服务器,除了搭建普通的web服务,也经常用作反向代理或微服务网关。

Nginx代理的多端口实例负载均衡_第1张图片

为了实现服务高可用,通常会启动多个服务实例,这样某个实例挂掉并不影响整体的可用性,Nginx可以在多个实例中实现负载均衡,并提供了多种负载均衡策略。

本人手头只有一台服务器,所以就在本机多端口开启多个实例,并在这些实例中实现负载均衡。

在http配置:

upstream backser {
    server localhost:7100;
    server localhost:7200;
    server localhost:7300;
}

server {
    listen   8000;
    server_name  backserver;

    location / {
        root  html;
        index  index.html index.htm;
        proxy_pass   http://backser;
    }
}

启动服务端:

# 启动三个Java实例
java -jar app.jar --server.port=7100
java -jar app.jar --server.port=7200
java -jar app.jar --server.port=7300

# 启动nginx
start nginx

默认情况Nginx会把请求轮流派发给各个实例,实现最简单的负载均衡。

这种轮询策略可以加入权重,进行负载微调和故障转移:

upstream backser {
    server localhost:7100 weight=1 fail_timeout=3s max_fails=2;
    server localhost:7200 weight=2 fail_timeout=3s max_fails=2;
    server localhost:7300 weight=3 fail_timeout=3s max_fails=2;
}

另一种使用较多的是ip_hash策略,能将来自同一IP的客户端请求派发给同一个服务实例,在分布式环境中,可以解决session不共享的问题。

upstream backser {
    server localhost:7100 fail_timeout=3s max_fails=2;
    server localhost:7200 fail_timeout=3s max_fails=2;
    server localhost:7300 fail_timeout=3s max_fails=2;
    ip_hash;
}

加载修改后的配置:

nginx -s reload

然后同一个客户端请求会发现只有一个实例在响应。

Nginx代理的多端口实例负载均衡_第2张图片
扫一扫关注我的微信公众号

你可能感兴趣的:(Nginx代理的多端口实例负载均衡)