我找不到该问题的解决方案,所以这是我的问题。
假设我有 3 台服务器,其中 2 台是上游服务器,1 台是负载均衡器。
这是我的基本配置
上游服务器
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
负载均衡器
worker_processes auto;
worker_rlimit_nofile 100000;
error_log off;
events {
worker_connections 5000;
multi_accept on;
use epoll;
}
http {
upstream myapp1 {
server 138.197.122.195;
server 138.197.122.293;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
}
我想要实现的是使用 nginx 的循环负载平衡功能将用户的请求发送/重定向到上游服务器。然后上游将直接向用户提供内容。
负载均衡器在这里的作用不是通过代理减少上游的负载,而是平等地向它们分配请求。但是,使用这些配置,所有请求和响应都将通过负载均衡器,消耗其带宽。还有其他方法可以使用 NGINX 轮询重定向请求吗?请帮忙。
我之所以要这样做,是因为对于一个像样的负载均衡器来说,带宽有限(成本高),因此无法有效扩展。例如,假设 3 台服务器每台有 100mbps 的带宽,如果一个用户消耗 1mbps,那么如果有 101 个用户,负载均衡器就会成为瓶颈。如果我可以将流量平均分配给两个上游,那么理论上系统最多可以为 200 个用户提供服务。
在大多数类似主题中,我发现人们使用循环 DNS 方法。我测试了它,但它并不可靠,因为 DNS 层次结构本身中有记录缓存,以及客户端地址缓存和重用。
答案1
你有点搞错了。轮询是一种负载平衡方法。你希望实现的是所谓的DNS 循环。
但即使在这里,您可以在链接上看到,您的流量也会通过负载均衡器,因为这就是重点。您可以尝试不使用负载均衡器,只安装两台服务器,但您必须为它们的两个 IP 地址设置完全相同的域名。虽然这可以实现您想要的效果,但对您没有任何好处,因为它有可能在访问过程中丢失用户会话并由另一台服务器拾取。到目前为止,我们还没有讨论数据库复制,这也是本例中的一个问题。
我的建议是多投资一点负载均衡器服务器带宽,这样你就不会遇到任何问题。甚至,我会使用,这样Session persistence
你的用户就会一直停留在他们加入的服务器上。