Haproxy 平衡源哈希类型一致仅路由到单个后端

Haproxy 平衡源哈希类型一致仅路由到单个后端

各位朋友,

我有一个装有 nginx 和 haproxy 的虚拟机,用作 Web 应用程序的负载均衡器,一旦客户端建立连接,该应用程序就需要保持与单个后端的会话粘性。

nginx 配置非常标准,但发布在下面。

upstream haproxy {
    server 127.0.0.1:5000;
    }

server {
    listen 192.168.1.10:443 ssl;
server_name foo.bar.com;

## Compression
gzip              on;
gzip_buffers      16 8k;
gzip_comp_level   4;
gzip_http_version 1.0;
gzip_min_length   1280;
gzip_types        text/plain text/css application/x-javascript text/xml application/xml application/xml+rss application/javascript text/javascript image/x-icon image/bmp;
gzip_vary         on;

tcp_nodelay on;
tcp_nopush on;
sendfile off;

access_log  /var/log/nginx/foo.bar.com_access.log  main;
error_log  /var/log/nginx/foo.bar.com_error.log  warn;

location / {
       #proxy_read_timeout 30; #to allow for large reports
       proxy_connect_timeout   10;
       proxy_send_timeout      75;
       proxy_read_timeout      180;
       proxy_buffering off;
       #proxy_buffer_size   128k;
       #proxy_buffers   4 256k;
       #proxy_busy_buffers_size   256k;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_pass http://haproxy;
 }


    error_page 502 502 = /maintenance.html;
    location = /maintenance.html {
    root /www/;
 }
}

这是 haproxy 配置

backend webapp
    balance source
        hash-type consistent 
        mode http
        server arwen.bar.com 192.168.1.50:8080 check port 8080
    server beren.bar.com 192.168.1.53:8080 check port 8080
    server boromir.bar.com 192.168.1.55:8080 check port 8080
    server isildur.bar.com 192.168.1.62:8080 check port 8080

然而,当我查看统计数据时,我只看到一台后端服务器正在处理所有传入连接,这与负载平衡的目的背道而驰。我以为我已经根据文档正确设置了 haproxy,但我错过了什么?

haproxy 统计页面

答案1

首先,如果这就是你的整个 Nginx 配置文件,那你为什么要费心进行两次代理呢?为什么不直接给 HAProxy 一个“公共”IP 并让它完成所有工作呢?

无论如何,由于您正在代理 HAProxyNGginx,所有的连接都来自同一个地方(Nginx)。

如果你想基于客户的IP,那么你必须告诉 HAProxy 根据你在 Nginx 中设置的X-Real-IP或标头进行平衡。X-Forwarded-For

如果您使用以下命令,您的新 HAProxy 配置将如下所示X-Real-IP

backend webapp
  balance hdr(X-Real-IP)
  hash-type consistent 
  mode http

  server arwen.bar.com 192.168.1.50:8080 check port 8080
  server beren.bar.com 192.168.1.53:8080 check port 8080
  server boromir.bar.com 192.168.1.55:8080 check port 8080
  server isildur.bar.com 192.168.1.62:8080 check port 8080

相关内容