Nginx 使用多个端口对应用程序进行负载平衡

Nginx 使用多个端口对应用程序进行负载平衡

我正在尝试为使用多个端口的应用程序设置负载平衡。该应用程序的初始连接在 TCP 端口“A”上建立,而辅助连接在 TCP 端口“B”上建立。

注意-该应用程序不是基于浏览器的。

我如何保证如果第一个连接转到节点 X,那么第二个连接也将发送到节点 X,而不是节点 Y?

这是我想要的:

USER1 --> Nginx --> Node X:A
USER1 --> Nginx --> Node X:B

以下是我不想要的,因为它会破坏应用程序:

USER1 --> Nginx --> Node X:A
USER1 --> Nginx --> Node Y:B

有人对如何在 Nginx 中实现此配置有什么建议/推荐吗?请记住,该应用程序不是基于浏览器的,因此使用 cookie、配置文件等的标准以浏览器为中心的方法似乎不适用 - 至少我还没有发现。

任何帮助都将不胜感激。

谢谢

答案1

这是一个非常基本和简单的配置。这里的关键是hash $remote_addr consistent;。它的作用是,创建客户端 IP 和后端服务器的映射,并确保每次来自特定 IP 的请求都会发送到其映射的后端,除非后端发生故障。
您可以自由添加其他配置行 keepalive、超时等。

stream {    
#  Custom log format to capture source and dest IP and request status
   log_format tcp_proxy '[$time_local] $remote_addr $protocol $upstream_addr'
                        '$status $bytes_sent $bytes_received $session_time';

   upstream tcp_backend {
      hash $remote_addr consistent;
      server backend1:ip;
      server backend2:ip;
   }

   server {
      listen ip:port;
      proxy_pass tcp_backend;
      access_log  /var/log/nginx-tcp_server-access.log   tcp_proxy;
   }
}

您可以在以下网址找到其他配置
https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/
http://nginx.org/en/docs/stream/ngx_stream_core_module.html
http://nginx.org/en/docs/http/ngx_http_upstream_module.html

相关内容