使用ip_hash指令进行NGINX负载均衡

时间:2018-01-10 19:20:56

标签: nginx load-balancing

我有一个简单的双节点服务器群集,在localhost:8001localhost:8002上运行,使用NGINX进行负载平衡。以下是我nginx.conf的http上下文。

http {
    include       mime.types;
    default_type  application/octet-stream;

    upstream backend {
        ip_hash;
        server localhost:8001;
        server localhost:8002;
    }

    log_format upstreamlog 'upstream: $upstream_addr: $request upstream-response-status: $upstream_status';

    server {
        listen              80;
        listen              [::]:80;
        server_name         localhost;
        access_log  logs/access.log  upstreamlog;

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

最初,对http://localhost/的所有请求都被重定向到在端口8001上运行的上游服务器。

- 记录

 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET /favicon.ico HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET /favicon.ico HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET /favicon.ico HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET /favicon.ico HTTP/1.1 upstream-response-status: 200
 ----
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET /favicon.ico HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET /favicon.ico HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET /favicon.ico HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: 200
 upstream: [::1]:8001: GET /favicon.ico HTTP/1.1 upstream-response-status: 200

现在,为了测试此设置的故障转移,我停止了在端口8001上运行的服务器。但是故障转移不起作用,所有后续请求也被转发到端口8001的服务器。

- 记录

 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: -
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: -
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: -
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: -
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: -
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: -
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: -
 ----
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: -
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: -
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: -
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: -
 ----
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: -
 upstream: [::1]:8001: GET / HTTP/1.1 upstream-response-status: -
 upstream: [::1]:8001, 127.0.0.1:8001, [::1]:8002: GET / HTTP/1.1 upstream-response-status: 504, 504, 200

NGINX花了很长时间,大约3分钟,切换到8002端口的另一个节点。我在配置中缺少什么?我知道默认max_fails1fail_timeout10 seconds。如何使NGINX切换到其他服务器节点,停机时间为零?

(注意:ip_hash必须用于会话亲和力和其他目的)

0 个答案:

没有答案